Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.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
Javascript KML图层渲染顺序谷歌地图_Javascript_Google Maps_Kml_Jak - Fatal编程技术网

Javascript KML图层渲染顺序谷歌地图

Javascript KML图层渲染顺序谷歌地图,javascript,google-maps,kml,jak,Javascript,Google Maps,Kml,Jak,我注意到以下API有一些不同的行为 <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script> 有时多边形层渲染气球层的顶部,有时则相反 似乎在浏览器中“缓存”贴图后,它将使用多边形层ontop进行渲染。有没有办法防止这种情况发生?还是让一层始终处于背景中?不幸的是,我无法在一个kml中映射这些层 我已经让它工作了 将以下两个参数添加到标记层: p

我注意到以下API有一些不同的行为

<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>

有时多边形层渲染气球层的顶部,有时则相反


似乎在浏览器中“缓存”贴图后,它将使用多边形层ontop进行渲染。有没有办法防止这种情况发生?还是让一层始终处于背景中?不幸的是,我无法在一个kml中映射这些层

我已经让它工作了

将以下两个参数添加到标记层:

pane: "floatPane",
preserveViewport: true
看起来是这样的:

var ctaLayer2 = new google.maps.KmlLayer({
    url: 'https://sites.google.com/site/gmaptest123/kml/HelloKml6.kml',
    pane: "floatPane",
    preserveViewport: true
});

我相信默认的是mapPane,它的z索引比floatPane低

层按从服务器接收的顺序渲染(不一定是它们在代码中出现的顺序)。在设置第二个的map属性之前,可以通过等待Kmlayer status_changed事件来强制一个接着一个加载

function initialize() {
  var chicago = new google.maps.LatLng(-122.365662,37.826988);
  var mapOptions = {
    zoom: 11,
    center: chicago
  }

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

  var ctaLayer = new google.maps.KmlLayer({
    url: 'https://sites.google.com/site/gmaptest123/kml/nst.kml'
  });
  google.maps.event.addListener(ctaLayer, "status_changed", function() {
    ctaLayer2.setMap(map);
  });
  ctaLayer.setMap(map);

  var ctaLayer2 = new google.maps.KmlLayer({
    url: 'https://sites.google.com/site/gmaptest123/kml/HelloKml6.kml'
  });
}
google.maps.event.addDomListener(window, 'load', initialize);

在这方面有一个有趣的方法。以下是实际订购代码:

// BEGIN SEQUENTIAL KML LOADING CODE
// This ensures the layers are drawn in order: cone, warnings, track

// Draw coneLayer
coneLayer.setMap(map);

// Listen for when coneLayer is drawn
var listener1 = google.maps.event.addListener(coneLayer, 'metadata_changed', function() {
  // When it's drawn (metadata changed), clear listener, draw warningsLayer ...
  google.maps.event.clearListeners(coneLayer, 'metadata_changed');
  warningsLayer.setMap(map);

  // .. and listen for when warningsLayer is drawn
  var listener2 = google.maps.event.addListener(warningsLayer, 'metadata_changed', function() {
    // When it's drawn, clear listener, draw trackLayer ...
    google.maps.event.clearListeners(warningsLayer, 'metadata_changed');
    trackLayer.setMap(map);

    // ... and listen for when trackLayer is drawn
    var listener3 = google.maps.event.addListener(trackLayer, 'metadata_changed', function() {
      // When it's drawn, clear listener and blank out the map-loading sign
      google.maps.event.clearListeners(trackLayer, 'metadata_changed');
      $('#loadingIndicator').html("");

    });

  });

});

// END SEQUENTIAL KML LOADING CODE

感谢您,在最初的测试中,似乎使标记呈现在前面。我需要看看API来了解发生了什么。谢谢你的努力。嘿,我很欣赏你的评论。然而,这似乎产生了同样的行为。看看我最新的小提琴。你不想要底部有多边形的图层吗?啊,是的。我意识到代码现在在做什么。我需要把我想要的渲染到最后!谢谢请注意,真正的解决方案是API提供对的相对控制,而不是控制添加层的顺序。是的,我同意。我看到了2010年谷歌的一个增强请求,但至今没有任何结果。我希望我能有更多的经验,这样我就可以投票支持你所有的评论……(你想方设法帮我的忙