У меня есть набор полилиний (нумерация в 100s тысяч, причем каждая полилиния имеет около 200-300 вершин). Они представляют маршруты на карте (все взяты из API Карт Google, если это помогает). Вершины - это координаты широты/долготы.
Теперь мне задана полилиния запроса, и мне нужно найти "перекрытия" полилинии запроса с любой из существующих полилиний. Таким образом, сами результаты будут представлять собой полилинии, отсортированные в порядке максимума до наименьшего перекрытия. Мне нужны только первые 100 результатов. Еще одна проблема заключается в том, что перекрытие не обязательно должно быть точным, но может быть приблизительным (т.е. Части сегментов линии, которые считаются перекрывающимися, не должны лежать на другом, но должны быть "близки" друг к другу).
Чтобы дать конкретное представление, в левой части изображения ниже, синяя полилиния (полилиния A) является полилинией в базе данных, а красная полилиния (полилиния B) является полилинией запроса. Алгоритм должен определить полилинию, обозначенную черным, как показано справа.
В настоящее время я склоняюсь к использованию пространственной базы данных (рассматриваемый вариант - PostgreSQL + PostGIS), но я не уверен, что латентность будет приемлемой - запрос должен немедленно возвращать результаты. Моя вычислительная геометрия-fu, по общему признанию, слаба, но мне было интересно: существуют ли какие-либо существующие алгоритмы или подходы, которые могут оказаться полезными для решения этой конкретной проблемы?
Большое спасибо заранее!