加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

计算两个地理点的距离,单位为km c#

发布时间:2020-12-15 06:47:46 所属栏目:百科 来源:网络整理
导读:我想要计算两个地理点的距离.点在经度和纬度上给出. 坐标为: 点1:36.578581,-118.291994 point 2:36.23998,-116.83171 这里有一个比较网站的结果: http://www.movable-type.co.uk/scripts/latlong.html 这里是我从这个链接使用的代码: Calculate distan
我想要计算两个地理点的距离.点在经度和纬度上给出.

坐标为:

点1:36.578581,-118.291994

point 2:36.23998,-116.83171

这里有一个比较网站的结果:

http://www.movable-type.co.uk/scripts/latlong.html

这里是我从这个链接使用的代码:
Calculate distance between two points in google maps V3

const double PIx = Math.PI;
    const double RADIO = 6378.16;

    /// <summary>
    /// Convert degrees to Radians
    /// </summary>
    /// <param name="x">Degrees</param>
    /// <returns>The equivalent in radians</returns>
    public static double Radians(double x)
    {
        return x * PIx / 180;
    }

    /// <summary>
    /// Calculate the distance between two places.
    /// </summary>
    /// <param name="lon1"></param>
    /// <param name="lat1"></param>
    /// <param name="lon2"></param>
    /// <param name="lat2"></param>
    /// <returns></returns>
    public static double DistanceBetweenPlaces(double lon1,double lat1,double lon2,double lat2)
    {
        double R = 6371; // km
        double dLat = Radians(lat2 - lat1);
        double dLon = Radians(lon2 - lon1);
        lat1 = Radians(lat1);
        lat2 = Radians(lat2);

        double a = Math.Sin(dLat / 2) * Math.Sin(dLat / 2) + Math.Sin(dLon / 2) * Math.Sin(dLon / 2) * Math.Cos(lat1) * Math.Cos(lat2);
        double c = 2 * Math.Atan2(Math.Sqrt(a),Math.Sqrt(1 - a));
        double d = R * c;

        return d;
    }


Console.WriteLine(DistanceAlgorithm.DistanceBetweenPlaces(36.578581,-118.291994,36.23998,-116.83171));

问题是我得到两个不同的结果.

我的结果:163,307公里

网站结果:136公里

有什么建议么???

TORTI

解决方法

你的公式几乎是正确的,但你必须交换经度的参数为纬度
Console.WriteLine(DistanceAlgorithm.DistanceBetweenPlaces(-118.291994,36.578581,-116.83171,36.23998)); // = 136 km

我使用简化的公式:

// cos(d) = sin(φА)·sin(φB) + cos(φА)·cos(φB)·cos(λА ? λB),//  where φА,φB are latitudes and λА,λB are longitudes
// Distance = d * R
public static double DistanceBetweenPlaces(double lon1,double lat2)
{
    double R = 6371; // km

    double sLat1 = Math.Sin(Radians(lat1));
    double sLat2 = Math.Sin(Radians(lat2));
    double cLat1 = Math.Cos(Radians(lat1));
    double cLat2 = Math.Cos(Radians(lat2));
    double cLon = Math.Cos(Radians(lon1) - Radians(lon2));

    double cosD = sLat1*sLat2 + cLat1*cLat2*cLon;

    double d = Math.Acos(cosD);

    double dist = R * d;

    return dist;
}

测试:

(赤道距离):长0,100;纬度= 0,0; DistanceBetweenPlaces(0,100,0)= 11119.5公里

(北极距离):长0,100;纬度= 90,90; DistanceBetweenPlaces(0,90,90)= 0 km

长期:-118.291994,-116.83171;纬度:36.578581,36.23998 = 135.6公里

长期:36.578581,36.23998;纬度:-118.291994,-116.83171 = 163.2公里

最好的祝福

附:在web site,您可以使用结果比较,每个点第一个文本框是纬度,第二个经度

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读