2011-05-30 3 views
1

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

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

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

+0

Имеет ли y наша таблица городов включает данные привязки? например «город А в город Б, сесть на дорогу № 57»? Помещения сами по себе бесполезны, если у вас нет данных о том, как они соединяются. В противном случае простым ответом будет «диск непосредственно между пусковыми и конечными точками» –

ответ

2

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

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

Если вы не используете простую точку A для метода точки B, которая игнорирует дороги, вам понадобятся какие-то данные по фактическим дорогам между A и B, чтобы мы могли дать вам ответ. Это можно сделать с помощью системы узлов в вашем db, и это также можно сделать, используя различные API геолокации, которые находятся там.

1

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

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

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

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

Initialize «идентификатор_сеть» с 0

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

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

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

1

Хм ... Я использовал BETWEEN min AND max для чего-то подобного, но не совсем то же самое. попробовать, может быть:

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

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