Сведения о вопросе

DED

14:42, 24th August, 2020

Теги

Расчет Расстояния Между 2 Городами

Просмотров: 513   Ответов: 14

Как вы рассчитываете расстояние между 2 городами?



  Сведения об ответе

prince

09:41, 9th August, 2020

Если вам нужно принять во внимание кривизну Земли, то расстояние Большого Круга-это то, что вы ищете. Статья в Википедии , вероятно, лучше объясняет, как работает формула, чем я, и есть также эта страница авиационного формуляра , которая охватывает это более подробно.

Формулы - это только первая часть головоломки, хотя, если вам нужно сделать эту работу для произвольных городов, вам понадобится база данных местоположения, чтобы получить lat/long. К счастью, вы можете получить это бесплатно от Geonames.org, хотя есть коммерческие базы данных, доступные (спросите google). Итак, в общем случае, найдите два города, которые вы хотите, получите lat/long co-orinates и подключите их к формуле, как в Примере Википедии .

Другие советы:

  • Для полного коммерческого решения, есть ПК Милер который используется многими автотранспортными компаниями в рассчитайте стоимость доставки.
  • Совершайте звонки на Google Maps (или другие) api. Если вам нужно сделать много запросов в день, рассмотрите возможность кэширования результатов на сервере.
  • Также очень важно рассмотреть возможность создания базы данных эквивалентности для городов, пригородов, городов и т.д. если вы думаете, что вам когда-нибудь понадобится группировать свои данные. Это становится действительно сложным, хотя, и вы не можете найти one-size-fits-all решение для вашей проблемы.

И последнее, но не менее важное: Джоэл написал статью об этой проблеме некоторое время назад, так что вот вам: новая функция: поиск работы


  Сведения об ответе

прога

22:18, 18th August, 2020

Вы используете формула Гаверсинуса .


  Сведения об ответе

DO__IT

19:19, 12th August, 2020

Это очень легко сделать с типом geography в SQL Server 2008.

SELECT geography::Point(lat1, lon1, 4326).STDistance(geography::Point(lat2, lon2, 4326))
-- computes distance in meters using eliptical model, accurate to the mm

4326 is SRID для WGS84 модели элипсоидной Земли


  Сведения об ответе

crush

12:07, 24th August, 2020

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


  Сведения об ответе

$DOLLAR

17:27, 13th August, 2020

Если вы работаете в самолете и вам нужно Евклидово расстояние "как летит ворона":

// Cities are points x0,y0 and x1,y1 in kilometers or miles or Smoots[1]
dx = x1 - x0;
dy = y1 - y0;
dist = sqrt(dx*dx + dy*y);

Никакой тригонометрии не нужно! Просто теорема Пифагора и тот факт, что квадраты всегда положительны, поэтому вам не нужно dx = abs(x1 - x0) и т. д. чтобы получить положительное число, нужно перейти к sqrt().

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

dist = sqrt((x1-x0)*(x1-x0) + (y1-y0)*(y1-y0));

[1] http://en.wikipedia.org/wiki/Smoot


  Сведения об ответе

#hash

11:19, 18th August, 2020

Если вы говорите о самом коротком расстоянии между двумя реальными городами на реальной сферической планете, такой как Земля, то вам нужно расстояние большого круга .


  Сведения об ответе

LIZA

06:30, 20th August, 2020

Расстояние между двумя городами можно узнать из google map api. Вот его реализация в Python

#!/usr/bin/python
import requests
from sys import argv 
def get_distance(origin,destination):
    gmap='http://maps.googleapis.com/maps/api/distancematrix/json'
    payload={"origins":origin,"destinations":destination,"sensor":'false' }
    try:
        a=requests.get(gmap,params=payload)
        data = a.json()
        origin = str(data['origin_addresses'][0])
        destination= str(data['destination_addresses'][0])
        distance = data['rows'][0]['elements'][0]['distance']['text']
        return distance,origin,destination
    except Exception,e:
        print "The %s or %destination does not exists :(" %(origin,destination)
        exit()

if __name__=="__main__":
    if len(argv)<3:
        print "sorry Check the format"
    else:
        origin=argv[1]
        destination=argv[2]
        distance,origin,destination=get_distance(origin,destination)
        print "%s ---> %s    :   %s" %(origin,destination,distance)

Пример ссылки: https://gist.github.com/sarathsp06/cf063e47bcc515b51c84


  Сведения об ответе

padenie

19:55, 24th August, 2020

Я согласен, что как только у вас есть информация, если она не изменится, сохраните ее как-нибудь. @Marko Тинто благодарит за образец Т-SQL. Для тех, кто не имеет доступа к серверу SQL или предпочитает другой метод: Если вам нужна высокая точность, проверьте запись Википедии об алгоритме Винсенти для получения дополнительной информации. Я считаю, что существует реализация js, которая была бы (если уже не была) легко портирована на другие языки. Кроме того , в нижней части этой страницы находится ссылка на geographicLib, которая якобы в 1000 раз точнее алгоритма Винсенти (если у вас есть такие хорошие данные, это может иметь значение).

Зачем вам использовать что-то вроде метода Винсенти? Потому что Земля не является совершенной сферой, и подобные методы позволяют вводить более точную большую и меньшую оси для моделирования земли.


  Сведения об ответе

LAST

01:33, 14th August, 2020

Вы находите Lat / Lon города, а затем используете алгоритм оценки расстояния для координат Lat/Lon.


  Сведения об ответе

prince

21:06, 1st October, 2020

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


  Сведения об ответе

piter

19:53, 14th August, 2020

Для получения расстояния между двумя городами лучше использовать таблицу поиска.

Это имеет смысл, потому что * Формула для расчета расстояния АИС достаточно вычислительно интенсивна.. * Расстояние между городами вряд ли изменится.

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


  Сведения об ответе

+-*/

12:49, 5th August, 2020

В последнее время я много работаю с этим. Я нахожу, что новые функции SQL2008 действительно облегчают эту задачу. Я могу найти все точки, которые находятся в пределах Xkm таблицы рекордов 100k в sub-second time...not too shabby.

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

Настоящая хитрость заключается в том, чтобы получить lat и long..for, которые я использую в Google.


  Сведения об ответе

$DOLLAR

19:32, 19th August, 2020

@Jared-незначительное исправление к вашему примеру кода. Последняя строка первого примера кода должна гласить::

dist = sqrt(dx*dx + dy*dy);


  Сведения об ответе

+-*/

03:28, 13th August, 2020

я использую дистанцию так просто и чисто


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться