2012-10-02 101 views
0

我有一個MapView,並且我調用getController()。zoomToSpan()。我對zoomToSpan()的問題是我想要在地圖引腳之外具有一致的(例如15dp)填充,以便可以在不需要用戶捏縮放的情況下選擇它們。目前我使用地圖引腳的最小/最大長/緯度填充zoomToSpan(),因此邊緣上的那些不能立即顯示或選擇。添加填充到MapViewController.zoomToSpan()

我已經考慮過使用固定的長/緯度填充,但我不能保證地圖引腳不會彼此過於接近或太遠。因此,雖然固定的長/寬填充可能適用於大多數情況,但它不適用於所有情況。

這是我當前如何設定zoomToPan():

mapView.getController().zoomToSpan(MapPoint.convertToGeoPoint(Math.abs(fMinLat - fMaxLat)), MapPoint.convertToGeoPoint(Math.abs(fMinLong - fMaxLong))); 

這是一個想法,我對如何設置它,但我不知道是否確實解決了問題,或者是否有更好的方式來做到這一點:

mapView.getController().zoomToSpan(MapPoint.convertToGeoPoint((float) (Math.abs(fMinLat-fMaxLat) + (Math.abs(fMaxLat - fMaxLat)) * 0.5)), MapPoint.convertToGeoPoint((float) (Math.abs(fMinLong-fMaxLong) + (Math.abs(fMinLong - fMaxLong) * 0.5)))); 

我已經檢查了這些問題,但我過去使其工作點;我只是想讓它擦亮:zoomToSpan implementation problemCalculating zoomToSpan() degrees based on min/max lat/lng to be in the mapView

回答

1

您的解決方案應該能正常運行。請注意,您在「(Math.abs(fMaxLat - fMaxLat))* 0.5)」中有一個拼寫錯誤「。您正在使用兩次「fMaxLat」。

你可以把它寫在一個簡單的形式:

mapView.getController().zoomToSpan((int)(Math.abs(fMinLat-fMaxLat) * 1.5), (int)(Math.abs(fMinLong-fMaxLong) * 1.5)); 

這時可以嘗試1.0和1.99之間不同的乘法值,看看有什麼更好的達到您的期望。

而且記住,放大始終步驟更改(不是逐行)2的冪的,這意味着它會加倍放大,否則會降低一半。實現最終的結果將在地圖上的不同點,它可以從以前的一個邊緣緊密地配合變焦值,非常distante變化。