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