如何获取几个kml文件的边界? 我可以轻松获得一个kml文件,但是我有点迷路了...获取地图中所有kml文件的边界...
这是代码(在php文件上下文中写)
首先,我定义所需的kml文件以及源和图层的js var(即src_expe_pro0 expe_pro0 ...)
$pro_kml .= '
var src_expe_pro'.$j.' =new ol.source.Vector({
url: "http://www.grottes-et-karsts-de-chine.org/gkc_kml_file/pro_kml_file/'.strtolower($pro_id).'.kml",
format: new ol.format.KML()
});
var expe_pro'.$j.' = new ol.layer.Vector({
source:src_expe_pro'.$j.'
});';
$layers_pro_kml .= "expe_pro".$j.",
";
后来我将其放在地图中(因此$ layers_pro_kml可以是一层或多层)
...
layers: [
fond_carte,
'.$layers_pro_kml.'
expe_markers
],
...
雾来了... 现在,我只是使用这个以第一个kml层为界的人
expe_pro0.once("change", function(e){
var extension = src_expe_pro0.getExtent();
map.getView().fit(extension);
});
所以实际上问题是如何处理数组(扩展名)以减少一个数组,我们将为我提供所有kml层的边界? api中是否有功能?或者我必须使用数组吗?还是一个简单的方法?
任何建议
谢谢
在迈克的建议下(谢谢),我完美地使用了它。
var extension = ol.extent.createEmpty();
map.getLayers().forEach(function(layer){
if(!layer.values_.id) {
layer.once("change", function(e){
ol.extent.extend(extension, layer.getSource().getExtent());
map.getView().fit(extension);
});
}
});
答案 0 :(得分:1)
尝试类似这样的方法。源可能以任何顺序加载,因此在每次加载时重新装配最简单。
// before opening map set listeners for vectors loading
// and use extents to fit the map
var extension = ol.extent.createEmpty();
[
fond_carte,
'.$layers_pro_kml.'
expe_markers
].forEach(function(layer) {
if (layer.getSource().getExtent) {
layer.getSource().on("addfeature", function(e){
ol.extent.extend(extension, layer.getSource().getExtent());
map.getView().fit(extension);
});
}
});
// then open the map to load the vectors
map.setView(
new ol.View({
center: [0,0],
zoom: 0
})
);