Как лучше всего рассчитать расстояние между двумя городами (Канада)? - PullRequest
2 голосов
/ 15 апреля 2011

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

Ответы [ 2 ]

4 голосов
/ 15 апреля 2011

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

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

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

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

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

Другой вариант - использовать вариант реализованного Калькулятора больших кругов.в Javascript, если вы не являетесь поклонником Google: http://williams.best.vwh.net/gccalc.htm

1 голос
/ 15 апреля 2011

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

Сначала конвертируйте ваши местоположения в широты и долготы. Для этого вам понадобится база данных городов и городов, но я думаю, что это можно найти довольно легко. В Великобритании эти данные можно бесплатно получить из различных правительственных агентств. Затем с помощью координат вы можете рассчитать расстояние между ними. Ниже приведен 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...