我们正在为我们的应用评估WP8。它利用GPS跟踪在该地区工作的承包商。我们看到诺基亚Lumia是非常好的硬件平台,但面临软件堆栈的问题。
a。我们尝试了此平台的geolocator功能,并将MovementThreshold设置为100,精度设置为HIGH。 湾我们仍然看到数据错误(即使我们移动大约一米,我们得到中断和位置太远离实际)。在网络和文档上搜索后,我们发现'在WP8上,基于卫星GPS的位置只有在无法从WiFi /蜂窝网络获取位置信息时才会使用。
这会扼杀对象的精细跟踪。有没有办法(比如在android我们可以选择提供者)我们可以强迫周六。基于GPS?
如果它有点重复,我很抱歉。
任何帮助将不胜感激。
PS:我们已经应用了计算点到点之间的差异的公式,并用阈值进行过滤,但这不是很好的方法。 此致...
答案 0 :(得分:6)
有 2个Geocoordinate 类 1 Geo * C * oordinate,位于 System.Device.Location 名称空间下 2 Geo * c * oordinate,位于 Windows.Devices.Geolocation 名称空间
下如果您在跟踪代码中使用Geolocator,那么您获得的坐标是Geocoordinate,因为它们都在2,Windows.Devices.Geolocation中提到的相同名称空间中,如果您使用geocoordinatewatcher,它将为您提供GeoCoordinate,因为它们都来自1 System。 Device.Location。
如果你使用的是Geocoordinatewatcher,上面的代码工作正常,但如果你使用的是Geolocator,那么HorizontalAccuracy属性就不适合你,而是你必须使用Accuracy Property。
private const double ACCURACY_THRESHOLD = 20;
private void LocationChanged(Geocoordinate coordinate)
{
if (coordinate.Accuracy < ACCURACY_THRESHOLD)
{
// use point
}
else
{
// ignore and wait for better accuracy
}
}
或者你可以做的是你可以将Geocoordinate转换为GeoCoordinate并使用上面回答中提到的代码。
答案 1 :(得分:5)
您不能强制进行基于卫星的跟踪,但通过选择高精度,它们将被启用。然后,您可以评估收到的位置的准确性,并选择不使用不准确的位置。准确度是GeoCoordinate类的一部分,以米为单位。
private const double ACCURACY_THRESHOLD = 20;
private void LocationChanged(GeoCoordinate coordinate)
{
if (coordinate.HorizontalAccuracy < ACCURACY_THRESHOLD)
{
// use point
}
else
{
// ignore and wait for better accuracy
}
}
请参阅http://msdn.microsoft.com/en-us/library/system.device.location.geocoordinate.horizontalaccuracy.aspx