OpenLayers ol-debug.js设置ol.js属性

时间:2018-12-12 08:40:12

标签: javascript openlayers openlayers-3

我使用过OpenLayers 4.1.1

我有一个用ol-debug.js编写的函数

我的目标是手动输入第一个坐标并简单地绘制线串。

ol.interaction.Draw.prototype.startDrawing_ = function (event) {
    var start = event.coordinate;
    this.finishCoordinate_ = start;
    if (1 == 1) {
        this.sketchCoords_ = [start.slice(), start.slice()];
    }
    console.log(this.sketchCoords_);
    var geometry = geometryFunction_(this.sketchCoords_);
    //console.log(geometry);
    this.sketchFeature_ = new ol.Feature();
    this.sketchFeature_.setGeometry(geometry);
    console.log(this.sketchFeature_)
    this.updateSketchFeatures_();
    this.dispatchEvent(new ol.interaction.Draw.Event("drawstart", this.sketchFeature_));
   }

我的ol-debug.js代码可以工作,但是我需要在项目中使用ol.js。 ol-js由于压缩而更改了这些属性的名称。我想在我的函数中更改这些属性,但是我还没有找到哪一个对应于哪个。如何找到与ol.js等效的ol-debug.js属性?

1 个答案:

答案 0 :(得分:1)

您可以使用feature.getId();来获取其ID,我忘记了它是否自动创建,如果没有(返回未定义或null),则可以设置它。 feature.setId();,如果我没记错的话。

也可以在创建它时进行分配。将其保存为全局值,然后将其与getFeatureByID一起使用(我不认为该函数的调用方式完全一样)。

var feature = new ol.Feature({
   geometry: new ol.geom.Point([0, 0]),
   id: id
});

如果您需要重置多个对象。您可以玩图层(清理所有图层,然后使用新元素在其上重画)。 顺便说一句:如果我没记错的话,您可能做得正确,但是在修改其中的某些特征后必须重新绘制图层,否则它仍会记住相同的几何形状。

因此,当您获得ID时,可以将其推入全局数组,然后重新使用它,这样您就知道哪个是哪个。

目前,我不确定您的事件在该函数上有什么作用(我想这是您的另一项功能。您可以将其打印出来,看看是否已经准备好使用它的ID。

要获取具有特定ID的元素,您应该yourLayer.getFeatureById(featureID).getGeometry().getCoordinates());

我在代码中对其进行了检查,似乎我是通过以下方式获得ID的:

var vmarkf = new OpenLayers.Feature.Vector(coords, null, style);
vmarkf.id;

所以我认为它是自动生成的,您实际上不需要自己进行设置。

我发现此功能是layer.getFeatureById(vmarkf.id));

有些人说您需要自己设置ID,在我看来,这不是真的,但请注意。

相关问题