c# 地理坐标观察者不返回正确的坐标

Posted

技术标签:

【中文标题】c# 地理坐标观察者不返回正确的坐标【英文标题】:c# geocoordinate watcher not giving back correct coords 【发布时间】:2015-07-10 09:43:15 【问题描述】:

我写了一段 c# 代码来获取我的粗略位置。

该程序将在没有 GPS 传感器的笔记本电脑上运行。

namespace WindowsFormsApplication1

    class Class1
    
    private GeoCoordinateWatcher watcher;

    public void GetLocationDataEvent()
    
        watcher = new System.Device.Location.GeoCoordinateWatcher();
        watcher.PositionChanged += watcher_PositionChanged;
        watcher.Start();
    

    private void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
    

        String lat = e.Position.Location.Latitude.ToString();
        String lon = e.Position.Location.Longitude.ToString();

        MessageBox.Show(lat + "+" + lon);
        // Stop receiving updates after the first one.
        watcher.Stop();
    
  

嗯,它有效。但它给了我一个距离我的位置近 30 公里的坐标。有没有其他方法可以使它更准确?我可以承受大约 1 或 2 公里的误差,但这太过分了。

【问题讨论】:

【参考方案1】:

如果没有 GPS 传感器,您会期待什么?

GPS 平均精确到大约 5m。

如果没有 GPS 传感器,您的操作系统可能会:

映射你的IP地址(这只是一个粗略的估计) 映射您的 WLAN ID(更好,但仍只是估计值) 如果您有 GSM 模块,它可能会使用最近的 GSM 发送器(精确到 30 公里)

士气:如果您需要准确的位置,则需要 GPS 模块。

【讨论】:

好吧,看来这个链接 (w3schools.com/html/tryit.asp?filename=tryhtml5_geolocation) 在与 Chrome 一起使用时为我提供了准确的位置。使用 C# 不是正确的方法。 在我的 Firefox(无 GPS)中,距离为 3 公里(比预期的要好得多)(Chrom 返回相同的结果) Chrome 和 Firefox 似乎正在使用 w3c 地理定位标准。这就是为什么他们得到非常准确的位置。但是,IE 似乎根本不准确。在 IE 上运行源会返回与上述结果相同的位置。【参考方案2】:

您的代码似乎正确,但启动 GeoCoordinateWatcher 后,第一个位置通常不准确。

如果最近有其他应用程序使用了您的位置,GeoCoordinateWather 可以快速提供准确的位置,但如果没有,它首先必须在您的计算机上启动其他定位服务,这可能需要一些时间。

您可以添加准确性检查:

private void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)

    if (e.Position.Location.HorizontalAccuracy > 500)
    
        return;
    

    String lat = e.Position.Location.Latitude.ToString();
    String lon = e.Position.Location.Longitude.ToString();

    MessageBox.Show(lat + "+" + lon);
    // Stop receiving updates after the first one.
    watcher.Stop();

这将一直等到精度至少达到 500 米。

【讨论】:

以上是关于c# 地理坐标观察者不返回正确的坐标的主要内容,如果未能解决你的问题,请参考以下文章

OSMNX 地理编码器返回不正确的坐标

输入地理坐标,返回输入坐标 x 英里内的坐标 - C# .NET

世界坐标空间与观察坐标系之间的转换

地理坐标c# [关闭]

OpenGL里的坐标系统以及其变换

将地理坐标转换为地址 C# 或 jQuery