2012-07-22 138 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。