我正在编写一款Windows Phone 7应用程序,需要了解当前位置。具体来说,当手机进入特定位置的固定范围内时(如0.5英里),我想要运行一些(c#)代码。我已经将所有物理位置的纬度/经度数据保存在内存中。我将使用Geo Coordinate Watcher class 来获取设备的当前坐标。现在唯一的问题是如何计算用户是否在任何位置的范围内。
谢谢!
更新:如承诺所述,这是一个使用余弦定理球面法计算距离的小型C#函数。希望它能帮助其他人。注意:我正在编写一款Windows Phone 7应用程序,因此使用了GeoLocation类。如果您使用的是“常规”c#,则可以更改函数以接受函数所需的两个坐标对。
internal const double EarthsRadiusInKilometers = 6371;
/// <summary>
/// The simple spherical law of cosines formula
/// gives well-conditioned results down to
/// distances as small as around 1 metre.
/// </summary>
/// <returns>Distance between points "as the crow flies" in kilometers</returns>
/// <see cref="http://www.movable-type.co.uk/scripts/latlong.html"/>
private static double SpericalLawOfCosines(GeoCoordinate from, GeoCoordinate to)
{
return ( Math.Acos (
Math.Sin(from.Latitude) * Math.Sin(to.Latitude) +
Math.Cos(from.Latitude) * Math.Cos(to.Latitude) *
Math.Cos(to.Longitude - from.Longitude)
) * EarthsRadiusInKilometers)
.ToRadians();
}
/// <summary>
/// To a radian double
/// </summary>
public static double ToRadians(this double d)
{
return (Math.PI / 180) * d;
}