自分の位置から 4000 km 離れた場所の GeoCoordinate を見つけたいのですが、名前を付け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);
逆を得ることが可能かどうか疑問に思います。つまり、自分の地理座標と自分からの距離を与えると、新しい場所の地理座標が返されます。