Рассчитать расстояние без карты - PullRequest
1 голос
/ 28 мая 2011

Можно ли рассчитать расстояние вождения без использования карты, используя только долготу и широту?

Я пишу приложение на стороне сервера и стараюсь избегать веб-сервисов, API и сторонних инструментов.

Можете ли вы помочь мне, как достичь этой цели?

Ответы [ 4 ]

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

формула 'haversine' вычисляет расстояния между двумя точками, то есть кратчайшее расстояние над поверхностью земли, и дает расстояние as-the-crow-flys между точками игнорирование любых холмов !, кривых, дорог, препятствий и т. д.

Формула Haversine:

R = earth’s radius (mean radius = 6,371km)
Δlat = lat2− lat1
Δlong = long2− long1
a = sin²(Δlat/2) + cos(lat1).cos(lat2).sin²(Δlong/2)
c = 2.atan2(√a, √(1−a))
d = R.c 

Вы также можете заглянуть в сферический закон косинусов

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

Имея данные, которые у вас есть

  • Вы можете сделать простой расчет как мухи:

    sqrt((lat1 - lat2)^2 + (long1 - long2)^2) = distance

  • Вы можете сделать простое вычисление расстояния Манхэттена:

    abs(lat1 - lat2) + abs(long1 - long2) = distance

  • Вы можете сделать простое вычисление расстояния земного шара.См .: http://www.ehow.com/how_6353104_calculate-between-two-points-globe.html

Они достаточно точны для некоторых целей и могут быть достаточно точными для ваших целей, но не совсем точны.

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

С данными дорожной карты вам также потребуется реализовать алгоритм поиска пути.Некоторые примеры алгоритмов поиска пути: A-star и Dijikstra .

0 голосов
/ 28 мая 2011

Для США вы всегда можете загрузить данные федеральной карты переписи TIGER и выполнить свои собственные расчеты. Если вы хотите проехать расстояние, вы не можете обойтись без картографических данных.

http://arcdata.esri.com/data/tiger2000/tiger_statelayer.cfm?sfips=19

0 голосов
/ 28 мая 2011

Поскольку вы рассчитываете расстояние вождения, вашему приложению не нужно "как расстояние полета", так как это минимальное расстояние, но определенно не расстояние вождения.

У вас есть два варианта здесь. Сначала воспользуйтесь веб-службой (Google Directions API) и создайте собственное графическое представление.

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

...