c#中的地理定位

本文关键字:定位 | 更新日期: 2023-09-27 18:08:58

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

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

问题是位置的精度非常小,如果我尝试使用更精确的坐标,它将永远不会再次获得相同的坐标,并且使用此代码的精度非常糟糕(它甚至可以失败300米)。

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

c#中的地理定位

我认为问题发生了,因为您给地理定位器的时间太少,无法使用地理定位器进行正确的读出。getgepositionasync - timeout:

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

上面的代码返回一个位置(在我的例子中),精度为~35米,但是等待大约20-30秒后。还要注意,准确性取决于可用卫星的数量。

还有一些来自MSDN的注释:

  1. Geolocator设置。ReportInterval to 0:

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

  2. Geolocator设置。理想精度:米到10米:

    ◾如果用户试图分享他的位置,应用程序应该要求大约10米的精度。

  3. 尝试在启动地理定位器和读取它之间进行处理:

    考虑启动延迟。应用程序第一次请求位置数据时,在位置提供程序启动时可能会有短暂的延迟(1-2秒)。在设计应用UI时要考虑到这一点。例如,您可能希望避免阻塞其他任务,等待getgepositionasync调用完成。

至少对我来说,代码工作正常,我得到了"txt "。Text = "KONT"你在哪里找到恒定的纬度或经度?

try this:

Geolocator.DesiredAccuracy = PositionAccuracy.High;