C#中的地理位置
我正在尝试开发一个应该像游戏一样的应用程序。 用户在城市中会有一些位置,他必须在每个位置做一些事情。 为了跟踪用户的位置,我尝试使用以下代码进行地理定位:
Geolocator geolocator = new Geolocator(); //geolocator.DesiredAccuracy = Windows.Devices.Geolocation.PositionAccuracy.High; geolocator.DesiredAccuracyInMeters = 50; try { Geoposition geoposition = await geolocator.GetGeopositionAsync(TimeSpan.FromMilliseconds(500), TimeSpan.FromSeconds(1)); textLatitude.Text = "Latitude: " + geoposition.Coordinate.Latitude.ToString("0.0000000000"); textLongitude.Text = "Longitude: " + geoposition.Coordinate.Longitude.ToString("0.0000000000"); textAccuracy.Text = "Accuracy: " + geoposition.Coordinate.Accuracy.ToString("0.0000000000"); }
使用以下方法获取坐标,我试图测试设备是否将使用以下代码正确定位我的位置:
if( Math.Abs(geoposition.Coordinate.Latitude - 45.3285) < 0.001 ){ if (Math.Abs(geoposition.Coordinate.Longitude - 14.4474) < 0.001) { txt.Text = "KONT"; } }
问题是位置的准确性非常小,如果我尝试使用更精确的坐标,它将永远不会再次获得相同的坐标,并且使用此代码,准确性非常差(甚至可能会失败300米)。
有谁知道如何获得更可靠的位置,或另一种方法来解决这个问题?
我认为问题就出现了,因为你给Geolocator用Geolocator.GetGeopositionAsync做出正确读数的时间太少- 超时 :
Geoposition geoposition = await geolocator.GetGeopositionAsync(TimeSpan.FromMilliseconds(500), TimeSpan.FromSeconds(1));
你给它只有1秒钟,而获得更准确的位置需要时间。
我的例子:
Geolocator geolocator; Geoposition geoposition; public MainPage() { this.InitializeComponent(); geolocator = new Geolocator(); geolocator.DesiredAccuracyInMeters = 10; geolocator.ReportInterval = 0; myButton.Click += async (sender, e) => { geoposition = await geolocator.GetGeopositionAsync(); string latitude = geoposition.Coordinate.Latitude.ToString("0.0000000000"); string Longitude = geoposition.Coordinate.Longitude.ToString("0.0000000000"); string Accuracy = geoposition.Coordinate.Accuracy.ToString("0.0000000000"); }; }
上面的代码恢复了一个位置(在我的情况下),精度为~35米, 但是在等待大约20-30秒之后。 另请注意,准确度取决于可用卫星的数量。
MSDN的一些评论:
-
将Geolocator.ReportInterval设置为0:
需要实时数据的应用程序应将ReportInterval设置为0,以指示未指定最小间隔。 在Windows上,当报告间隔为0时,应用程序将以最准确的位置源发送它们的频率接收事件。 在Windows Phone上,应用程序将以取决于应用程序请求的准确性的速率接收更新。
-
将Geolocator.DesiredAccuracyInMeters设置为10米:
◾如果用户试图分享他的位置,应用程序应该要求大约10米的准确度。
-
尝试在启动Geolocator和reding之间进行区分:
考虑启动延迟。 应用程序第一次请求位置数据时,位置提供程序启动时可能会有短暂的延迟(1-2秒)。 在应用程序UI的设计中考虑这一点。 例如,您可能希望在完成对GetGeopositionAsync的调用之前阻止阻止其他任务。
至少对我来说代码工作正常,我得到“txt.Text =”KONT“你在哪里找到经纬度不变的?
试试这个:
上述就是C#学习教程:C#中的地理位置分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
Geolocator.DesiredAccuracy = PositionAccuracy.High;
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1021550.html