2017-02-20 2 views
1

나는 Openlayers - 3와 함께 라인 스트링에 포인트를 삽입하는 현명한 방법을 찾고 있어요. 오늘, 전체 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 (g) .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);