【问题标题】:C# Find Midpoint of two Latitude / LongitudesC#查找两个纬度/经度的中点
【发布时间】:2011-10-13 10:38:19
【问题描述】:

我需要找到两个纬度/经度点之间的中点。

我正在尝试将我绘制的两个位置之间的地图居中,并且需要找到那个点。

我已经从我找到的其他示例中编写了这个函数,但它似乎不起作用。

    public static void midPoint(double lat1, double lon1, double lat2, double lon2, out double lat3_OUT, out double lon3_OUT)
    {
        //http:// stackoverflow.com/questions/4656802/midpoint-between-two-latitude-and-longitude
        double dLon = DistanceAlgorithm.Radians(lon2 - lon1);

        //convert to radians
        lat1 = DistanceAlgorithm.Radians(lat1);
        lat2 = DistanceAlgorithm.Radians(lat2);
        lon1 = DistanceAlgorithm.Radians(lon1);

        double Bx = Math.Cos(lat2) * Math.Cos(dLon);
        double By = Math.Cos(lat2) * Math.Sin(dLon);
        double lat3 = Math.Atan2(Math.Sin(lat1) + Math.Sin(lat2), Math.Sqrt((Math.Cos(lat1) + Bx) * (Math.Cos(lat1) + Bx) + By * By));
        double lon3 = lon1 + Math.Atan2(By, Math.Cos(lat1) + Bx);

        lat3_OUT = lat3;
        lon3_OUT = lon3;
    }

这是一个示例输出。

lat1  37.7977008
lat2  37.798392     
lon1  -122.1637914      
lon2  -122.161464       
lat3  0.65970036060147585   
lon3  -2.1321400763480485   

参见 Lat3 和 Lon3。

谢谢!

【问题讨论】:

    标签: c# geolocation latitude-longitude


    【解决方案1】:

    看来你的输出是正确的除了它是弧度你期望度数?您可能需要将弧度转换为度数才能满足预期的输出。

    -(2.1321400763480485 radians) = -122.162628 degrees
    0.65970036060147585 radians = 37.7980464 degrees
    

    您似乎已经在使用 Jon Martin 和 IanDotKelly 提到的大圆算法。

    【讨论】:

    • 这是有道理的。尽管看起来解决方案仍然是单位问题。结果以弧度为单位,OP 预计度数。
    • 就是这样!...我从弧度转换为度数,效果很好!...谢谢!
    【解决方案2】:

    我猜你的意思是大圆距离。

    如果是这样,这个问题here 之前已经被问过,虽然如果你不知道大圆这个词可能很难找到。

    【讨论】:

    • 看来 OP 已经在使用大圆距离算法了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    相关资源
    最近更新 更多