我写了一个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公里的不准确度,但这太多了。
答案 0 :(得分:3)
没有GPS传感器你会有什么期望?
GPS平均精确到约5米。
如果您的操作系统没有GPS传感器:
士气:如果你需要准确的位置,你需要一个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米。