动态更新/刷新KmlLayer

时间:2015-02-03 03:10:42

标签: javascript google-maps

我试图从空间坐标数据中在Google地图上呈现邮政编码。由于有很多坐标,我想动态加载适用于可观察地图的坐标。

我尝试这样的事情:

  var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);

  var ctaLayer = new google.maps.KmlLayer({
    url: 'http://example.com/my.kml'
  });

  ctaLayer.setMap(map);

  google.maps.event.addListener(map, 'bounds_changed', function() {

      var ne_lat = map.getBounds().getNorthEast().lat();
      var ne_lng = map.getBounds().getNorthEast().lng();

      if(typeof ctaLayer !== 'undefined') {
            ctaLayer.setMap(null);
      }

      var ctaLayer = new google.maps.KmlLayer({
        url: 'http://example.com/my.kml?ne_lat=' + ne_lat + '&ne_lng=' + ne_lng;
      });
      ctaLayer.setMap(map);

});

问题是,当我尝试移动或缩放地图时,它只会让我回到原来的位置(缩小或重新定位地图)。

1 个答案:

答案 0 :(得分:2)

KmlLayer auto默认以数据为中心。如果您不希望它更改缩放/中心,请将preserveViewport选项设置为true。

(加上你的代码中有语法错误)

var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);

  var ctaLayer = new google.maps.KmlLayer({
    url: 'http://example.com/my.kml',
    preserveViewport: true
  });

  ctaLayer.setMap(map);

  google.maps.event.addListener(map, 'bounds_changed', function() {

      var ne_lat = map.getBounds().getNorthEast().lat();
      var ne_lng = map.getBounds().getNorthEast().lng();

      if(typeof ctaLayer !== 'undefined') {
            ctaLayer.setMap(null);
      }

      var ctaLayer = new google.maps.KmlLayer({
        url: 'http://example.com/my.kml?ne_lat=' + ne_lat + '&ne_lng=' + ne_lng,,
        preserveViewport: true
      });
      ctaLayer.setMap(map);

});