2013-03-01 46 views
1

我正在使用新的Windows Phone 8地圖和地圖工具包。在每個PositionChanged事件中,我將UserLocationMarker設置爲新位置。如果用戶點擊UserLocationMarker,我將通過ReverseGeocodeQuery顯示地圖位置,並將用戶位置圖釘設置爲可見。要做到這一點非常快,我在PositionChanged事件中執行ReverseGeocodeQueryWindows Phone - 持續跟蹤和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; 
} 

回答

1

如果ReverseGeocodeQuery被稱爲PositionChanged事件中,那麼,這可能會導致性能問題。

作爲一般規則,Windows Phone(和Windows 8/WinRT)中的任何異步調用通常意味着它可能不會在固定時間內返回值 - 可能需要50ms,可能需要5秒鐘。

隨着ReverseGeocodeQuery,它與諾基亞的服務器(geo.nlp.nokia.com)進行網絡調用以獲取地址。儘管使用Wifi或3G連接時此通話會很快返回,但如果您的接收不良,則不會這樣。

儘管我可以理解你在做什麼 - 請提前查找地址,以便當用戶點擊UserLocationMarker時,地址即刻顯示 - 網絡質量不佳可能會導致延遲或異常。

我的建議是遵循內置地圖應用程序已經使用的方法。也就是說,當用戶點擊UserLocationMarker時,它會顯示一個「Looking ...」標籤,然後進行異步地址查找,然後用該地址更新該標籤。

還要記住,我們不知道ReverseGeocodeQuery是否受速率限制。它似乎不是,但未來可能會改變,因爲大多數其他服務是 - such as Google’s Geocoding API

無論你決定做什麼,爲了測試方便的工具...

  1. Fiddlerand how to use Fiddler with the WP8 emulator
  2. Simulation Dashboard for Windows Phone(模擬惡劣的網絡條件等)
+0

好吧,那的長相像一個好方法!但是,如果用戶移動速度非常快,並點擊* UserLocationMarker *,則Pusphin將出現並保留在舊位置。這是如何通過內置的地圖應用程序處理的? – 2013-03-05 09:42:11

+1

內置的地圖應用似乎有兩個引腳,UserLocationMarker和後面的PushPin。當用戶點擊UserLocationMarker時,'PushPin'出現'正在...',然後加載地址。當位置改變時** **引腳移動並更新地址。如果用戶點擊其他地方,「PushPin」會隱藏agagin。 WP7仿真器具有地圖應用程序,與WP7仿真器不同,btw。 – 2013-03-05 10:55:47

+0

好吧,在我看來,內置的應用程序正在使用* PositionChanged *事件進行位置更新,或者? – 2013-03-05 11:26:47