Я пытаюсь сопоставить небольшие сегменты с более крупным сегментом, с которым они, скорее всего, связаны: относительно близко, схожим подшипником и лицом друг к другу.
Вот типичный пример данных, которые у меня есть:
Здесь я должен был бы соответствовать сегменту 652 к 198969, в то время как 711 и 707 не соответствуют ничему.
Я искал различные методы, в частности расстояние Хаусдорфа (на основе ответов здесь ). Я вычислил его, используя PostGIS, но получаю странные результаты: самое короткое расстояние, которое я получаю, находится между 707 и 198985, и 652 имеет большее расстояние до 198969, чем, например, 198985 (я могу добавить запрос и результаты, если необходимо).
Хаусдорф на самом деле правильный метод для решения этой проблемы? Есть ли другие подходы? Я думал просто о создании набора проверок для параметров, которые я упомянул (расстояние, азимут и т. Д.), Но я боюсь, что мне нужно будет добавить целый ряд условий для обработки краевых случаев или таких вещей, как пороговое значение, на сколько они обращенных друг к другу.
Обновление: я нашел метод, который кажется приемлемым компромиссом:
- Сначала я нахожу 10 ближайших черных сегментов из синего, который я пытаюсь сопоставить (используя
<->
оператор PostGIS ), которые находятся на расстоянии менее 10 метров. - Затем я создаю новый сегмент путем нахождения ближайших точек к концам синего сегмента на каждом из черных (используя
ST_ClosestPoint
) и отфильтровываю результаты, длина которых составляет менее 90% синего (то есть сегменты не являются или разница подшипников составляет более ~ 20 °) - Затем я получаю первый результат, отсортированный по расстоянию и расстоянию Хаусдорфа, если таковые имеются.
Там может быть какая-то тонкая настройка, но пока она кажется приемлемой. Все еще ищу какие-либо другие методы или дополнительные проверки для запуска, если я пропустил некоторые крайние случаи.