我有一些关于Geolocator
和属性DesiredAccuracy
的问题。
我有方法GetMyPosition
:
public async Task<Geoposition> GetMyPosition()
{
Geoposition myGeoposition = null;
Geolocator myGeolocator = new Geolocator();
myGeolocator.DesiredAccuracy = PositionAccuracy.High;
try
{
myGeoposition = await myGeolocator.GetGeopositionAsync();
return myGeoposition;
}
catch (Exception ex)
{
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
MessageBox.Show("Can't get the position");
});
return null;
}
}
1)为什么
Geolocator.DesiredAccuracy = PositionAccuracy.High;
Geolocator.GetGeopositionAsync();
始终返回Geoposition.Coordinate.PositionSource = Cellular
,准确度为400 - 1600 m(在诺基亚Lumia 520设备上)?
2)在什么设置下我可以获得高精度(50-100米)和PositionSource = Satellite
?
3)如果我在设备上加载了地图并且我在设备上激活了飞行模式,那么代码
Geolocator myGeolocator = new Geolocator();
myGeolocator.DesiredAccuracy = PositionAccuracy.High;
try
{
myGeoposition = await myGeolocator.GetGeopositionAsync();
return myGeoposition;
}
会奏效吗?没有细胞,只有一颗卫星?
4)坐标精度有多大取决于设备?
提前致谢!
答案 0 :(得分:2)
取自MSDN
虽然位置服务使用多个位置信息源,并且在任何给定时间可能无法使用任何来源(例如,无法访问GPS卫星或手机信号塔),但本机代码层处理工作评估可用数据并选择最佳来源集。您的所有应用程序需要做的是在高精度或默认的功耗优化设置之间进行选择。初始化主要位置服务类GeoCoordinateWatcher时可以设置此值。
C#
GeoCoordinateWatcher watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.Default);
因此,您似乎无法控制使用哪个来源,而是根据GeoCoordinateWatcher
上指定的位置准确度使用可用来源。尝试高精度地初始化GeoCoordinateWatcher
,看看会发生什么
var geoWatcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);
答案 1 :(得分:1)
您可以使用
Geolocator myGeolocator = new Geolocator();
myGeolocator.DesiredAccuracyInMeters = 20;
...
明确说明您希望该位置的准确程度,以便设备能够更好地管理其功能,但是您是否接近该结果的准确性取决于设备可以获得的位置质量。例如,如果你在建筑物内,如果不连接到WIFI,你就不会得到准确的东西