【问题标题】:How to zoom out in/out in google maps to x km radius如何在谷歌地图中缩小/缩小到x公里半径
【发布时间】:2013-11-25 14:42:17
【问题描述】:

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

我在 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 倍的缩放系数放大我的位置,但我现在不知道地图的半径。

谢谢

【问题讨论】:

    标签: android google-maps


    【解决方案1】:

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

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

    【讨论】:

    • @user28008624 我所说的半径是我所在位置的地图终点。如果半径为 5 公里,则从中点(myLocation)到地图上最右边的点应为 5 公里
    • 你当然可以做更多的计算,并通过从 VisibleRegions 角点插入 midLeft 和 midRight 来找出中间水平的长度。但整体延伸约 15 公里,即使在倾斜视图中,差异也会非常小。
    【解决方案2】:

    实现目标的最简单方法是创建一个 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,从而保持方位。它总是会产生一张朝北的地图。如果没关系在您的情况下,您不需要自己计算缩放级别。否则请参阅我的其他答案。

    【讨论】:

      猜你喜欢
      • 2020-12-06
      • 1970-01-01
      • 2016-03-17
      • 1970-01-01
      • 2011-12-31
      • 2014-08-30
      • 2015-07-18
      • 2014-11-09
      • 2019-09-21
      相关资源
      最近更新 更多