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 – timeout进行适当的读出:
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:
>设置Geolocator.DesiredAccuracyInMeters到10米:
>尝试在启动Geolocator并重新启动它之间dealy:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |