【发布时间】:2015-07-29 17:40:01
【问题描述】:
我正在尝试创建可视化某些数据的交互式地图。
我在上面使用了传单地图和一个 topojson 图层。接下来,我尝试使用传单标签插件在每个 topojson 多边形上添加静态标签,即标签应该始终存在并且不应该对鼠标悬停事件做出反应。
我尝试使用noHide:true 实现bindLabel() 方法,但它似乎不起作用。因此,我实现了为这个问题Simple label on a leaflet (geojson) polygon 提供的解决方案。我成功添加了静态标签。
然后,我有一个函数可以在点击事件时删除一个 topojson 多边形。我应该只在删除特定多边形上的标签后才删除它,但我似乎无法实现。
这是我添加 topojson 层和标签的操作:
function addRegions(map) {
var regionLayer = new L.TopoJSON();
$.getJSON('region.topo.json').done(addRegionData);
function addRegionData(topoData) {
regionLayer.addData(topoData);
regionLayer.addTo(map);
regionLayer.eachLayer(addLabel);
regionLayer.eachLayer(handleLayer);
}
function handleLayer(layer) {
layer.on({
click: clickAction
});
}
// Here's the code for adding label
function addLabel(layer) {
var label = new L.Label();
label.setContent(layer.feature.properties.REGION);
label.setLatLng(layer.getBounds().getCenter());
map.showLabel(label);
}
// Here's the code that removes a polygon when it is clicked and retains the previously removed polygon
function clickAction(e) {
regionLayer.eachLayer(function(layer){
map.addLayer(layer);
});
var layer = e.target;
map.removeLayer(layer);
}
}
到目前为止,这段代码在点击时删除了topojson多边形,但标签仍然存在。
我必须删除已删除的特定多边形上的标签,但保留其他多边形上的标签。
另外,当另一个多边形被点击时,它应该被移除,但是之前移除的标签应该被保留,因为之前移除的多边形也被保留了。
我不能,因为我一生都在思考如何实现它。请帮我。
【问题讨论】:
-
执行您正在使用的 region 属性,因为您的标签对于每个功能都是唯一的,或者您的 topojson 中存在任何其他唯一属性,例如 ID .
-
标签除了坐标外没有任何唯一的ID。我在控制台检查,我不认为标签与任何 topojson 属性相关联
-
当然,标签不会有任何topojson属性,但topojson本身确实有像region这样的属性,它是唯一的还是任何其他topojson属性都是唯一的?
-
是的,topojson 确实具有独特的区域属性...但我不明白它与标签的关联方式,因为我在地图上添加了标签,而不是 topojson 层
-
好的,考虑到 region 属性是独一无二的,我发布了一种方法作为答案。试试看,祝你好运
标签: javascript jquery leaflet topojson