CSharp - C# 中的地理位置

  显示原文与译文双语对照的内容
138 1

我正在尝试开发一个应该像游戏一样的应用程序。用户将在一个城市中有一些位置,他必须在每个位置上做一些事情。为了跟踪用户的位置,我尝试使用以下代码使用地理定位:

Geolocator geolocator = new Geolocator();
//geolocator.DesiredAccuracy = Windows.Devices.Geolocation.PositionAccuracy.High;
geolocator.DesiredAccuracyInMeters = 50;
try
{
 Geoposition geoposition = await geolocator.GetGeopositionAsync(TimeSpan.FromMilliseconds(500), TimeSpan.FromSeconds(1));
 textLatitude.Text ="Latitude:" + geoposition.Coordinate.Latitude.ToString("0.0000000000");
 textLongitude.Text ="Longitude:" + geoposition.Coordinate.Longitude.ToString("0.0000000000");
 textAccuracy.Text ="Accuracy:" + geoposition.Coordinate.Accuracy.ToString("0.0000000000");
}

使用以下方法获取我试图测试的坐标,如果设备将在以下代码中正确定位我的位置:

if( Math.Abs(geoposition.Coordinate.Latitude - 45.3285) <0.001 ){
 if (Math.Abs(geoposition.Coordinate.Longitude - 14.4474) <0.001)
 {
 txt.Text ="KONT"; 
 }
}

如果位置精确的坐标是再精确不过的坐标,那么这个位置的精度就是很小的,而且这段代码的精确度是真的不正确。

有人知道如何获得更可以靠的位置或者另一种方法来解决这个问题?

时间:原作者:0个回答

73 2

因为你给Geolocator的时间太短,用 Geolocator.GetGeopositionAsync - 超时,我认为问题发生了:

Geoposition geoposition = await geolocator.GetGeopositionAsync(TimeSpan.FromMilliseconds(500), TimeSpan.FromSeconds(1));

你只给它 1秒,而得到更准确的位置需要时间。

我的例子是:

Geolocator geolocator;
Geoposition geoposition;
public MainPage()
{
 this.InitializeComponent();
 geolocator = new Geolocator();
 geolocator.DesiredAccuracyInMeters = 10;
 geolocator.ReportInterval = 0;
 myButton.Click += async (sender, e) =>
 {
 geoposition = await geolocator.GetGeopositionAsync();
 string latitude = geoposition.Coordinate.Latitude.ToString("0.0000000000");
 string Longitude = geoposition.Coordinate.Longitude.ToString("0.0000000000");
 string Accuracy = geoposition.Coordinate.Accuracy.ToString("0.0000000000");
 };
}

上代码在等待 20秒后精度为( 在我的情况下) 位,精度为 ~35,但 。请注意,准确性取决于可用的sattelites数。

还有来自 MSDN的一些说明:

Geolocator.ReportInterval 设置为 0:

需要实时数据的应用程序应将ReportInterval设置为 0,以指示没有指定最小间隔。在 Windows 上,当报表间隔为 0时,应用程序接收最准确的位置源发送的频率的事件。在 Windows Phone 上,应用程序将以与应用程序请求的准确度相关的速率接收更新。

Geolocator.DesiredAccuracyInMeters 设置为 10米:

尝试在启动Geolocator和reding之间进行 dealy:

考虑启动延迟。首次应用请求位置数据时,可能会出现短暂延迟( 1 -2秒),而位置提供程序将启动。在应用程序的UI设计中考虑这个问题。例如你可能希望避免在调用GetGeopositionAsync完成时阻止其他任务。

原作者:
...