我刚刚开始使用OpenLayers,并且遇到了一个小障碍 - 当我创建一个LineString然后尝试修改它时,我可以移动现有的顶点并拖动虚拟顶点以创建新的顶点。当我继续添加到该行时,仅保存对现有顶点的更改 - 将丢弃新顶点。我错过了什么吗?你可以看到我在这里谈论的一个例子:
http://dev.darrenhall.info/temp/open-layers/modify-feature/
单击以添加点,并使用点进行编辑,然后单击继续添加以查看我的意思。任何帮助,将不胜感激!谢谢!
的Darren
答案 0 :(得分:0)
快速查看之后,您的代码看起来比它应该更复杂。
您可以在点击时手动将点推入点阵列,并生成包含这些点的线串。
您不会听取虚拟顶点所做的任何更改。我不明白为什么在你的addWayPoint函数中,你没有从图层而不是点数组中获得特征的几何。
这可能是使用真实要素几何体并避免使用route.waypoints的良好开端。
答案 1 :(得分:0)
最后我决定不使用modifyFeature,而是使用矢量作为句柄并手动处理拖动和行修改。您可以在此处查看我的解决方法:
http://dev.darrenhall.info/temp/open-layers/draw-route
Ordnance Survey的工作人员为我的代码提供了一个(相当简单的)修复程序,虽然它在修改后从顶点重新填充了数组:
function addWayPoint(e) {
var position = osMap.getLonLatFromViewPortPx(e.xy);
if(route.waypoints.length>1) {
layers.lines.layer.removeFeatures([layers.lines.feature]);
}
/* vvvvvvvvvvv start */
/* Get the potentially modified feature */
if (modifyFeature.feature) {
route.waypoints = [];
var vertices = modifyFeature.feature.geometry.getVertices();
for (i = 0; i < vertices.length; i++) {
//console.log(vertices[i]);
route.waypoints.push(vertices[i]);
}
}
/* ^^^^^^^^^^^ end */
route.waypoints.push(new OpenLayers.Geometry.Point(position.lon, position.lat));
var string = new OpenLayers.Geometry.LineString(route.waypoints);
layers.lines.feature = new OpenLayers.Feature.Vector(string, null, styles.pink);
layers.lines.feature.attributes['id']=1;
layers.lines.layer.addFeatures([layers.lines.feature]);
for (i = 0; i < layers.lines.layer.features.length; i++) {
if (layers.lines.layer.features[i].attributes.id == 1) {
modifyFeature.selectFeature(layers.lines.layer.features[i]);
}
}
}