谷歌地图视图缩小以跨越一个圆圈

Posted

技术标签:

【中文标题】谷歌地图视图缩小以跨越一个圆圈【英文标题】:Google MapView zoomout to span a circle 【发布时间】:2011-12-14 13:06:08 【问题描述】:

我有一个以 P 点为中心的 MapView。用户无法更改 MapView 中心,但他可以选择要在 P 点周围显示的圆的半径,并在每次更改时重新绘制地图时动态更改它显示新圈子。 问题是,我希望地图根据需要放大或缩小,以便在可视区域显示整个圆圈。我试过这个:

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() 的值不会导致任何变化,我有点迷失在这里,有人可以说明如何缩放地图以跨越边界框以米为单位的圆的半径及其中心点?

【问题讨论】:

【参考方案1】:

Google 地图缩放级别以 2 的幂定义,因此 MapController#zoomToSpan() 也以 2 的幂进行缩放。

因此,如果您在上面计算的跨度已经可以在当前缩放级别内显示,那么在您需要进入下一个更大或更小的缩放级别之前,地图中的视觉可能实际上不会发生任何变化。

MapController#zoomToSpan 的文档中对这种行为的描述有些模糊

【讨论】:

谢谢你,迈克尔。除了模糊的行为,我的计算是否正确?我没有完全理解跨度的含义,但我找到了几个例子。也许我计算错误,导致屏幕上已经显示了一个跨度? 我认为大部分是正确的,只是bottomRight 的经度可能大于topLeft 的经度,所以你可能想改用bottomRight.getLongitudeE6() - topLeft.getLongitudeE6()。请注意,您的代码可能会在 180th meridian 附近发生故障。

以上是关于谷歌地图视图缩小以跨越一个圆圈的主要内容,如果未能解决你的问题,请参考以下文章

谷歌地图,基于缩放比例圈

如何防止在圆圈中心发生变化时创建新圆圈。 (谷歌地图 API)

由圆圈组成的谷歌地图多边形

如何在谷歌地图上显示圆圈?

谷歌地图Android:圆圈上方的标记

如何在谷歌地图中制作多个圆圈颤动[关闭]