如何为geoJSON图层中的每个要素添加永久标签?

时间:2017-06-22 07:04:10

标签: leaflet

我有一些从数据库引入的geoJSON对象,并希望使用Leaflet在地图上显示它们。

由于我使用相同的样式图标/标记可以看到多个对象,因此我不知道哪个对象在此之前点击每个对象。 当我点击每个对象时,我有工作代码弹出一个包含完整信息的框。

我真正想要的是让每个带有标签的项目始终可见,以便我知道要点击哪一个以获取更多信息。

我可以从.bindTooltip方法看到如何获取固定标签,但是当我运行我的代码时,只有geoJSON文件中的第一个对象才能获得标签。

我无法找到任何做类似事情的人的例子 - 任何带有多个标签的地图都是通过手动创建的点创建的。

特别是代码段如下所示:



// This shows correct geoJSON name but shows fixed label only for 1 (first) geoJSON object!
function fixedLabel(layer) {
    return layer.feature.properties.name
};
	
function clickLabel (feature,layer) {
    layer.bindPopup("ID: " + feature.properties.id + "<br>Name: " + feature.properties.name + "<br>DateTime: " + feature.properties.vdatetime + "<br>Speed: " + feature.properties.speedknots + " knots<br>CMG: " + feature.properties.cmg + "°");
};
	
var vesselsLayer = L.geoJson(vessels,{
    onEachFeature: clickLabel
    })
    .addTo(map).bindTooltip(fixedLabel, {permanent: true, direction: 'right'}).openTooltip();
    map.fitBounds(vesselsLayer.getBounds());
&#13;
&#13;
&#13;

完整代码&amp; geoJSON代码在github中: https://github.com/DPB61/leafletjs_test01

我是否完全错误地在每个物体上贴标签?

1 个答案:

答案 0 :(得分:1)

您将工具提示绑定到GeoJSON图层,而不是绑定到其中包含的每个单独图层。尝试这样的事情:

L.geoJson(vessels,{
    onEachFeature: function (feature, layer) {
        layer.bindPopup("ID: " + feature.properties.id + "<br>Name: " + feature.properties.name + "<br>DateTime: " + feature.properties.vdatetime + "<br>Speed: " + feature.properties.speedknots + " knots<br>CMG: " + feature.properties.cmg + "°");
        layer.bindTooltip(feature.properties.name, {permanent: true, direction: 'right'}).openTooltip();
    }
}).addTo(map)