Maps Windows Phone-连续跟踪和反转eCodeQuery

Maps Windows Phone-连续跟踪和反转eCodeQuery,maps,windows-phone-8,windows-phone,Maps,Windows Phone 8,Windows Phone,我正在使用新的WindowsPhone8地图和地图工具包。在每个PositionChanged事件中,我将UserLocationMarker设置为新位置。如果用户点击UserLocationMarker,我将通过ReverseGeocodeQuery显示地图位置,并将用户位置图钉设置为可见。为了快速完成此操作,我在PositionChanged事件中执行ReverseGeocodeQuery 我的问题是,如果用户位置变化很快,它将执行许多ReverseGeocodeQuerys。这是性能问题吗

我正在使用新的WindowsPhone8地图和地图工具包。在每个
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”方法,可在本例中使用。