使用kml文件时,Google地图缩放级别会被覆盖。

22
1个回答

53

默认情况下,地图会居中并缩放到kml层内容的范围。

您可以使用google.maps.KmlLayerOptions对象的preserveViewport属性更改默认行为。如果将其设置为true,则地图不会居中和缩放。

在示例中,请使用:

var nyLayer = new google.maps.KmlLayer(
                  'http://www.searcharoo.net/SearchKml/newyork.kml',
                  {
                      suppressInfoWindows: true,
                      map: map,
                      preserveViewport: true
                  });

如果您想在后续中将kml图层内容居中和缩放,请使用:

var bounds = nyLayer.getDefaultViewport();
map.fitBounds(bounds);

编辑:

如果您希望在加载kml图层时地图始终居中(但不缩放),请使用google.maps.KmlLayer对象的defaultviewport_changed事件。您需要将地图中心设置为kml图层默认视口的中心。当kml图层的内容被加载并且其默认视口被计算时,该事件将被触发。

google.maps.event.addListener(nyLayer, 'defaultviewport_changed', function() {
   var bounds = nyLayer.getDefaultViewport();
   map.setCenter(bounds.getCenter());
});

谢谢,但是当我设置更高的缩放级别,比如18时,标记不会变得可见,它们要么根本不出现,要么我需要将它们居中以使它们可见,我该如何确保标记始终出现在地图的中心附近。 - Mike
我更新了答案。现在,您可以立即获得以kml图层中标记的位置为中心的地图。 - Tomik
实际上,根据位置,我在地图上有一些标记。在页面加载时,我应该能够看到所有的标记,如果我在特定的市场附近点击某个地方,我希望它能够缩放。另外,我更新了代码,但似乎它正在使用错误的js文件:http://jsfiddle.net/WPXWX/1/ - Mike
那么你应该考虑接受这个答案。还有一个问题:在创建kml图层后,你不能立即调用nyLayer.getDefaultViewport(),因为在defaultviewport_changed事件被调用之前,该图层的内容是未定义的。 - Tomik
我得到了“g未定义(范围43超出范围126)”的错误,要么标记不会出现,要么缩放不起作用。发生了什么? - Mike
显示剩余3条评论

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