在传单中加载时将 ID 添加到 geojson 功能

Add ID to geojson feature on load in leaflet

我正在将 geojson 层加载到传单地图中。我想根据存储在 geojson 中的属性设置 svg 元素的 ID。

我假设我使用了 onEachFeature 函数,但我看不到如何在解析时设置功能的 ID。

如何分配元素的 ID?

可以,但不能使用L.GeoJSONonEachFeature方法。这是因为以下原因:

var geoJsonLayer = L.geoJson(null, {
    onEachFeature: function (feature, layer) {
        // At this point 'layer._path' exists in the layer object
        // but it will return as 'undefined' so this is of no use
        // So the following doesn't work:
        layer._path.id = 'feature-' + feature.properties.id
    }
});

但是,如果您使用 L.GeoJSON 中的 eachLayer 方法,layer._path 将 return 实际的 SVG 路径元素,但是它只会在 GeoJSON 层之后执行此操作被添加到地图中。如果您在将图层添加到地图之前执行此操作,layer._path 仍将 return 为 undefined。所以试试这个:

var geoJsonLayer = L.geoJson(data).addTo(map);

geoJsonLayer.eachLayer(function (layer) {
    layer._path.id = 'feature-' + layer.feature.properties.id;
});

这是一个关于 Plunker 的工作示例:http://plnkr.co/edit/7IPHrO?p=preview