OpenLayers ModifyFeature不保存新顶点

时间:2012-07-22 18:50:25

标签: javascript gis openlayers

我刚刚开始使用OpenLayers,并且遇到了一个小障碍 - 当我创建一个LineString然后尝试修改它时,我可以移动现有的顶点并拖动虚拟顶点以创建新的顶点。当我继续添加到该行时,仅保存对现有顶点的更改 - 将丢弃新顶点。我错过了什么吗?你可以看到我在这里谈论的一个例子:

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

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

的Darren

2 个答案:

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