Küçük segmentleri daha büyük olasılıkla ilişkili oldukları daha büyük bir segmentle eşleştirmeye çalışıyorum: nispeten yakın, benzer rulman ve birbirine bakacak.
İşte sahip olduğum verilerin tipik bir örneği:
Burada, 711 ve 707'nin hiçbir şeyle eşleşmediği sırada segment 652 ile 198969'u eşleştirmem gerekiyor.
Ben farklı yöntemler, özellikle Hausdorff mesafe ( burada cevaplara dayalı ) aradım . PostGIS kullanarak hesapladım ama garip sonuçlar alıyorum: en kısa mesafe 707 ile 198985 arasında ve 652'nin 198969'a 198985'ten daha büyük bir mesafesi var (gerekirse sorguyu ve sonuçları ekleyebilirim).
Hausdorff aslında bunu çözmek için doğru yöntem midir? Başka yaklaşımlar var mı? Bahsettiğim parametreler (mesafe, yön, vb.) Üzerinde bir dizi kontrol oluşturmayı düşündüm, ancak kenar vakaları veya ne kadar olduklarına dair eşik gibi şeyleri işlemek için bir sürü koşul eklemekten korkuyorum birbirine bakacak şekilde.
Güncelleme: Kabul edilebilir bir uzlaşma gibi görünen bir yöntem buldum:
- İlk olarak, eşleştirmeye çalıştığım mavi alandan (PostGIS
<->
operatörünü kullanarak ) 10 metreden daha kısa olan en yakın 10 siyah segmenti buluyorum . - Daha sonra siyah olanların her birinde mavi segmentin uçlarına en yakın noktaları bularak yeni bir segment oluşturuyorum (kullanarak
ST_ClosestPoint
) ve uzunluğu mavi olanın% 90'ından az olan sonuçları filtreliyorum (yani segmentler bakan, veya rulman farkı ~ 20 ° 'den fazla) - Sonra ilk sonucu mesafeye ve varsa Hausdorff mesafesine göre sıralıyorum.
Yapılması gereken bazı ince ayarlar olabilir, ancak şimdilik kabul edilebilir bir iş yapıyor gibi görünüyor. Hala bazı kenar durumlarda kaçırdıysanız çalıştırmak için başka yöntemler veya ek kontroller arıyor.