2013-09-13 2 views
0

У меня есть база данных, которая содержит все путевые точки для каждой дороги в Великобритании.Ближайшая дорога, заданная широта и долгота

Я пытаюсь построить навигационное приложение, учитывая пользователь широту & долготы будет рассчитать ближайший путь из базы данных & дисплея имени

Отрывка из JSON представления базы данных

[ 
{ 
    "NAME": "Trinity Road", 
    "coordinates": [ 
     [ 
      1.7595267, 
      52.4778475 
     ], 
     [ 
      1.7587864, 
      52.4774 
     ] 
    ] 
}, 
{ 
    "NAME": "Wilde Street", 
    "coordinates": [ 
     [ 
      1.7593497, 
      52.4795499 
     ], 
     [ 
      1.7594677, 
      52.4795041 
     ], 
     [ 
      1.7598164, 
      52.4793277 
     ] 
    ] 
} 
] 

Проблема, с которой я столкнулся, - это правильно найти ближайшую дорогу. Я не могу найти подходящих алгоритмов, которые заданы точкой, найдет ближайший путь/линию

Он не может просто сравнить координаты, так как ближайшая дорога может быть между 2-мя пунктами (исключает «Ближайшая проблема с двумя точками»).

Может ли кто-нибудь предложить подходящий алгоритм?

Наилучшее возможное решение Я могу подумать, что это взвешенная сетка/матрица, где дороги имеют вес в зависимости от их близости к пользователю &, а затем выбирают дорогу с наивысшим значением, близкую к пользователю (но это может быть дорого).

Я хотел бы решить эту проблему без использования Web API, такие как Google-карты, ни PostGIS (приходится использовать SQLite - мобильное приложение)

+0

Является ли эта база данных основанной на OpenstreetMap, Ordnance Survey, TomTom или Nokia Maps? – AlexWien

+0

Обследование боеприпасов – Ryan

+0

- это то, что бесплатно сейчас или в рамках контракта с ОС, кстати, смотрю на мой ответ – AlexWien

ответ

3

Вы можете использовать т-дерево или квадрантов, чтобы ограничить поиск пространство, а затем диаграмму ворона, чтобы найти ближайшую дорогу. Затем вы можете использовать 2 точки или больше пути для подачи диаграммы voronoi, а затем выполнить поиск диаграммы для ячейки voronoi, содержащей местоположение. Возможно, вы можете попробовать взвешенную диаграмму ворона. Вы можете загрузить мой php-класс additivley с взвешенной диаграммой voronoi @https://awvd.codeplex.com/.

0

Использование квадранта - правильный подход к ограничению пространства поиска. Параметрируйте квадровое дерево таким образом, чтобы оно не содержало более 100 строк на четырехуровневый узел.

Вам не нужна (сложная) диаграмма ворона.

После поиска в квадратном дереве результатом будет список линий, перекрывающих четырехуровневый узел.

Теперь используйте distanceToLineSegment (Point, point0, point1); (поиск для этого имени)

взять кратчайшее расстояние.

Вы должны преобразовать точки на лету Перед вызовом distanceToLineSegment, таким образом, чтобы они находились в декартовом пространстве. Используйте Центр квад-узла в качестве центра трансформации.

Смежные вопросы