Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
谷歌地图api javascript加载kml,设置缩放和中心_Javascript_Google Maps Api 3_Kml - Fatal编程技术网

谷歌地图api javascript加载kml,设置缩放和中心

谷歌地图api javascript加载kml,设置缩放和中心,javascript,google-maps-api-3,kml,Javascript,Google Maps Api 3,Kml,我正在根据用户交互加载4个不同的kml文件。使用以下代码加载KML时的默认操作: SW4KML = "http://kml.url" var sw4KmlLayer = new google.maps.KmlLayer({url: SW4KML}); sw4KmlLayer.setMap(map); 它将缩放到KML层的边界。我想要的是能够改变缩放为一个或两个更少,也移动地图的中心稍微向右 我已经使用了“preserveViewport:true” SW4KML = "http://kml.u

我正在根据用户交互加载4个不同的kml文件。使用以下代码加载KML时的默认操作:

SW4KML = "http://kml.url"
var sw4KmlLayer = new google.maps.KmlLayer({url: SW4KML});
sw4KmlLayer.setMap(map);
它将缩放到KML层的边界。我想要的是能够改变缩放为一个或两个更少,也移动地图的中心稍微向右

我已经使用了“preserveViewport:true”

SW4KML = "http://kml.url"
var sw4KmlLayer = new google.maps.KmlLayer({url: SW4KML, preserveViewport: true});
sw4KmlLayer.setMap(map);
但我还没有完全弄清楚如何从那里开始,我尝试将贴图选项更改为我想要的lat long和zoom,然后重新加载,但由于某种原因,我的kml层没有加载

如果过去有人不得不这样做,请告诉我你是如何做到的:)


谢谢

一种方法是使用Kmlayers的默认视口的并集

    var G = google.maps;
    var layers = [];

function computeBounds() {
  var bounds = new G.LatLngBounds();
  for (var i=0; i<layers.length;i++) {
    if (layers[i].getMap() != null) {
      if ((typeof bounds == "undefined") || bounds.isEmpty()) bounds = layers[i].getDefaultViewport();
      else bounds.union(layers[i].getDefaultViewport());
    }
  }
  if (!bounds.isEmpty()) map.fitBounds(bounds);
}

function toggle() {
  if (!this.kmlLayer ) {
    this.kmlLayer = new G.KmlLayer(
        'http://www.geocodezip.com/geoxml3_test/kmz/' + this.id + '.kmz',
        { preserveViewport:true } );
    this.kmlLayer.myId = layers.length;
    layers.push(this.kmlLayer);
    G.event.addListener(this.kmlLayer, "status_changed", function() {
      document.getElementById('status').innerHTML += this.url+':'+this.getStatus()+"<br>";
    });
    G.event.addListener(this.kmlLayer,"defaultviewport_changed", function() {
      this.bounds = this.getDefaultViewport();
      computeBounds();
    });
  }

  if ( this.kmlLayer.getMap() != null ) {
    this.kmlLayer.setMap( null );
  } else {
    this.kmlLayer.setMap( map );
  };
  computeBounds();
};

function initialize() {
  var layers = document.getElementsByTagName('input');
  var options = {
            center: new G.LatLng(34.9, 137.3),
            zoom: 10,
            mapTypeId: G.MapTypeId.TERRAIN,
            scaleControl: true,
            overviewMapControl: true,
            mapTypeControlOptions: {
              style:G.MapTypeControlStyle.DROPDOWN_MENU }
      };

  map = new G.Map(document.getElementById('map'), options);

  for (var i=0; i<layers.length; i++) {
    layers[i].type = 'checkbox';
    G.event.addDomListener(layers[i], 'click', toggle)
  };
};

G.event.addDomListener(window, 'load', initialize);
var G=google.maps;
var层=[];
函数computeBounds(){
var bounds=新的G.LatLngBounds();

对于(var i=0;iYou不应该重新加载地图,只需更改中心并缩放到您想要的位置。您的意思是这样吗?谢谢geocodezip,这看起来不错,但对我来说有点复杂,所以我会花一些时间来查看它。