6

我无法使用 Leaflet(0.7.7)/Leaflet.Draw(latest) 将我的 Layer 属性转换为 GEOJson 对象的属性。我的工作流程是:

1 创建地图:var map = L.map('#map', options);

2 创建功能组:features= new L.FeatureGroup();

3 添加到传单地图: map.addLayer(features);

4 在draw:created活动中,我正在捕获e.layer并添加一堆属性:

var layer = e.layer;

layer.properties = { Title: 'Hello' };

features.addLayer(layer);

geo_features = features.toGeoJSON();

但是,我geo_features在每个功能中总是有空的属性属性,我无法弄清楚!

4

3 回答 3

9

iH8最初的回答几乎是正确的。

要指定将出现在矢量图层的 GeoJSON 导出中的属性(即通过其.toGeoJSON()方法),您必须填充其feature.typefeature.properties成员:

var myVectorLayer = L.rectangle(...) // whatever

var feature = myVectorLayer.feature = myVectorLayer.feature || {};
feature.type = "Feature";
feature.properties = feature.properties || {};
feature.properties["Foo"] = "Bar";

现在myVectorLayer.toGeoJSON()返回一个有效的GeoJSON 特征对象,表示为:

{
  "type": "Feature",
  "properties": {
    "Foo": "Bar"
    // More properties that may be pre-filled.
  },
  "geometry": // The vector geometry
}
于 2016-03-05T20:37:28.017 回答
2

一种(一种丑陋的解决方法)是使用一个L.GeoJSON图层并使用它的addData方法将绘制的图层的 GeoJSON 添加到它。然后抓取L.GeoJSON图层_layers对象中的最后一层。此时该图层具有一个有效的 GeoJSONfeature属性,您可以对其进行编辑:

var geojson = new L.GeoJSON().addTo(map);

var drawControl = new L.Control.Draw({
    edit: {
        featureGroup: geojson
    }
}).addTo(map);

map.on('draw:created', function (e) {

    geojson.addData(e.layer.toGeoJSON());

    var layers = geojson._layers,
        keys = Object.keys(layers),
        key = keys[keys.length - 1],
        layer = layers[key];

    layer.feature.properties = {
        'Foo': 'Bar'
    };
});
于 2016-03-03T02:37:29.867 回答
0

对于您的 L.GeoJSON 调用,包括功能回调 onEachFeature 到选项

    L.GeoJSON(featureData,{onEachFeature:function(feature,layer){

 //console.log(feature,layer);
 // do something like 

 feature.setStyle( convertLayerOptionsFromFeatureProperties( feature.properties ) );

}} )
于 2020-11-29T02:59:46.453 回答