如何使用openlayers 3/4点击功能后更新geojson多边形的属性?

时间:2018-04-10 03:12:26

标签: openlayers openlayers-3

我创建了我的geojson图层:

    var gjlayer = new ol.layer.Vector({
        title: 'My Layer',
        source: new ol.source.Vector({
            url: '/path-to-my-geojson-file',
            format: new ol.format.GeoJSON()
        })
    });

当我点击从gjlayer中绘制的多边形时,我改变了我想改变的属性:

    var feature = mc.map.forEachFeatureAtPixel(evt.pixel,
      function(feature, layer) {
        return feature;
      });
    if (feature) {
      feature.set('newproperty', 'new');
    };

问题是,这个'feature.set'似乎并没有真正改变gjlayer。如果我注销该功能并尝试将其设置为onclick它会根据属性更改颜色,它似乎可以工作,但问题是gjlayer中的相同多边形看起来保持不变...所以如果我清除地图和'redraw'gjlayer,造型和属性都没有。

我希望如果我清除了地图,并且“读取”了gjlayer,那么具有'newproperty'的功能就会出现。

2 个答案:

答案 0 :(得分:0)

你是什么意思,'清除地图',你创建一个新地图吗?据我所知,你的vectorlayer只在它添加到map-object期间保存信息。如果你要创建一个新的或者将vectorlayer附加/分离到mapobject,我想你会丢失这些信息。

更新:关于OP的评论:

//Get Current Features from old vector layer
var oldFeatures = oldVectorLayer.getSource().getFeatures();
//Create a new source and add oldFeatures to this source
var newVectorLayerSource = new ol.source.Vector({
    features: oldFeatures
 });
//create new vector layer and add new vector Source
var newVectorLayer = new ol.layer.Vector({
    source: newVectorLayerSource
});
//if your vectorlayer already exist you can use set Source,
//but the old source will be overwritten
alreadyExistingVectorLayer.setSource(newVectorLayerSource);
//If you want to add the feature to an existing source use:
alreadyExistingVectorLayer.getSource().addFeatures(oldFeatures)

要获得进一步的帮助,我需要更多信息,你想做什么:-) 我认为你的Vectorsource集合上有一些eventlistener可以更容易地保存你的问题。

答案 1 :(得分:0)

如果要保存对GeoJSON图层所做的更改,则需要使用WFS事务,可能需要MapServer或GeoServer。