gpt4 book ai didi

c# - 如何在 Windows Phone 8.1 中获取两个位置之间的距离

转载 作者:行者123 更新时间:2023-11-30 19:39:15 24 4
gpt4 key购买 nike

在 Windows Phone 8 中似乎有方法

   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;
}
}

关于c# - 如何在 Windows Phone 8.1 中获取两个位置之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28569246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com