【问题标题】:Windows Phone - continuously tracking and ReverseGeocodeQueryWindows Phone - 持续跟踪和 ReverseGeocodeQuery
【发布时间】:2013-03-05 18:56:27
【问题描述】:

我正在使用新的 Windows Phone 8 地图和地图工具包。在每个PositionChanged 事件中,我将UserLocationMarker 设置为新位置。如果用户点击UserLocationMarker,我将通过ReverseGeocodeQuery 显示地图位置并将用户位置图钉设置为可见。为了快速完成这项工作,我在 PositionChanged 事件中执行了 ReverseGeocodeQuery

我的问题是,如果用户位置变化很快,它会执行很多ReverseGeocodeQuerys。这是性能问题吗?

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;
}

【问题讨论】:

    标签: maps windows-phone-8 windows-phone


    【解决方案1】:

    如果在PositionChanged 事件中调用ReverseGeocodeQuery,那么是的,这可能会导致性能问题。

    作为一般规则,Windows Phone(和 Windows 8 / WinRT)中的任何异步调用通常意味着它可能不会在固定时间内返回值 - 可能需要 50 毫秒,也可能需要 5 秒。

    使用ReverseGeocodeQuery,它向诺基亚的服务器 (geo.nlp.nokia.com) 发起网络调用以获取地址。虽然在使用 Wifi 或良好的 3G 连接时此呼叫会很快返回,但如果您接收不良,则不会出现这种情况。

    虽然我能理解您要做什么 - 提前查找地址,以便当用户点击 UserLocationMarker 时,地址会立即出现 - 网络质量差可能会导致延迟或异常.

    我的建议是遵循内置地图应用程序已经使用的方法。也就是说,当用户点击UserLocationMarker 时,它会显示一个“正在查找...”标签,然后进行异步地址查找,然后使用地址更新该标签。

    另外请记住,我们不知道 ReverseGeocodeQuery 是否有速率限制。似乎没有,但未来可能会改变,因为大多数其他服务都是 - such as Google’s Geocoding API

    无论您决定做什么,方便的测试工具都是......

    1. Fiddler (and how to use Fiddler with the WP8 emulator)
    2. Simulation Dashboard for Windows Phone(模拟不良网络状况等)

    【讨论】:

    • 好吧,这看起来是个好方法!但是如果用户快速移动并点击 UserLocationMarker,那么 Pusphin 就会出现并停留在旧位置。内置地图应用程序是如何处理的?
    • 内置地图应用似乎有两个大头针,UserLocationMarker,后面有一个PushPin。当用户点击UserLocationMarker 时,PushPin 会出现“正在寻找...”,然后加载地址。当位置发生变化时,两个引脚都会移动,地址也会随之更新。如果用户点击其他地方,PushPin 会再次隐藏。 WP8 模拟器有地图应用程序,不像 WP7 模拟器,顺便说一句。
    • 好的,在我看来,内置应用正在使用 PositionChanged 事件进行位置更新,或者?​​
    • 是的,我认为它做了类似的事情。如果在先前的地理编码查找仍在进行时发生PositionChanged 事件,它应该被取消,然后开始一个新的。 ReverseGeocodeQuery 有一个 IsBusy 属性和 `CancelAsync' 方法,可以在这种情况下使用。
    猜你喜欢
    • 1970-01-01
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多