如何获得 Windows Phone 8.1 中两个位置之间的距离

How to get distance between two locations in Windows Phone 8.1

在WindowsPhone8里面好像有方法

   GeoCoordinate.GetDistanceTo()

用于计算两个位置之间的距离。 (即使未找到该方法的 the reference page。)

但是整个Windows Phone 8.1 Geolocation namespace中的等价物在哪里?

我根本找不到计算两个位置之间距离的方法。

如何在WP8.1中计算两个位置之间的距离?

GeoCoordinate.GetDistanceTo() 位于 System.Device.Location 命名空间中。但是 windows 8.1(运行时应用程序)应用程序使用 Windows.Devices.Geolocation 命名空间,其中 GetDistanceTo() 方法不存在。

因此您可以使用Haversine 公式 自行计算距离。这里是wikipedia Haversine page,你可以从那里知道公式。

您可以使用下面的 C# 代码,它使用 Haversine 公式来计算两个坐标之间的距离。

using System;  
namespace HaversineFormula  
{  
/// <summary>  
/// The distance type to return the results in.  
/// </summary>  
public enum DistanceType { Miles, Kilometers };  
/// <summary>  
/// Specifies a Latitude / Longitude point.  
/// </summary>  
public struct Position  
{  
    public double Latitude;  
    public double Longitude;  
}  
class Haversine  
{  
    /// <summary>  
    /// Returns the distance in miles or kilometers of any two  
    /// latitude / longitude points.  
    /// </summary>  
    public double Distance(Position pos1, Position pos2, DistanceType type)  
    {  
        double R = (type == DistanceType.Miles) ? 3960 : 6371;  
        double dLat = this.toRadian(pos2.Latitude - pos1.Latitude);  
        double dLon = this.toRadian(pos2.Longitude - pos1.Longitude);  
        double a = Math.Sin(dLat / 2) * Math.Sin(dLat / 2) +  
            Math.Cos(this.toRadian(pos1.Latitude)) * Math.Cos(this.toRadian(pos2.Latitude)) *  
            Math.Sin(dLon / 2) * Math.Sin(dLon / 2);  
        double c = 2 * Math.Asin(Math.Min(1, Math.Sqrt(a)));  
        double d = R * c;  
        return d;  
    }  
    /// <summary>  
    /// Convert to Radians.  
    /// </summary>  
    private double toRadian(double val)  
    {  
        return (Math.PI / 180) * val;  
    }  
}