Maps Windows Phone-连续跟踪和反转eCodeQuery
我正在使用新的WindowsPhone8地图和地图工具包。在每个Maps Windows Phone-连续跟踪和反转eCodeQuery,maps,windows-phone-8,windows-phone,Maps,Windows Phone 8,Windows Phone,我正在使用新的WindowsPhone8地图和地图工具包。在每个PositionChanged事件中,我将UserLocationMarker设置为新位置。如果用户点击UserLocationMarker,我将通过ReverseGeocodeQuery显示地图位置,并将用户位置图钉设置为可见。为了快速完成此操作,我在PositionChanged事件中执行ReverseGeocodeQuery 我的问题是,如果用户位置变化很快,它将执行许多ReverseGeocodeQuerys。这是性能问题吗
PositionChanged
事件中,我将UserLocationMarker
设置为新位置。如果用户点击UserLocationMarker
,我将通过ReverseGeocodeQuery
显示地图位置,并将用户位置图钉设置为可见。为了快速完成此操作,我在PositionChanged
事件中执行ReverseGeocodeQuery
我的问题是,如果用户位置变化很快,它将执行许多ReverseGeocodeQuery
s。这是性能问题吗
private void InitializeGeolocator()
{
geolocator = new Geolocator();
geolocator.DesiredAccuracy = PositionAccuracy.High;
geolocator.MovementThreshold = 5;
geolocator.StatusChanged += geolocator_StatusChanged;
geolocator.PositionChanged += geolocator_PositionChanged;
}
private void geolocator_PositionChanged(Geolocator sender, PositionChangedEventArgs args)
{
Dispatcher.BeginInvoke(() =>
{
Geoposition geoposition = args.Position;
this.UserLocationMarker.GeoCoordinate = geoposition.Coordinate.ToGeoCoordinate();
this.UserLocationMarker.Visibility = System.Windows.Visibility.Visible;
// execute ReverseGeocodeQuery...
// set Pushpin
});
}
private void userLocationMarker_tap(object sender, GestureEventArgs e)
{
// show user location pushpin...
UserLocationPushpin.Visibility = Visibility.Visible;
}
如果在
PositionChanged
事件中调用了ReverseGeocodeQuery
,则是,这可能会导致性能问题
作为一般规则,Windows Phone(和Windows 8/WinRT)中的任何异步调用通常意味着它可能在固定时间内不返回值-可能需要50毫秒,可能需要5秒
通过ReverseGeocodeQuery
,它可以通过网络呼叫诺基亚的服务器(geo.nlp.Nokia.com)获取地址。尽管在使用Wifi或良好的3G连接时,此呼叫会很快返回,但如果接收效果不佳,则不会出现这种情况
尽管我能理解你在做什么-提前查找地址,这样当用户点击UserLocationMarker
时,地址会立即出现-不良的网络质量可能会造成延迟或异常
我的建议是遵循内置地图应用程序已经使用的方法。也就是说,当用户点击UserLocationMarker
时,它会显示一个“Looking…”标签,然后执行异步地址查找,然后用地址更新该标签
还要记住,我们不知道ReverseGeocodeQuery是否有速率限制。看起来不是这样,但将来可能会改变,因为大多数其他服务都是-
无论你决定做什么,方便的测试工具都是
如果在
PositionChanged
事件中调用了ReverseGeocodeQuery
,则是,这可能会导致性能问题
作为一般规则,Windows Phone(和Windows 8/WinRT)中的任何异步调用通常意味着它可能在固定时间内不返回值-可能需要50毫秒,可能需要5秒
通过ReverseGeocodeQuery
,它可以通过网络呼叫诺基亚的服务器(geo.nlp.Nokia.com)获取地址。尽管在使用Wifi或良好的3G连接时,此呼叫会很快返回,但如果接收效果不佳,则不会出现这种情况
尽管我能理解你在做什么-提前查找地址,这样当用户点击UserLocationMarker
时,地址会立即出现-不良的网络质量可能会造成延迟或异常
我的建议是遵循内置地图应用程序已经使用的方法。也就是说,当用户点击UserLocationMarker
时,它会显示一个“Looking…”标签,然后执行异步地址查找,然后用地址更新该标签
还要记住,我们不知道ReverseGeocodeQuery是否有速率限制。看起来不是这样,但将来可能会改变,因为大多数其他服务都是-
无论你决定做什么,方便的测试工具都是
好吧,这看起来是个好办法!但是,如果用户移动得非常快并点击UserLocationMarker,那么Pusphin就会出现并停留在原来的位置。内置地图应用程序如何处理此问题?内置地图应用程序似乎有两个插针,
UserLocationMarker
,后面有一个图钉。当用户点击UserLocationMarker
时,PushPin
显示“looking…”,然后加载地址。当位置改变时,两个管脚移动,地址更新。如果用户点击其他位置,图钉将再次隐藏。WP8仿真器有地图应用程序,与WP7仿真器不同,顺便说一句。好吧,在我看来,内置应用程序正在使用PositionChanged事件进行位置更新,或者?是的,我认为它做了类似的事情。如果在上一次地理编码查找仍在进行时发生PositionChanged
事件,则应取消该事件,然后启动新的事件ReverseGeocodeQuery
有一个IsBusy
属性和“CancelAsync”方法,可以在本例中使用。好的,这看起来是一个不错的方法!但是,如果用户移动得非常快并点击UserLocationMarker,那么Pusphin就会出现并停留在原来的位置。内置地图应用程序如何处理此问题?内置地图应用程序似乎有两个插针,UserLocationMarker
,后面有一个图钉。当用户点击UserLocationMarker
时,PushPin
显示“looking…”,然后加载地址。当位置改变时,两个管脚移动,地址更新。如果用户点击其他位置,图钉将再次隐藏。WP8仿真器有地图应用程序,与WP7仿真器不同,顺便说一句。好吧,在我看来,内置应用程序正在使用PositionChanged事件进行位置更新,或者?是的,我认为它做了类似的事情。如果在上一次地理编码查找仍在进行时发生PositionChanged
事件,则应取消该事件,然后启动新的事件ReverseGeocodeQuery
有一个IsBusy
属性和“CancelAsync”方法,可在本例中使用。