Ich versuche, kleine Segmente mit einem größeren Segment abzugleichen, mit dem sie am wahrscheinlichsten zu tun haben: relativ eng, ähnlich gelagert und einander zugewandt.
Hier ist ein typisches Beispiel für die Daten, die ich habe:
Hier müsste ich das Segment 652 mit 198969 abgleichen, während 711 und 707 zu nichts passen.
Ich habe nach verschiedenen Methoden gesucht, insbesondere nach der Hausdorff-Distanz (basierend auf den Antworten hier ). Ich habe es mit PostGIS berechnet, aber ich erhalte merkwürdige Ergebnisse: Die kürzeste Entfernung, die ich erhalte, liegt zwischen 707 und 198985, und 652 hat eine größere Entfernung zu 198969 als zum Beispiel zu 198985 (ich kann die Abfrage und die Ergebnisse bei Bedarf hinzufügen).
Ist Hausdorff tatsächlich die richtige Methode, um dies zu lösen? Gibt es noch andere Ansätze? Ich habe überlegt, einfach eine Reihe von Überprüfungen der von mir genannten Parameter (Entfernung, Peilung usw.) durchzuführen, aber ich habe Angst, eine ganze Reihe von Bedingungen hinzufügen zu müssen, um Randfälle oder Dinge wie Schwellenwerte für deren Höhe zu behandeln Einander gegenüberstehen.
Update: Ich habe eine Methode gefunden, die als akzeptabler Kompromiss erscheint:
- Ich finde zuerst die 10 nächsten schwarzen Segmente von dem blauen, das ich (mit dem PostGIS-
<->
Operator) abgleichen möchte und die weniger als 10 Meter entfernt sind. - Ich erstelle dann ein neues Segment, indem ich die nächsten Punkte zu den Enden des blauen Segments auf jedem der schwarzen finde (mit
ST_ClosestPoint
) und die Ergebnisse herausfiltere, deren Länge weniger als 90% des blauen ist (was bedeutet, dass die Segmente nicht sind) oder dass die Peilungsdifferenz mehr als ~ 20 ° beträgt) - Dann erhalte ich das erste Ergebnis sortiert nach Entfernung und Hausdorff-Entfernung, falls vorhanden.
Möglicherweise müssen einige Feinabstimmungen vorgenommen werden, aber es scheint vorerst eine akzeptable Arbeit zu leisten. Ich suche immer noch nach anderen Methoden oder zusätzlichen Überprüfungen, die ausgeführt werden sollen, wenn ich einige Randfälle verpasst habe.