c#geocoordinate观察者没有给出正确的坐标

时间:2015-07-10 09:43:16

标签: c# geolocation

我写了一个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公里的不准确度,但这太多了。

2 个答案:

答案 0 :(得分:3)

没有GPS传感器你会有什么期望?

GPS平均精确到约5米。

如果您的操作系统没有GPS传感器:

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

士气:如果你需要准确的位置,你需要一个GPS模块。

答案 1 :(得分:0)

您的代码似乎是正确的,但在启动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米。