2017-02-20 10 views
1

私は、Openlayers-3でラインストリングにポイントを挿入するスマートな方法を探しています。今日、完全なLineStringに沿って最も近い点を保存し、forEachSegmentでループを作成して最も近い点のセグメントを見つけ、このセグメントの開始点と終了点の間にポイントを挿入しました。最後に、新しいセクションを完全なLineStringのジオメトリに戻します。Openlayers 3 - 線のどこかにある線の中にポイントを挿入する

効果があります。しかし、よりスマートで短い解決策はありますか?

ありがとうございました&乾杯! 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

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); 
は、最初の行を忘れてしまった:cmpos = modifyfeatures.item(G).getGeometry()getClosestPoint(eventcoord)。 – Andreas

答えて

1

foreachsegmentが複数のセグメントを含む行で動作しないように見えます。私は今、このソリューションを使用する折れ線に複数の点をinseringため:

関連する問題