Как наилучшим образом рассчитать расстояние между двумя городами (Канада)?

У меня есть клиент, который хочет, чтобы я вычислил расстояние в милях между городами. Я делаю проект на PHP, javascript, я читал о какой-то большой / lat-базе данных, но все еще не смог найти, с чего начать и что использовать для этого. Есть ли какой-либо веб-сервис, который я могу запросить, передав два имени города, и он может вернуть мне расстояние в милях или километрах? пожалуйста помоги

http://code.google.com/apis/maps/documentation/javascript/geometry.html#Distance

Функции расстояния и площади Расстояние между двумя точками – это длина кратчайшего пути между ними. Этот кратчайший путь называется геодезической. На сфере все геодезические являются отрезками большого круга. Чтобы вычислить это расстояние, вызовите computeDistanceBetween (), передав ему два объекта LatLng.

Вместо этого вы можете использовать computeLength () для вычисления длины заданного пути, если у вас есть несколько мест.

Чтобы вычислить область полигональной области, вызовите computeArea (), передав массив объектов LatLng, определяющих замкнутый цикл.

Если вы не хотите поддерживать базу данных GEO, которая поддерживает lat / long в месте / городе, вы также можете использовать API Google для получения координат для «адреса»: http://code.google.com/ APIs / карты / документация / JavaScript / services.html # GeocodingRequests

Другой вариант – использовать вариацию Калькулятора Великого Круга, реализованную в Javascript, если вы не поклонник Google: http://williams.best.vwh.net/gccalc.htm

Решение, отличное от API. Это имеет то преимущество, что вы не зависите от сторонних лиц, которые могут опуститься или стоить вам, или быть ограниченными по скорости, с ответами и т. Д. И т. Д.

Сначала преобразуйте свои местоположения в lat / longs. Для этого вам понадобится db городов и координаты, но я думаю, что это можно найти довольно легко. В Великобритании эти данные можно получить в различных правительственных агентствах бесплатно. Затем с координатами вы можете рассчитать расстояние между ними. Ниже приведена java, но должна быть прямой к порту javascript (или php):

public static double R_EARTH_EQUATORIAL = 6378137.0; public static double R_EARTH_POLAR = 6356752.3; // The shortest dist between two points on a globe. Lat/lngs are in RADIANS public static double greatCircleDistance(double lat_1, double lng_1, double lat_2, double lng_2) { double d_lat = lat_1 - lat_2; double d_lng = lng_1 - lng_2; double lat_ave = (lat_1 + lat_2) / 2; double h = haversin(d_lat) + Math.cos(lat_1) * Math.cos(lat_2) * haversin(d_lng); return 2 * R_EARTH(lat_ave) * Math.asin(Math.pow(h, 0.5)); } public static double haversin(Double x) { return Math.pow(Math.sin(x/2),2); } // Returns radius of earth at a given latitude public static double R_EARTH(double latitude) { double a = R_EARTH_EQUATORIAL; double b = R_EARTH_POLAR; double x = latitude; double p = Math.pow((Math.pow(a,2) * Math.cos(x)),2); double q = Math.pow((Math.pow(b,2) * Math.sin(x)),2); double r = Math.pow(a * Math.cos(x),2); double s = Math.pow(b * Math.sin(x),2); return Math.pow(((p + q) / (r + s)), 0.5); }