OpenLayers ModifyFeature未保存新顶点

OpenLayers ModifyFeature not saving new vertices

本文关键字:顶点 新顶点 ModifyFeature 保存 OpenLayers      更新时间:2024-01-26

我刚刚开始使用OpenLayers,遇到了一个小问题——当我创建LineString并尝试修改它时,我可以移动现有顶点并拖动虚拟顶点来创建新的顶点。但是,当我继续添加到线中时,只保存对现有顶点的更改——丢弃新的顶点。我是不是错过了什么?你可以看到我在这里谈论的一个例子:

http://dev.darrenhall.info/temp/open-layers/modify-feature/

单击添加点,并使用点进行编辑,然后单击继续添加以了解我的意思。任何帮助都将不胜感激!谢谢

Darren

快速查看后,您的代码看起来比应该的更复杂。

您可以在单击时手动将点推入点的数组,并用这些点生成一个行字符串。

您不会听到对虚拟顶点所做的任何更改。我不明白为什么在你的addWayPoint函数中,你没有从层而不是你的点数组中获得特征的几何体。

也许这将是一个使用真实特征几何体并避免使用route.waypoints的好开始。

最后我决定不使用modifyFeature,而是使用向量作为句柄,手动处理拖动和线条修改。你可以在这里看到我的变通方法:

http://dev.darrenhall.info/temp/open-layers/draw-route

军械调查局的人为我的代码做了一个(相当简单)的修复,尽管修改后从顶点重新填充数组:

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]);
        }
  }
}