3

是否可以向谷歌发送两个经纬度点来计算两者之间的距离?

4

8 回答 8

10

如果您正在寻找使用 v3 谷歌地图 API,这是我使用的一个函数:注意:您必须添加&libraries=geometry到您的脚本源

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&libraries=geometry"></script>

现在的功能:

//calculates distance between two points in km's
function calcDistance(p1, p2){
  return (google.maps.geometry.spherical.computeDistanceBetween(p1, p2) / 1000).toFixed(2);
}
于 2011-06-21T00:39:27.157 回答
7

你所追求的是Haversine 公式。你不需要谷歌地图来做这个,你可以单独解决。这里有一个脚本(在 JavaScript 中)。

于 2009-02-03T11:35:35.433 回答
3

是的,谷歌可以做到这一点

谷歌 API 文档

这是一段java脚本,它得到两点的公里距离

函数初始化(){
      如果(GBrowserIsCompatible()){
          map = new GMap2(document.getElementById("map_canvas"));
          map.setCenter(新 GLatLng(52.6345701, -1.1294433), 13);
          map.addControl(新 GLargeMapControl());          
          map.addControl(new GMapTypeControl());
          地理编码器 = 新 GClientGeocoder();

          // NR14 7PZ
          var loc1 = new GLatLng(52.5773139, 1.3712427);
          // NR32 1TB
          var loc2 = new GLatLng(52.4788314, 1.7577444);          
          警报(loc2.distanceFrom(loc1)/ 1000);
      }
    }

于 2009-03-13T09:43:48.920 回答
3

以及 c# 中的距离校准:

// this returns the distance in miles. for km multiply result: * 1.609344
public static double CalculateDistance(double lat1, double lon1, double lat2, double lon2)
{
    double t = lon1 - lon2;
    double distance = Math.Sin(Degree2Radius(lat1)) * Math.Sin(Degree2Radius(lat2)) + Math.Cos(Degree2Radius(lat1)) * Math.Cos(Degree2Radius(lat2)) * Math.Cos(Degree2Radius(t));
    distance = Math.Acos(distance);
    distance = Radius2Degree(distance);
    distance = distance * 60 * 1.1515;

    return distance;
}

private static double Degree2Radius(double deg)
{
    return (deg * Math.PI / 180.0);
}

private static double Radius2Degree(double rad)
{
    return rad / Math.PI * 180.0;
}
于 2009-05-25T08:44:50.707 回答
2

不,但您可以使用文森蒂公式,它模拟了地球的形状。它在Javascript中可用。

一个很容易解析的网页是(例如):http ://boulter.com/gps/distance/?from=51.5329855+-0.1303506&to=40.757584+-73.985642&units=m

对于只想快速测量距离的人,请查看此小工具。但是,它只使用大圆计算。


正如 Rob 所指出的,谷歌已经添加了它,但他们仍然只使用大圆公式,它可能不准确 1/300。

于 2009-02-03T12:40:26.783 回答
0

我这样做已经很多年了,但你可以使用大圆距离

于 2009-02-03T12:05:35.420 回答
0

如果您只想将距离作为一个数字,请尝试这样的方法。

function InitDistances() {
    var startLocation = new GLatLng(startLat, startLon);
    var endLocation = new GLatLng(endLat, endLon);
    var dist = startLocation .distanceFrom(endLocation);

    // Convert distance to miles with two decimal points precision
    return (dist / 1609.344).toFixed(2);
}
于 2009-07-13T20:07:52.067 回答
0

有一个方便的功能

http://code.google.com/apis/maps/documentation/reference.html#GLatLng.distanceFrom

基本上创建 2 个 GlatLng 对象然后使用上述方法

于 2010-05-18T21:00:30.587 回答