2012-07-22 135 views
0

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

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

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

达伦

回答

0

最后,我决定不使用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]); 
     } 
    } 
} 
0

快速浏览后,你的代码看起来复杂得多,它应该是。

您可以手动将点推入点的数组中,然后使用这些点生成线串。

你不听任何用虚拟顶点做的改变。我不明白为什么,在你的addWayPoint函数中,你没有从图层中获取特征的几何图形,而不是你的点数组。

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