如何修改或删除一些现有的数据在GeoJSON传单对象
How to modify or remove some existing data in GeoJSON Leaflet object?
最近我询问了关于引用现有GeoJSON传单对象的数据的问题。我的传单地图由数据流传入我的GeoJSON传单对象。用户输入可以更改GeoJSON数据的过滤器,因此为了使过滤器应用于现有和新数据,我在一个名为myFeatures
的数组中跟踪我的数据。每当过滤器更改或myFeatures
中的项更改时,我执行以下操作:
myGeoJson.clearLayers();
myGeoJson.addData(myFeatures);
这是根据新更新的特征数据或过滤器的变化使我的地图更新。
当我初始化GeoJSON对象时,我正在应用弹出窗口到GeoJSON对象:
var myGeoJson = L.geoJson(myFeatures, {
style: function(feature) {
...
},
pointToLayer: function(feature, latlng) {
return L.circleMarker(latlng, geojsonMarkerOptions);
},
filter: function(feature, layer) {
...
},
onEachFeature: function(feature, layer) {
if (feature.properties && feature.properties.popupContent) {
layer.bindPopup(feature.properties.popupContent);
}
}
});
当我点击一个单独的功能,弹出窗口出现。然而,由于clearLayers
和addData
被调用,弹出窗口很快就消失了。(
在这种情况下,有什么方法可以阻止弹出窗口消失吗?
或者-更好的问题-是否有一种方法来修改GeoJSON对象中的现有数据或从GeoJSON对象中删除一些(不是全部)数据?
为了提供一些上下文,我的GeoJSON显示了每个特性的圆形标记。圆形标记根据特征的属性着色。该属性实际上可以随着时间的推移而改变,因此需要更新标记的样式。一个标记也会在一段时间后超时,需要从地图上删除,但其他标记需要留在地图上。
当然有更好的方法来做到这一点,但是如果你不想过多地修改你的代码架构,你可以在一个特定的层中创建你的弹出窗口,当你添加新数据时,你不会清除它。
给你一个想法(在你的例子中,标记在myGeoJson的作用下面):
var popup_id = {};
var popup_layer = new L.layerGroup();
var markers = new L.layerGroup();
$.each(testData, function(index, p) {
var marker = L.marker(L.latLng(p.lat, p.lon));
markers.addLayer(marker);
popup = new L.popup({offset: new L.Point(0, -30)});
popup.setLatLng(L.latLng(p.lat, p.lon));
popup.setContent(p.text);
popup_id[p.id] = popup;
marker.on('click', function() {
popup_id[p.id].openPopup();
popup_layer.addLayer(popup_id[p.id]);
markers.clearLayers();
})
});
popup_layer.addTo(map);
markers.addTo(map);
您还可以在字典popup_id中跟踪所有弹出窗口。由于您还没有为我们提供JSfiddle,因此很难为您的情况找到完美的答案,但我希望弹出层(也在我的小提琴中)给您一个好的方向。
相关文章:
- 无法读取数据“;对象名称“;未定义的角度方向
- 将表单对象保存到具有主干.js的模型
- j查询设置中的数据表对象
- 使用 ng-repeat解析不均匀数据/ json对象
- 从JQuery到Javascript函数获取表单对象
- d3.js强制可折叠图-输入数据是对象数组
- AngularFire $createUser 的承诺不返回包含用户数据的对象
- 如何创建 XMLHttpRequest FormData 表单对象
- 当我尝试打印到文本区域字段中时,数据被[对象节点列表]替换
- 转换使用 data() 保存的字符串表单对象
- AngularJS 模态对话框表单对象在控制器中未定义
- “blur”事件是否仅针对 HTML 表单对象触发
- 使用从 MongoDB 获取的新数据更新对象属性
- 弹簧更改提交,表单对象为空
- Spring:在服务器和客户端之间传递数据(Java对象到JS对象)
- Jqtransform 针对特定的表单对象(不是全部)
- 如何在angularjs DELETE请求中将数据作为对象发送
- 数据表对象在函数中不可用
- 检索数据表对象原型
- AngularJS验证引用具有变量名称的表单对象