小编Ste*_*y84的帖子

两个坐标之间的地理中点

我一直在使用Moveable-Type网站来帮助我进行一些Geocoordinate计算并且它非常有用,但是,我在计算两个坐标之间的中点时遇到了一个错误.我的结果接近预期,但不够接近:

posA = {47.64570362, -122.14073746}
posB = {47.64316917, -122.14032175}
Run Code Online (Sandbox Code Playgroud)

预期结果(取自可移动型计算器)= 47°38'40"N,122°08'26"W = {47.644444, -122.140556}我的结果:{49.6054801645915, -122.14052959995759}

这是我的代码:

private Geocoordinate MidPoint(Geocoordinate posA, Geocoordinate posB)
{
   Geocoordinate midPoint = new Geocoordinate();

   double dLon = DegreesToRadians(posB.Longitude - posA.Longitude);
   double Bx = Math.Cos(DegreesToRadians(posB.Latitude)) * Math.Cos(dLon);
   double By = Math.Cos(DegreesToRadians(posB.Latitude)) * Math.Sin(dLon);

   midPoint.Latitude = RadiansToDegrees(Math.Atan2(Math.Sin(DegreesToRadians(posA.Latitude)) + Math.Sin(DegreesToRadians(posB.Latitude)), 
                Math.Sqrt((Math.Cos(DegreesToRadians(posA.Latitude)) + Bx) * (Math.Cos(DegreesToRadians(posA.Latitude))) + Bx) + By * By));

   midPoint.Longitude = posA.Longitude + RadiansToDegrees(Math.Atan2(By, Math.Cos(DegreesToRadians(posA.Latitude)) + Bx));

   return midPoint;
}
Run Code Online (Sandbox Code Playgroud)

我有几种私有方法可以在Degrees和Radians之间进行转换.例如

private double DegreeToRadian(double angle) …
Run Code Online (Sandbox Code Playgroud)

c# geolocation latitude-longitude

7
推荐指数
1
解决办法
5935
查看次数

标签 统计

c# ×1

geolocation ×1

latitude-longitude ×1