2017-02-20 127 views
1

我正在尋找一種智能的方式將點插入到具有Openlayers-3的LineString中。今天,我保存了沿着整個LineString的最近點,用forEachSegment創建一個循環來查找最近點的段,並在該段的開始和結束之間插入點。最後,我將新的部分放回到整個LineString的幾何圖形中。Openlayers 3 - 將一個點插入線路某處之間的LineString

它的工作。但任何更聰明,簡短的解決方案?

謝謝&乾杯! Andreas。

pp=modifyfeatures.item(g).getGeometry().forEachSegment(function (start, end){ 
waylinexy=new Array(); 
waylinexy.push(start); 
waylinexy.push(end); 
var segment = new ol.Feature({geometry:new ol.geom.LineString(waylinexy, 'XY')}); 
pp.push(start); 
if (segment.getGeometry().getClosestPoint(cmpos).toString()==cmpos.toString()){pp.push(cmpos); } 
pp.push(end); 
return pp; 
}); 
var ps = new ol.Feature({geometry:new ol.geom.LineString(pp, 'XY')}); 
modifyfeatures.item(g).getGeometry().setCoordinates(pp); 
+0

忘記第一行:。cmpos = modifyfeatures.item(克).getGeometry()getClosestPoint(eventcoord); – Andreas

回答

1

看起來像foreachsegment不適用於具有多個段的行。對於insering一個以上的點到線串我現在用這個解決方案:

p=new Array(); 
cmpos=modifyfeatures.item(g).getGeometry().getClosestPoint(eventcoord); 
linegeo=modifyfeatures.item(g).getGeometry().getCoordinates(); 
for (a=0;a<linegeo.length-1;a++) 
{ 
start=linegeo[a]; 
end=linegeo[a+1]; 
var segment = new ol.Feature({geometry:new ol.geom.LineString([start, end], 'XY')}); 
p.push(start); 
if (segment.getGeometry().getClosestPoint(cmpos).toString()==cmpos.toString()){p.push(cmpos); } 
p.push(end); 
} 
modifyfeatures.item(g).getGeometry().setCoordinates(p);