Metro スタイル Windows 8 アプリケーションの System.Device.Location.GeoCoordinate.GetDistanceTo メソッドに相当するものは何ですか。
メトロ アプリケーションには Geocoordinate クラス (小文字の「C」) がありますが、GetDistanceTo メソッドはありません。
次に、Metro Geocoordinate クラスにはコンストラクターがありません。そのインスタンスを作成するにはどうすればよいですか。
Metro スタイル Windows 8 アプリケーションの System.Device.Location.GeoCoordinate.GetDistanceTo メソッドに相当するものは何ですか。
メトロ アプリケーションには Geocoordinate クラス (小文字の「C」) がありますが、GetDistanceTo メソッドはありません。
次に、Metro Geocoordinate クラスにはコンストラクターがありません。そのインスタンスを作成するにはどうすればよいですか。
BlackLight に従って .NET 4.5 GetDistanceTo メソッドを逆コンパイルしました。ここにコピーして、人々の労力を節約します。
public double GetDistanceTo(GeoCoordinate other)
{
if (double.IsNaN(this.Latitude) || double.IsNaN(this.Longitude) || double.IsNaN(other.Latitude) || double.IsNaN(other.Longitude))
{
throw new ArgumentException(SR.GetString("Argument_LatitudeOrLongitudeIsNotANumber"));
}
else
{
double latitude = this.Latitude * 0.0174532925199433;
double longitude = this.Longitude * 0.0174532925199433;
double num = other.Latitude * 0.0174532925199433;
double longitude1 = other.Longitude * 0.0174532925199433;
double num1 = longitude1 - longitude;
double num2 = num - latitude;
double num3 = Math.Pow(Math.Sin(num2 / 2), 2) + Math.Cos(latitude) * Math.Cos(num) * Math.Pow(Math.Sin(num1 / 2), 2);
double num4 = 2 * Math.Atan2(Math.Sqrt(num3), Math.Sqrt(1 - num3));
double num5 = 6376500 * num4;
return num5;
}
}
Metroには何らかの理由でコンストラクターGeocoordinate
がありません。public
私の意見では、これを実装する最良の方法は、Reflector を使用し、その実装をコピーするSystem.Device.Location.GeoCoordinate
ことですGetDistanceTo
。
これが後で API に再度追加されることを願っています。
1年前に座標を操作するための小さなライブラリ、または座標間の距離を計算するのに役立つ何かを書きました。CodePlex で入手できます: http://beavergeodesy.codeplex.com/
距離の計算は、これと同じくらい簡単です。
// Create a pair of coordinates
GeodeticCoordinate coordinate1 = new GeodeticCoordinate() { Latitude = 63.83451d, Longitude = 20.24655d };
GeodeticCoordinate coordinate2 = new GeodeticCoordinate() { Latitude = 63.85763d, Longitude = 20.33569d };
// Calculate the distance between the coordinates using the haversine formula
double distance = DistanceCalculator.Haversine(coordinate1, coordinate2);