2013-11-25 117 views
1

我的數據庫有不同的興趣點。我希望用戶根據他們的位置查看他們。此外還有3個按鈕,顯示了在2km/5km/15km半徑範圍內的興趣點。我無法實現對這些半徑的放大功能。所以我正在尋找縮放因子(從2到21)和物理距離(以km爲單位)之間的關係。如何在谷歌地圖縮小到x公里半徑

我在另一個問題中遇到了這段代碼。

private int calculateZoomLevel(int screenWidth) { 
double equatorLength = 40075004; // in meters 
double widthInPixels = screenWidth; 
double metersPerPixel = equatorLength/256; 
int zoomLevel = 1; 
while ((metersPerPixel * widthInPixels) > 2000) { 
    metersPerPixel /= 2; 
    ++zoomLevel; 
} 
Log.i("ADNAN", "zoom level = "+zoomLevel); 
return zoomLevel; 
} 

但是,這是用於谷歌地圖v1,恐怕事情可能會改變自那時起。我可以用map.moveCamera(CameraUpdateFactory.newLatLngZoom(myLocation, 15f));來放大我的位置,放大倍數爲15,但我現在不知道地圖的半徑。

感謝

回答

2

你可以使用VisibleRegion在千米當前屏幕的寬度(GoogleMap.getProjection()。getVisibleRegion())你的地圖,計算出nearLeft和nearRight座標之間的距離。這會給你地圖下邊緣的範圍。這取決於你對「半徑」的含義,無論這是否足夠準確。

縮放因子在GoogleMap API V2中應該仍然具有相同的效果:增加1會使距離加倍。 (我沒有檢查,但我得出結論,從整個地球貼圖的數量如何映射到取決於縮放級別:它是4^zoomlevel,因爲在x和y兩個維度中,瓦片的數量加倍,每個)

+0

@ user28008624我的意思是半徑是從我的位置的地圖的終點。如果半徑爲5km,則從中點(myLocation)到地圖上的最右點應距離5km –

+0

您當然可以做一些更多的計算,並通過插入midLeft和midRight來查看中間水平線的長度VisibleRegions轉角點。但即使在傾斜的視野下,整體延伸範圍大約爲15公里,但差異將非常小。 – user2808624

1

實現目標的最簡單方法是創建一個LatLngBound,它包含距離中心所需距離的4個點,一個移動到西部,一個移動到南部,一個移動到東部,一個移動到北部。

builder = new LatLngBounds.Builder(); 
builder.include(latLng15KmToWest); 
builder.include(latLng15KmToEast); 
builder.include(latLng15KmToSouth); 
builder.include(latLng15KmToNorth); 
latLngBounds = builder.build(); 

然後,您可以使用此LatLngBounds創建CameraUpdate。

cameraUpdate = CameraUpdateFactory.newLatLngBounds(latLngBound, 0); 
map.animateCamery(cameraUpdate); 

地圖將會縮放到所有4個點的大小。

不幸的是,沒有辦法創建一個基於LatLngBounds的CameraUpdate,它保持方位。它總是會導致北向上的地圖。如果這是o.k.在你的情況下,你不需要自己計算縮放級別。否則,看看我的其他答案。