Javascript OpenLayers 3-几何体集合为空

Javascript OpenLayers 3-几何体集合为空,javascript,gis,openlayers,openlayers-3,Javascript,Gis,Openlayers,Openlayers 3,我有一个关于用Ol_3写几何的问题 当我使用ol.interaction.Draw时,我注意到在编写特性时有一些奇怪的行为。使用上面提到的交互,我想添加向量(点、线串、多边形等),但在第一次尝试(或单击)时,我得到GEOMETRYCOLLECTION EMPTY,但当我第二次使用相同的命令时,我得到了所需的结果 有人能解释这种行为吗?如何避免 是否可以在第一次尝试/单击时获取几何图形 下面的示例代码段: var vector=新ol.layer.vector({ source:new ol.s

我有一个关于用Ol_3写几何的问题

当我使用
ol.interaction.Draw
时,我注意到在编写特性时有一些奇怪的行为。使用上面提到的交互,我想添加向量(点、线串、多边形等),但在第一次尝试(或单击)时,我得到
GEOMETRYCOLLECTION EMPTY
,但当我第二次使用相同的命令时,我得到了所需的结果 有人能解释这种行为吗?如何避免

是否可以在第一次尝试/单击时获取几何图形

下面的示例代码段:

var vector=新ol.layer.vector({
source:new ol.source.Vector(),
风格:新的ol风格({
图片:新ol.style.Circle({
半径:12,
填充:新的ol.style.fill()
})
})
});
var map=新ol.map({
图层:[
新ol.layer.Tile({
来源:new ol.source.OSM()
}),
矢量
],
目标:“地图”,
视图:新ol.view({
中心:[-11000000,4600000],
缩放:4
})
});
map.on('pointermove',函数(e){
如果(如拖动)返回;
变量
pixel=map.getEventPixel(例如OriginaleEvent),
hit=map.hasFeatureAtPixel(像素);
map.getTargetElement().style.cursor=hit'pointer':'';
});
变量按钮=$('#平移')。按钮('toggle');
var相互作用;
var特征=未定义;;
$('div.btn-group button')。在('click',函数(事件){
var id=event.target.id;
var特征;
var selectedFeatures=未定义;
按钮。按钮(“切换”);
按钮=$('#'+id).按钮('toggle');
映射。移除交互(交互);
开关(id){
案例“选择”:
document.getElementById(“导出”).innerHTML=“”;
交互=新建ol.interaction.Select();
映射。添加交互(交互);
features=interaction.getFeatures();
dragBoxInteraction=新建ol.interaction.DragBox({
条件:ol.events.condition.platformModifierOnly,
风格:新的ol风格({
笔划:新的ol风格笔划({
颜色:[12,25,25,4]
})
})
});
dragBoxInteraction.on('boxend',函数(事件){
selectedFeatures=interaction.getFeatures();
selectedFeatures.clear();
var extent=dragBoxInteraction.getGeometry().getExtent();
vector.getSource().forEachFeatureIntersectingExtent(范围,函数(特征){
选择功能。推送(功能);
});
});
地图添加交互作用(dragBoxInteraction);
打破
案例“要点”:
交互=新建ol.interaction.Draw({
键入:“点”,
来源:vector.getSource()
});
vector.getSource().on('addfeature',函数(e){
var source=e.target;
var writer=new ol.format.WKT();
if(vector.getSource().getState()=='ready'){
//https://gis.stackexchange.com/questions/179907/openlayers-3-geojson-save-and-load
var wkt=writer.writeFeatures(vector.getSource().getFeatures());
document.getElementById(“导出”).innerHTML=wkt;
}
});
映射。添加交互(交互);
打破
违约:
打破
}
var snap=新建ol.interaction.snap({
来源:vector.getSource()
});
映射添加交互(snap);
});


平底锅 挑选 指向
在将功能实际添加到源之前,会触发
抽屉事件。在
finishDrawing()
definition下记录了(不明显)

因此,为了让代码正常工作,您可以在源代码层而不是交互层上侦听事件

试着换一条线

vector.getSource().on('addfeature', function(e){


请注意,在第二次单击时,您将获得第一个点的坐标(因此打印输出总是在您刚才绘制的点后面一个点)@JGH是的,有人知道这是为什么吗?
vector.getSource().on('addfeature', function(e){