我使用过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属性?
答案 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,在我看来,这不是真的,但请注意。