在WP8中将距离转换为地理坐标
本文关键字:坐标 转换 距离 WP8 | 更新日期: 2023-09-27 17:59:47
我想找到离我的位置4000公里的地方的地理坐标,将其命名为newLocation
。
我需要它来将结果转换为ViewportPoint
,如下所示:
System.Windows.Point p1 =
mapControl.ConvertGeoCoordinateToViewportPoint(newLocation);
假设我的位置被定义为:
System.Windows.Point p2 =
radiusMap.ConvertGeoCoordinateToViewportPoint(myLocation);
然后我可以简单地添加一个以我的位置为中心的圆,边界从newLocation
经过,我需要计算,如下所示:
double radius = getDistance(p1, p2);
Ellipse circle = new Ellipse();
circle.Width = radius * 2;
circle.Height = radius * 2;
circle.Opacity = 0.4;
circle.Fill = new SolidColorBrush(Colors.Green);
MapOverlay mapOverLay = new MapOverlay();
mapOverLay.PositionOrigin = new System.Windows.Point(0.5, 0.5);
mapOverLay.Content = circle;
mapOverLay.GeoCoordinate = myLocation;
MyLayer.Add(mapOverLay);
radiusMap.Layers.Add(MyLayer);
所以,计算newLocation
就是我所需要的。
注:
- 我尝试过这个解决方案,但有局限性
我们可以在visual studio中执行以下操作:
GeoCoordinate location1 = ..., location2 = ...; double distance = location1.GetDistanceTo(location2);
我想知道是否已经实现了相反的方法。
更新:我发现了GetDistanceTo(…)的实现,它在这里:
double d = this.Latitude * 0.017453292519943295;
double num3 = this.Longitude * 0.017453292519943295;
double num4 = other.Latitude * 0.017453292519943295;
double num5 = other.Longitude * 0.017453292519943295;
double num6 = num5 - num3;
double num7 = num4 - d;
double num8 = Math.Pow(Math.Sin(num7 / 2.0), 2.0) + ((Math.Cos(d) * Math.Cos(num4)) * Math.Pow(Math.Sin(num6 / 2.0), 2.0));
double num9 = 2.0 * Math.Atan2(Math.Sqrt(num8), Math.Sqrt(1.0 - num8));
return (6376500.0 * num9);
我想知道是否有可能得到相反的结果。即,给它我的地理坐标和与我的距离,以便它返回新位置的地理坐标。
当然,距离初始起点400km的点有无限多个(围绕一个圆),您需要定义距离和方位,以便将其减少为一个点。
如果你可以假设地球是一个球体,你可以绕一个大圆旅行,如所示
φ2 = asin( sin(φ1)*cos(d/R) + cos(φ1)*sin(d/R)*cos(θ) )
λ2 = λ1 + atan2( sin(θ)*sin(d/R)*cos(φ1), cos(d/R)−sin(φ1)*sin(φ2) )
其中
φ
为纬度λ
为经度θ
是方位(以弧度为单位,从北顺时针)- d是行驶的距离
- R是地球的半径6 378.1公里
- d/R是角距离,单位为弧度
因此,插入您的值来计算新位置φ2
、λ2
如果你所说的"向右到我的位置"是指正东,θ
将是90度=Π
/2
当然,有一个黑客可以用来找到一个正东点。赤道经度一度=110.57公里。因此,你可以计算一个上限,然后进行迭代,得到一个合理的阈值。
- 以你的起点——400公里,增加3.61度
- 使用distance To()方法检查距离
- 如果它太大,切掉一个学位的一部分
- 重复2)+3),直到达到可接受的阈值