C# 如何找到两个纬度/经度的中心点

7

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

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

我从其他例子中编写了这个函数,但似乎不起作用。

    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。

谢谢!

2个回答

2

看起来你的输出是正确的只是它是以弧度为单位的,而你期望的是角度?你可能需要将弧度转换为角度以满足预期的输出。

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

看起来你已经在使用Jon Martin和IanDotKelly提到的大圆算法了。


这很有道理。虽然看起来问题仍然是单位问题。结果以弧度为单位,而OP期望的是角度。 - Chris
这就是了!我将弧度转换为角度,它完美地工作了!谢谢! - dmd733

0

我猜你是指大圆距离。

如果是的话,这个问题在这里之前已经被问过了,尽管如果你不知道大圆这个术语可能会很难找到。


看起来 OP 已经在使用大圆距离算法了。 - Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接