谷歌地图API v3如何设置缩放级别以显示给定半径?

24

我创建了一个地图,用户输入邮政编码和半径(英里),我希望地图以由邮政编码创建的点为中心,并仅显示(大致)在该半径内的区域。我正在创建一个带有半径的圆形,并尝试使地图适应该圆形。目前,它的中心位置正确,但显示的区域比给定的半径要大得多。

me.center_map = function(latlng, r)
{
    // latlng is the point of the zipcode
    var circ = new google.maps.Circle();
    circ.setRadius(r * 1609.0);
    circ.setCenter(latlng);
    map.setCenter(latlng);
    map.fitBounds(circ.getBounds());

    // updates markers
    google.maps.event.trigger(map,'dragend');
};

编辑:我画了一个圆。理想情况下,地图将缩放到半径范围内的区域。

输入图片说明

3个回答

24

fitBounds()方法的调用会将地图缩放到完全包含边界的最小缩放级别。如果您再缩放1个级别,则半径将不会完全包含在地图中。


3
是的,您需要一个能够呈现部分缩放级别的工具,例如,而不是z=11,您需要z=11.5。 - Alex
2
syslogic:我明白。我的意思是Google地图需要能够呈现浮点缩放级别。 - Alex

4
map.setZoom(map.getZoom() + 1);

这取决于半径拟合的好坏(如果不总是相同的话)。要显示圆形内的区域,需要构建一个矩形,其角落位于圆周上,并将地图视口适应其边界。例如,绘制一个可见的圆和一个具有相同中心点的透明矩形应该可以按照op所描述的方式工作。

1
自2017年6月起,fitBounds方法有第二个参数表示填充大小。如果想要去除填充,只需传递0即可。
Map.map.fitBounds(bounds, 0);

新方法签名:
fitBounds(bounds:LatLngBounds|LatLngBoundsLiteral, padding?:number)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接