【发布时间】:2016-05-07 07:54:19
【问题描述】:
我有一组通过运行此代码获得的 GeoJSON 层:
var myURL = [ "url1", "url2", "url3" ];
for (var i = 0; i < myURL.length; i++) {
var scenario_json = [];
$.getJSON(myURL[i], function (data) {
var layer= new L.GeoJSON(data);
scenario_json.push(layer);
});
};
我想将此数组与Leaflet addon Panel Layers 一起使用。我想调用存储在数组中的每个 GeoJSON 图层并将它们添加到面板中的一组图层中。这是我的代码:
osmLayer = new L.TileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png');
esriLayer = new L.tileLayer('http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', {
attribution: 'Tiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community',
maxZoom: 17
});
var baseLayers = [
{
name: "OpenStreetMap",
layer: osmLayer
},
{
name: "Esri World Imagery",
layer: esriLayer
}
];
var overLayers = [
{
group: "Modelisation results",
layers: [
{
name: "Scenario 1",
icon: '<i class="icon icon-modelisation"></i>',
layer: scenario_json[1]
},
{
name: "Scenario 2",
icon: '<i class="icon icon-modelisation"></i>',
layer: scenario_json[2]
},
{
name: "Scenario 3",
icon: '<i class="icon icon-modelisation"></i>',
layer: scenario_json[3]
}
]
}
];
var panelLayers = new L.Control.PanelLayers(baseLayers, overLayers);
var map = L.map('map').setView([48.42432,-71.16237], 14);
map.addLayer(osmLayer);
map.addControl(panelLayers);
如果我使用L.tilelayer.WMS 变量而不是scenario_json[x],它可以正常工作,但我无法让它与数组一起使用,我不断收到scenario_json is not defined。
谁有办法?
【问题讨论】:
-
请编辑问题并添加相关/完整代码(包括您的插件的初始化),以便我们了解您执行操作的顺序。
-
我编辑了问题
-
在数组中调用
$.getJSON之后是否设置overLayers?getJSON是异步的,如果你想使用它的响应数据,你应该在它的回调中这样做。 -
我不确定如何在我的示例中使用回调。理解异步的概念,但是不知道回调函数里面放什么,放哪里。
标签: javascript jquery leaflet panel openlayers