2011-10-24 103 views
1

我有一個以點P爲中心的MapView。用戶不能改變MapView中心,但他可以選擇一個圓周的半徑在點P周圍顯示,並動態改變它在每次更改時都會重新繪製地圖以顯示新的圓。 事情是,我希望地圖放大或縮小,以便在可視區域顯示整個圓。我已經試過這樣:谷歌MapView縮小到一個圓圈

Projection proj = m_Map.getProjection(); 
Point mapCenterPixles = new Point(); 
proj.toMapPixels(center, mapCenterPixles); 
float radiusPixels = proj.metersToEquatorPixels(newRadius); 

IGeoPoint topLeft = proj.fromPixels(mapCenterPixles.x - radiusPixels, 
     mapCenterPixles.y - radiusPixels); 
IGeoPoint bottomRight = proj.fromPixels(mapCenterPixles.x 
     + radiusPixels, mapCenterPixles.y + radiusPixels); 

m_Map.getController().zoomToSpan(
     topLeft.getLatitudeE6() - bottomRight.getLatitudeE6(), 
     topLeft.getLongitudeE6() - bottomRight.getLongitudeE6()); 

但似乎我失去了一些東西,作爲值傳遞給zoomToSpan()導致無chnage,我那種丟在這裏,可以有人請闡明如何一些輕要縮放地圖以跨越以半徑爲米的圓的邊界框,並且其中心點?

回答

0

谷歌地圖縮放級別定義爲兩個冪,因此MapController#zoomToSpan()也可以放大兩倍冪。如果您在上面計算的範圍在當前縮放級別內已經可以顯示,那麼在您需要轉到下一個更大或更小的縮放級別之前,實際上在地圖上可能沒有任何可視變化。

此行爲在MapController#zoomToSpan

+0

的文檔中有些隱約描述謝謝Michael。除了模糊的行爲,我的計算是正確的嗎?我沒有完全理解span的含義,但是我發現了幾個例子。也許我錯誤計算,導致屏幕上已經顯示一個跨度? –

+0

我認爲大部分都是正確的,只不過'bottomRight'的經度可能大於'topLeft'的經度,所以你可能需要使用'bottomRight.getLongitudeE6() - topLeft.getLongitudeE6()'來代替。並且請注意,您的代碼可能在[180th子午線]附近發生故障(http://en.wikipedia.org/wiki/180th_meridian)。 –