在具有递增的变量/对象中存储和控制传单 GeoJSON 图层
Stock and control Leaflet GeoJSON layers in a variable/object with incrementation
在这个问题之后,我尝试使用 javascript 循环将 geoJson 图层存储在变量中,然后通过图层控制面板在地图上使用它们。这是我的代码:
myURL = [
"http://localhost:8080/geoserver/jonquiere_local/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=jonquiere_local:buildings_phase1&maxFeatures=400&outputFormat=json",
"http://localhost:8080/geoserver/jonquiere_local/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=jonquiere_local:buildings_phase2&maxFeatures=400&outputFormat=json",
"http://localhost:8080/geoserver/jonquiere_local/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=jonquiere_local:scenario1&maxFeatures=400&outputFormat=json"
];
lc = new L.control.layers();
for (i = 0; i < myURL.length; i++) {
var scenario_json = {};
$.getJSON(myURL[i], function (data) {
scenario_json[i++] = new L.GeoJSON(data).addTo(map);
}).done(function () {
console.log('$.getJSON Done!');
}).fail(function () {
console.log('$.getJSON Fail!');
});
lc.addOverlay(scenario_json, "Layer " + i);
};
lc.addTo(map);
(问题 #1):由此产生的scenario_json
变量增量不正确。GeoJSON 图层存放在scenario_json[3]
、scenario_json[4]
和scenario_json[5]
中,我不知道为什么。
(问题#2):我正在尝试使3层可由层控制器独立选择。图层控制按钮出现在地图上,但如果我将鼠标悬停在它上面,它会消失并且不显示任何图层,同样,我不知道为什么。
有人知道吗?
多谢
解决方案 1:所有三个请求(几乎)立即触发。当第一个请求实际解析时,i
变量保存迭代的最后一个值:3
。解决方案,不要使用对象而是使用数组,它将为您处理计数。
for (var i = 0; i < myURL.length; i++) {
var scenario_json = [];
$.getJSON(myURL[i], function (data) {
scenario_json.push(new L.GeoJSON(data).addTo(map));
});
};
问题 2:您忘记使用 addTo
L.Control.Layers
方法,该方法实际上添加了控件 map: new L.Control.Layers().addTo(map);
此外,您需要在 $.getJSON
的回调中调用 addOverlay
,因此一旦层准备就绪,它就会被执行,现在在您的请求被解析之前立即调用它:
var lc = new L.Control.Layers().addTo(map);
for (var i = 0; i < myURL.length; i++) {
var scenario_json = [];
$.getJSON(myURL[i], function (data) {
var layer = new L.GeoJSON(data).addTo(map);
scenario_json.push(layer);
lc.addOverlay(layer, 'Layer ' + scenario_json.length);
});
};
关于 Plunker 的完整解决方案:http://plnkr.co/edit/M1CxWoyHUjc85zRpmtsS?p=preview
在旁注上。使用 var
关键字声明变量被认为是最佳做法。目前你没有这样做是为了myURL
,lc
和i
相关文章:
- JS编译器/包管理器,用于版本控制
- 将作用域存储在JSON中
- 使用javascript存储变量的最安全方式
- 当图像转换为本地存储的DataURL时,EXIF被删除
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- 是否可以控制获取哪些Google地图脚本(JavaScript API)
- 如何有效地将游戏数据存储在URL查询字符串中
- Ember.js-接口状态应该存储在哪里
- 三星智能电视应用程序;Brightcove示例应用程序远程控制问题
- 如何解雇“;铁局部存储负载”;事件
- 本地存储中的字符串到字节数组转换
- 从jQuery调用存储在Variable中的函数
- 推荐在JavaScript中执行存储为字符串的函数,而不是使用eval
- 如何控制组件'的createContent函数被激发
- Azure Blob 存储 请求的资源错误中不存在访问控制允许源标头
- 如何验证“缓存控制”、“无缓存、无存储、必须重新验证”
- 在具有递增的变量/对象中存储和控制传单 GeoJSON 图层
- 为什么存储在Object中的函数在运行结束时在控制台中返回undefined ?
- 用javascript解析文本并将其存储在画布中(就像在控制台中)
- 是否可以将dgrid的值存储在某个变量中或在控制台中打印