2012-05-05 47 views
2

我正在繪製基於用戶查詢繪製MapView上的引腳的地圖應用程序。我試圖縮放地圖以適應所有的結果,但我遇到了一個看似奇怪的情況。Android:MapView.GetLatitudeSpan(),GetLongitudeSpan()異常?

我有兩個變量設置:

latSpan是任何結果點

lonSpan的最大緯度和最小緯度之間的差異是任何的最大經度和最小經度之差結果點

這種方法

 while ((mapView.getLatitudeSpan()) < latSpan) || (mapView.getLongitudeSpan() < lonSpan)){ 
      mapController.zoomOut(); 
     }//end of while loop 

應該縮小,以確保一個將針腳放在可視地圖屏幕上。

但我遇到了一些相當奇怪的事情。 mapView.getLatitudeSpan()和mapView.getLongitudeSpan()的結果通常比我的latSpan和lonSpan值大,所以MapController不會縮小到足夠大。

我的地圖放大到相當遠 - 級別15或更高。

作爲一個例子,一組搜索結果的結果如下:

latSpan = 17928

lonSpan = 11636

mapView.getLatitudeSpan()= 21933

mapView.getLongitudeSpan ()= 20598

基於這些數字,您不會認爲MapController需要縮小。然而,屏幕上方和下方都有針腳繪製。我改變我的WHILE循環讀取

while ((mapView.getLatitudeSpan() - 6000) < latSpan... 

這有幫助,但正確的查詢仍然會導致問題。

但真正的問題是,爲什麼會發生這種情況?

回答

1

我不確定爲什麼你的代碼不能從提供的代碼片段工作。它可能不會將您的latSpan和lonSpan轉換爲microDegrees(如下所示),這會導致一些問題。

此外,如果你想確保你的mapView顯示所有的結果,試圖確定是否需要在縮放之前縮放,每次縮放都沒有多大意義。如果事實證明它不需要縮放,那麼什麼都不會發生,如果它確實發生了,那麼它就會發生。

您可以設置一個地圖了涵蓋所有的點,並移至點的重心如下:

GeoPoint max = new GeoPoint(maxLatitude, maxLongitude); 
GeoPoint min = new GeoPoint(minLatitude, minLongitude); 

int maxLatMicro = max.getLatitudeE6(); 
int maxLonMicro = max.getLongitudeE6(); 
int minLatMicro = min.getLatitudeE6(); 
int minLonMicro = min.getLongitudeE6(); 

GeoPoint center = new GeoPoint((maxLatMicro+minLatMicro)/2,(maxLonMicro + minLonMicro)/2); 

controller.zoomToSpan(maxLatMicro - minLatMicro, maxLonMicro - minLonMicro); 
controller.animateTo(center); 
+0

感謝您的答覆。根據文檔,MapView.getLatitudeSpan()方法應該返回微觀角度。我的代碼中的計算與您的計算非常相似,所以數學不是問題。我弄清楚了這個問題,這是一種反常現象。看到我對這個問題的回答。再次感謝。 – pjd