【问题标题】:Preserving Google map zoom to kml layer on checkbox click在复选框单击时保留 Google 地图缩放到 kml 图层
【发布时间】:2015-01-29 22:54:58
【问题描述】:

我正在尝试将多个 kml 图层添加到可以使用复选框打开和关闭的地图。我得到了那部分工作(耶!)。当我单击图层将其打开时,它会放大(这很好),但是当我取消单击以关闭图层时,它会缩小到我的地图范围。如何让它保留最后加载的图层的缩放?代码如下。

<script>
var map;
var watershedLayer = new google.maps.KmlLayer ({
url: 'http://mvihes.bc.ca/mapping/watersheds.kmz'
});

var ere1949Layer = new google.maps.KmlLayer ({
url: 'http://mvihes.bc.ca/mapping/ere1949.kmz'
});
function initialize() {
var parksville= new google.maps.LatLng(49.316786, -124.308768);
var mapOptions = {
zoom: 9,
center: parksville
};
map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
check();
}
function check()
{
    if(document.getElementById('watersheds').checked)
      {watershedLayer.setMap(map);}
    else
      {watershedLayer.setMap(null);}
    if(document.getElementById('ere1949').checked)
      {ere1949Layer.setMap(map);}
    else
      {ere1949Layer.setMap(null);}

}
google.maps.event.addDomListener(window, 'load', initialize);

</script>

我尝试使用 preserveViewport 功能,但它只是阻止图层放大,这不是我想要的。我是 javaScript 的新手,所以可能我遗漏了一些明显的东西......任何帮助将不胜感激!

jsfiddle

【问题讨论】:

标签: javascript google-maps kml


【解决方案1】:

仅在尚未设置时设置选定图层的地图属性:

function check()
{
    if(document.getElementById('watersheds').checked)
      {if(!watershedLayer.getMap())watershedLayer.setMap(map);}
    else
      {watershedLayer.setMap(null);}
    if(document.getElementById('ere1949').checked)
      {if(!ere1949Layer.getMap())ere1949Layer.setMap(map);}
    else
      {ere1949Layer.setMap(null);}

}

http://jsfiddle.net/jhagmq7L/16/

【讨论】:

    【解决方案2】:

    您还可以在地图上附加最大和最小缩放级别,这是在加载 kml 图层时需要考虑的整体地图缩放。

    // sets the min and max zoom levels of the map
        var opt = { minZoom: 6, maxZoom: 18 };
        map.setOptions(opt);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-28
      • 1970-01-01
      • 2012-01-01
      • 2019-02-08
      相关资源
      最近更新 更多