Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#地理坐标观察者未返回正确坐标_C#_Geolocation - Fatal编程技术网

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

c#地理坐标观察者未返回正确坐标,c#,geolocation,C#,Geolocation,我写了一个c#代码来获取我的粗略位置 该程序将在没有GPS传感器的笔记本电脑上运行 namespace WindowsFormsApplication1 { class Class1 { private GeoCoordinateWatcher watcher; public void GetLocationDataEvent() { watcher = new System.Device.Location.GeoCoordinateWa

我写了一个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();
    }
  }
}
命名空间窗口窗体应用程序1
{
一班
{
私人地球坐标观测员;
public void GetLocationDataEvent()
{
watcher=新系统.设备.位置.地理坐标追踪器();
watcher.PositionChanged+=watcher\u PositionChanged;
watcher.Start();
}
私有无效观察者位置已更改(对象发送者,地理位置更改Deventargs e)
{
字符串lat=e.Position.Location.Latitude.ToString();
字符串lon=e.Position.Location.Longitude.ToString();
MessageBox.Show(lat+“+”+lon);
//在第一次更新后停止接收更新。
watcher.Stop();
}
}
}

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

如果没有GPS传感器,您希望得到什么

GPS平均精确到5米左右

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

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

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

你的代码似乎是正确的,但在启动地理坐标记录器后,第一个位置通常是不准确的

如果最近有其他应用程序使用了您的位置,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();
}
private void watcher\u位置已更改(对象发送方,地理位置更改Deventargs e)
{
如果(如位置、位置、水平精度>500)
{
返回;
}
字符串lat=e.Position.Location.Latitude.ToString();
字符串lon=e.Position.Location.Longitude.ToString();
MessageBox.Show(lat+“+”+lon);
//在第一次更新后停止接收更新。
watcher.Stop();
}

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

好吧,当与Chrome一起使用时,此链接()似乎为我提供了一个准确的位置。使用C#不是正确的方法。在我的Firefox(没有GPS)中,这距离3公里(比预期的要好得多)(Chrom返回相同的结果)Chrome和Firefox似乎使用w3c地理定位标准。这就是为什么他们得到了非常准确的位置。但是,似乎一点也不准确。在IE上运行源返回与上面结果相同的位置。