2017-02-20 12 views
1

Я ищу умный способ вставить точку в LineString с Openlayers-3. Сегодня я сохранил ближайшую точку вдоль полной строки LineString, сделал цикл с forEachSegment, чтобы найти сегмент ближайшей точки и вставить точку между началом и концом этого сегмента. Наконец, я возвращаю новый раздел в геометрию полного LineString.Openlayers 3 - Вставить точку в LineString между чем-то вдоль линии

Это работает. Но любое умное, короткое решение?

Thanks & Cheers! Андреас.

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 более одной точки в LineString я использовать это решение в настоящее время:

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);