将 FeatureGroup 转换为 GeoJson 时,Leaflet Draw 不采用属性
Leaflet Draw not taking properties when converting FeatureGroup to GeoJson
我无法使用 Leaflet(0.7.7)/Leaflet.Draw(最新)将我的 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
在每个功能中总是有空的 属性 属性,我无法弄明白!
A(一种丑陋的解决方法)正在使用 L.GeoJSON
层并使用它的 addData
方法将绘制层的 GeoJSON 添加到它。然后抓取 L.GeoJSON
层的 _layers
对象中的最后一层。此时图层具有有效的 GeoJSON feature
属性 您可以编辑:
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'
};
});
iH8 的 initial answer 几乎正确。
要指定将出现在矢量图层的 GeoJSON 导出中的属性(即通过其 .toGeoJSON()
方法),您必须填写其 feature.type
和 feature.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()
returns 一个有效的 GeoJSON feature object 表示为:
{
"type": "Feature",
"properties": {
"Foo": "Bar"
// More properties that may be pre-filled.
},
"geometry": // The vector geometry
}
对于您的 L.GeoJSON 调用,将 onEachFeature 的功能回调包含到选项中
L.GeoJSON(featureData,{onEachFeature:function(feature,layer){
//console.log(feature,layer);
// do something like
feature.setStyle( convertLayerOptionsFromFeatureProperties( feature.properties ) );
}} )
我无法使用 Leaflet(0.7.7)/Leaflet.Draw(最新)将我的 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
在每个功能中总是有空的 属性 属性,我无法弄明白!
A(一种丑陋的解决方法)正在使用 L.GeoJSON
层并使用它的 addData
方法将绘制层的 GeoJSON 添加到它。然后抓取 L.GeoJSON
层的 _layers
对象中的最后一层。此时图层具有有效的 GeoJSON feature
属性 您可以编辑:
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'
};
});
iH8 的 initial answer 几乎正确。
要指定将出现在矢量图层的 GeoJSON 导出中的属性(即通过其 .toGeoJSON()
方法),您必须填写其 feature.type
和 feature.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()
returns 一个有效的 GeoJSON feature object 表示为:
{
"type": "Feature",
"properties": {
"Foo": "Bar"
// More properties that may be pre-filled.
},
"geometry": // The vector geometry
}
对于您的 L.GeoJSON 调用,将 onEachFeature 的功能回调包含到选项中
L.GeoJSON(featureData,{onEachFeature:function(feature,layer){
//console.log(feature,layer);
// do something like
feature.setStyle( convertLayerOptionsFromFeatureProperties( feature.properties ) );
}} )