如何最好地计算两个城市(加拿大)之间的距离?

| 我有一个客户希望我计算城市之间的距离(以英里为单位)。我正在用PHP,javascript做项目,我一直在阅读一些经纬度数据库,但仍然找不到从何处开始以及如何使用它。我可以通过传递两个城市名称来查询任何网络服务,并且可以返回以英里或公里为单位的距离吗?请帮忙     
已邀请:
http://code.google.com/apis/maps/documentation/javascript/geometry.html#Distance   距离和面积函数   两点之间的距离是两点之间最短路径的长度。该最短路径称为测地线。在一个球体上,所有测地线都是一个大圆的段。要计算此距离,请调用computeDistanceBetween(),并向其传递两个LatLng对象。      如果您有多个位置,则可以改为使用computeLength()计算给定路径的长度。      要计算多边形区域的面积,请调用computeArea(),并传递定义闭环的LatLng对象数组。 如果您不想维护用来维持某地/城市纬度/经度的GEO数据库,则还可以使用Google API来检索\“地址\”的坐标: http://code.google.com/apis/maps/documentation/javascript/services.html#GeocodingRequests 另一个选择是,如果您不是Google粉丝,则可以使用Java中实现的Great Circle Calculator的变体:http://williams.best.vwh.net/gccalc.htm     
非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);
}
    

要回复问题请先登录注册