Как вы рассчитать расстояние между 2 городами?Расчет расстояния между 2 городами
ответ
Если вам нужно учитывать кривизну земли, расстояние Великого круга - это то, что вы ищете. The Wikipedia article, вероятно, лучше объясняет, как работает эта формула, чем я, и есть также this aviation formulary page, который охватывает это более подробно.
Формулы - это только первая часть головоломки, хотя, если вам нужно сделать эту работу для любых городов, вам понадобится база данных местоположений, чтобы получить lat/long. К счастью, вы можете получить это бесплатно от Geonames.org, хотя есть коммерческие db доступны (попросите Google). Итак, в общем, посмотрите на два города, которые вы хотите, получите лат/длинные co-orinates и подключите их к формуле, как в the Wikipedia Worked Example.
Другие предложения:
- Для полного коммерческого решения, есть PC Miler, который используется многими транспортными компаниями в ставки расчета доставки.
- Выполнение вызовов на Карты Google (или другие). Если вам нужно делать много запросов в день, подумайте о кешировании результатов на сервере.
- Также очень важно рассмотреть вопрос о создании базы данных эквивалентности для городов, пригородов, городов и т. Д., Если вы считаете, что вам когда-либо понадобится группировать ваши данные. Однако это становится очень сложным, и вы не можете найти решение для решения всех проблем.
И последнее, но не в последнюю очередь, Джоэл написал статью об этой проблеме некоторое время назад, так что здесь вы идете: New Feature: Job Search
Ваша ссылка на JoS устарела (нажатие на ссылку приводит к странице с ошибкой). Я считаю, что сейчас это правильная ссылка: http://www.joelonsoftware.com/items/2006/10/09.html – AgentConundrum 2009-07-29 04:11:53
Я обновил ссылку и добавил дополнительную информацию. – 2009-07-29 19:58:54
Вы найдете Lat/Lon города, затем используйте алгоритм оценки расстояния для координат Lat/Lon.
Вы используете Haversine formula.
Вы используете алгоритм A*, чтобы найти кратчайший путь между этими двумя городами и таким образом вы будете иметь дистанцию.
если вам нужен пример кода, я думаю, у меня есть один я мог выкопать у себя дома, но, как и многие из предыдущих ответов, вам нужен длинный/широчайшие дб сделать расчет
Лучше использовать справочную таблицу для получения расстояния между двумя городами.
Это имеет смысл, потому что * Формула для вычисления расстояния ais достаточно вычислительно интенсивна .. * Расстояние между городами вряд ли изменится.
Так что, если вам не нужны очень конкретные (например, отображение местности с помощью спутника или какой-либо алгоритм топографии или что-то еще), вы должны просто сохранить список городов и расстояний между ними, в таблицу и посмотреть необходимо.
Если вы работаете в самолете, и вы хотите Euclidean distance «по прямой»:
// 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);
Нет необходимости тригонометрии! Только Pythagorean theorem и тот факт, что квадраты всегда положительны, поэтому вам не нужно dx = abs (x1 - x0) и т. Д., Чтобы получить положительное число для перехода к sqrt().
Обратите внимание, что вы могли бы, вероятно, сделать это в одной строке и компилятор вероятно уменьшить его эквивалент выше код:
dist = sqrt((x1-x0)*(x1-x0) + (y1-y0)*(y1-y0));
Если вы говорите о кратчайшее расстояние между двумя реальными городами на реальной сферической планете, как Земля, вы хотите great circle distance.
Я делал много работы с этим в последнее время. Я нахожу, что новые возможности SQL2008 действительно облегчают это. Я могу найти все точки, которые имеют Xkm стоп-записи 100k в суб-второй раз ... не слишком потрепанный.
Метод большого круга (сферическое предположение) в моем тестировании был примерно в 2,5 милях от по сравнению с формулой Винценти (элипсоидальное предположение, которое является землей).
Настоящий трюк получает lat и long..for того, что я использую Google.
@ Jared - небольшая поправка к вашему примеру кода. В последней строке первого примера кода следует читать:
dist = sqrt(dx*dx + dy*dy);
Это очень легко сделать с типом географии в 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 является SRID для WGS84 elipsoidal модели Земли
Я согласен, что как только у вас будет информация, если она не изменится, сохраните ее как-то. @Marko Tinto Спасибо за образец T-SQL. Для тех, кто не имеет доступа к SQL Server или предпочитает другой метод: если вам нужна высокая точность, ознакомьтесь с Wikipedia's entry on the Vincenty algorithm для получения дополнительной информации. Я считаю, что есть реализация js, которая (если не была) легко перенесена на другие языки. Кроме того, в нижней части этой страницы есть ссылка на geographicLib, которая претендует на 1000 раз более точную, чем алгоритм Винченти (если у вас есть данные, это хорошо, это может иметь значение).
Почему вы используете что-то вроде метода Винценти? Поскольку земля не является идеальной сферой, и подобные методы позволяют вводить более точную основную и вспомогательную ось для моделирования Земли.
я использую distancy так просто и чистый
Вы можете получить расстояние между двумя городами с 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
- 1. Получение расстояния между несколькими городами
- 2. R: Как вернуть наименьшие расстояния между городами?
- 3. Расчет расстояния между точками
- 4. расчет расстояния между 2 точками openCV C++
- 5. Расчет расстояния между портами
- 6. Расчет расстояния между маркерами
- 7. Расчет минимального расстояния между координатами
- 8. Расчет расстояния между параболическими отводами
- 9. Расчет расстояния между двумя точками
- 10. Расчет расстояния между точками gps
- 11. Расчет расстояния между двумя раз
- 12. Расчет расстояния между английскими буквами
- 13. Координаты между городами и городами
- 14. найти расстояние между двумя городами
- 15. SQL - найти расстояния между двумя городами, отформатировать таблицу
- 16. Игра - расчет расстояния между двумя координатами
- 17. Расчет расстояния
- 18. Расчет расстояния между 2 молниями с помощью функции
- 19. Расчет расстояния между 2-мя геоданными в R
- 20. Расчет расстояния между 2 гомография плоскостей, которые разделяют плоскость заземления
- 21. Расчет расстояния между 2 объектами в картине с переменным масштабом
- 22. Расчет расстояния между 2 точками, используя GetY() и GetX()
- 23. Расчет расстояния между 2 точками в 2D пространстве?
- 24. Расчет минимального расстояния между двумя DataFrames
- 25. Расчет расстояния между атомами по атомам Координаты
- 26. Расчет расстояния между двумя геокодами в Cython
- 27. Расчет расстояния между точками в matlab
- 28. Расчет расстояния между проходами в python
- 29. Расчет расстояния между двумя заданными точками
- 30. Расчет расстояния в пикселях между двумя местоположениями
Смотрите эту [связанную StackOverflow вопрос] (http://stackoverflow.com/questions/27928/how-do-i-calculate -distance-between-two-latitude-longitude-points) – 2008-10-19 03:47:10