Получение путевых точек между координатами 2 gps из таблицы городов - PullRequest
1 голос
/ 31 мая 2011

Как я могу получить список городов, которые находятся на маршруте (путевые точки) между координатами 2 gps?

У меня есть таблица всех городов, лат-лон.Поэтому, если у меня есть начальное местоположение (lat-lon) и конечное местоположение (lat-lon) ... Должно быть очень легко определить путь городов (из таблицы), чтобы пройти (путевые точки), чтобы добраться от начала (широта)-lon) en (лат-лон)?

Я посмотрел разные алгоритмы и отношение.Мне все еще не ясно.

Ответы [ 4 ]

2 голосов
/ 31 мая 2011

Если вы используете метод между точками A и B, то вы просто запросите города с широтой и долготой между первым и вторым, соответственно.

Если вы хотите получить города, которые находятся в пределах X миль от прямой линии от A до B, то вы должны рассчитать начальную точку и наклон, а затем запросить города, которые находятся в пределах X миль от линии, которая создает

Если вы не используете простой метод «точка-точка-В», который игнорирует дороги, то вам понадобятся какие-то данные о фактических дорогах между А и В, чтобы мы могли дать вам ответ. Это можно сделать с помощью системы Node в вашей базе данных, а также с помощью различных доступных API геолокации.

1 голос
/ 31 мая 2011

Хм ... Я использовал между мин и макс для чего-то вроде этого, но не совсем то же самое.попробуйте возможно:

SELECT * from `cities` WHERE `lat` BETWEEN 'minlat' AND 'maxlat' AND `lon` BETWEEN 'minlon' and 'maxlon';

что-то подобное может сработать

посмотрите сравнение mysql здесь:

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html

1 голос
/ 31 мая 2011

решение этой проблемы можно найти с помощью стандартных алгоритмов дискретной маршрутизации

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

узлы и ребра образуют граф ... начальная точка и пункт назначения известны ... теперь вы можете использовать алгоритмы, такие как A * или djikstra, чтобы найти маршрут вдоль этого графа

типичная проблема для этого подхода может заключаться в том, что у вас нет определений для ребер (используемых прямых путей между местоположениями). Вы можете создать такую ​​«дорожную сеть» различными способами, например:

инициализировать "Network_ID" с 0

выберите начальную точку и найдите ближайшую другую точку. измерить расстояние и умножить его на коэффициент. Теперь подключите каждое местоположение к исходному местоположению, которое имеет расстояние меньше этого значения и еще не связано с текущим местоположением. добавьте в список все местоположения, которые были связаны этим шагом. пометьте текущее местоположение текущим «Network_ID», повторите этот шаг для следующего местоположения в этом списке. если в вашем списке нет мест, увеличьте «Network_ID» и выберите случайное местоположение, которое еще не было обработано, и повторите шаг

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

Вы должны убедиться, что у отправителя и пункта назначения одинаковые идентификаторы сети, или что обе сети были подключены

0 голосов
/ 08 июля 2011

Я знаю, что это поздний ответ, но если вы все еще работаете над этой проблемой, вам следует прочитать это: -
http://dev.mysql.com/doc/refman/5.6/en/spatial-extensions.html

...