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