0

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

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

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

达伦

4

2 回答 2

0

快速浏览后,您的代码看起来比应有的复杂。

您在单击时手动将点推入点阵列,并使用这些点生成线串。

您不会听到使用虚拟顶点所做的任何更改。我不明白为什么,在您的 addWayPoint 函数中,您没有从图层而不是点数组中获取要素的几何形状。

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

于 2012-07-26T13:14:11.593 回答
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]);
        }
  }
}
于 2012-08-01T13:24:12.317 回答