4

我知道如何使用 javascript 通过以下代码计算半径

var center = new google.maps.LatLng(3.2987599, 102.6872022);
var latLng = new google.maps.LatLng(3.0987599, 101.6872022);
var distanceInMetres = google.maps.geometry.spherical.computeDistanceBetween(center, latLng);

但是如何将 google.maps.geometry.spherical.computeDistanceBetween 转换为 C# 函数呢?

4

3 回答 3

5

2点之间的距离:(lat1,lon1)到(lat2,lon2)

distance = acos(
     cos(lat1 * (PI()/180)) *
     cos(lon1 * (PI()/180)) *
     cos(lat2 * (PI()/180)) *
     cos(lon2 * (PI()/180))
     +
     cos(lat1 * (PI()/180)) *
     sin(lon1 * (PI()/180)) *
     cos(lat2 * (PI()/180)) *
     sin(lon2 * (PI()/180))
     +
     sin(lat1 * (PI()/180)) *
     sin(lat2 * (PI()/180))
    ) * 3959

3959 是以英里为单位的地球半径。将此值替换为以 KM 为单位的半径(或任何其他单位),以获得相同单位的结果。

您可以通过与此工作示例进行比较来验证您的实现:

于 2012-10-31T09:23:13.633 回答
2

我已经编写了 C# 解决方案来计算要转换的距离

var distanceInMetres = google.maps.geometry.spherical.computeDistanceBetween(center, latLng);

进入 C#。下面是我使用的代码。6371是地球的半径。

    //Calculate distance earth between 2 coordinate point
    double e = lat * (Math.PI / 180);
    double f = lng * (Math.PI / 180);
    double g = lat2 * (Math.PI / 180);
    double h = lng2 * (Math.PI / 180);
    double i =
        (Math.Cos(e) * Math.Cos(g) * Math.Cos(f) * Math.Cos(h)
        + Math.Cos(e) * Math.Sin(f) * Math.Cos(g) * Math.Sin(h)
        + Math.Sin(e) * Math.Sin(g));
    double j = Math.Acos(i);
    double k = (6371 * j);  //Distance in KM
于 2012-10-31T10:49:43.520 回答
0

2个纬度/经度点之间的距离可以用haversine公式计算,这里描述了http://en.wikipedia.org/wiki/Haversine_formula

在stackoverflow上还有另一个问题或多或少相同的问题:计算两个经纬度点之间的距离?(Haversine 公式)

于 2012-10-31T09:16:06.833 回答