【问题标题】:Geolocation in C#C#中的地理定位
【发布时间】:2014-08-05 23:08:30
【问题描述】:

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

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# geolocation windows-phone windows-phone-8.1


    【解决方案1】:

    至少对我来说代码工作正常,我得到“txt.Text =“KONT” 您在哪里找到恒定的纬度或经度?

    【讨论】:

    • hm... 奇怪的是,您到达 txt.Text = "KONT" 的那一行,因为那是克罗地亚的一个位置。我去那里写下坐标并硬编码它们只是为了测试:)
    • ... 我使用了我的坐标 :-P 我将我的坐标与你的小数位相同,我尝试了这个方法。你用的是真机还是模拟器?如果是设备,哪一个?
    【解决方案2】:

    我认为问题出现了,因为您给 Geolocator 的时间太少,无法使用 Geolocator.GetGeopositionAsync - 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");
           };
    }
    

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

    还有来自MSDN的一些评论:

    1. Geolocator.ReportInterval 设置为 0:

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

    2. Geolocator.DesiredAccuracyInMeters 设置为 10 米:

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

    3. 尝试在启动 Geolocator 和重新编辑它之间进行处理:

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

    【讨论】:

    • 谢谢,我明天试试(我现在没有手机来测试它)我希望它能工作:)
    • @user2700896 如果您不确定,请不要将其标记为已解决 - 测试后立即执行 :) 在这种情况下它应该可以工作,但可能还有其他问题。跨度>
    【解决方案3】:

    试试这个:

    Geolocator.DesiredAccuracy = PositionAccuracy.High;
    

    【讨论】:

    • 我已经尝试过了(这就是为什么注释 Geolocator.DesiredAccuracy = PositionAccuracy.High; 行)。准确度还是很低。。。我又试了一次,准确度是1342米
    猜你喜欢
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 2015-03-27
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多