如何在谷歌地图中缩小/缩小x km半径

时间:2013-11-25 14:42:18

标签: android google-maps

我的数据库有各种兴趣点。我希望用户根据他们的位置查看它们。此外还有3个按钮,显示半径为2km / 5km / 15km的兴趣点。我无法实现这些半径的放大功能。所以我正在寻找缩放系数(从2到21)和物理距离(以km为单位)之间的关系。

我在SO中的另一个问题上遇到了这段代码。

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 个答案:

答案 0 :(得分:2)

您可以使用地图的VisibleRegion(GoogleMap.getProjection(。getVisibleRegion())并计算nearLeft和nearRight坐标之间的距离,以km为单位获取当前屏幕宽度。这将为您提供地图下边缘的范围。这取决于你对“半径”的意思,这是否足够准确。

缩放因子在GoogleMap API V2中的行为应该仍然相同:增量1应该是距离的两倍。 (我没有检查,但我得出的结论是,整个地球被映射到的瓦片数量取决于缩放级别:它是4 ^ zoomlevel,因为瓦片的数量在x和y维度上都翻了一倍,每个缩放级别。)

答案 1 :(得分: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.在您的情况下,您不需要自己计算缩放级别。否则请看我的其他答案。