Leaflet Draw not taking properties when converting FeatureGroup to GeoJson

前端 未结 3 1219
没有蜡笔的小新
没有蜡笔的小新 2020-12-18 05:42

I\'m unable to convert my Layer properties into the properties of the GEOJson object using Leaflet(0.7.7)/Leaflet.Draw(latest). My workflow is:

1 Create Map: v

相关标签:
3条回答
  • 2020-12-18 06:14

    iH8's initial answer was almost correct.

    To specify properties that will appear in a vector layer's GeoJSON export (i.e. through its .toGeoJSON() method), you have to fill its feature.type and feature.properties members:

    var myVectorLayer = L.rectangle(...) // whatever
    
    var feature = myVectorLayer.feature = myVectorLayer.feature || {};
    feature.type = "Feature";
    feature.properties = feature.properties || {};
    feature.properties["Foo"] = "Bar";
    

    Now myVectorLayer.toGeoJSON() returns a valid GeoJSON feature object represented by:

    {
      "type": "Feature",
      "properties": {
        "Foo": "Bar"
        // More properties that may be pre-filled.
      },
      "geometry": // The vector geometry
    }
    
    0 讨论(0)
  • For your L.GeoJSON call include feature callback onEachFeature to options

        L.GeoJSON(featureData,{onEachFeature:function(feature,layer){
    
     //console.log(feature,layer);
     // do something like 
    
     feature.setStyle( convertLayerOptionsFromFeatureProperties( feature.properties ) );
    
    }} )
    
    0 讨论(0)
  • 2020-12-18 06:26

    A (kind of ugly workaround) is using a L.GeoJSON layer and add the drawn layer's GeoJSON to it by using it's addData method. Afterwards grab the last layer in the L.GeoJSON layer's _layers object. At that point the layer has a valid GeoJSON feature property you can edit:

    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'
        };
    });
    
    0 讨论(0)
提交回复
热议问题