Einzelne Punkte eines LineStrings markieren und verschieben

Hallo liebes Forum,

Dummerweise hatte ich diesen Thread bereits im englischen Forum gepostet.
Stephan75 hat mich freundlicherweise darauf hingewiesen.
Vielen Dank an dieser Stelle.

Nun zu meiner Frage:
Gibt es eine Möglichkeit, einen bereits vorhanden LineString zu editieren?

Dazu mein Pseudo-Code


var map = new OpenLayers.Map ("map");
vat vectorLayer = new OpenLayers.Layer.Vector("Overlay");

map.addLayer(vectorLayer);

var arrFeature = new Array();
var arrLineString = new OpenLayers.Geometry.LineString(arrPoints);
arrFeature.push(new OpenLayers.Feature.Vector(arrLineString,null,style));
vectorLayer.addFeatures(arrFeature);

Ich würde gerne einzelne Punkte des LineStrings mit der Maus markieren, und dann an einen neuen Ort verschieben.
Dass das ganze Feature mit “move” bewegt werden kann, das weiß ich.
Aber mir geht es wie gesagt um einzelne Punkte des LineStrings.
Ist das möglich?

Vielen Dank für Eure Hilfe

Gruß
Greaseball

OL.Draw Feature nimmt einen LineString und lässt Punkte verschieben, einfügen und löschen.

Wenn Du hier auf “Route ändern” klickst, landest Du im JavaScript in der Zeile 198, wo sich ein “editcontrol” das erste Feature seines Layers holt. Dieses Feature ist ein LineString. Dummerweise steige ich da gerade nicht so durch, wie das alles funktioniert, aber vielleicht helfen auch so die Stichworte OpenLayers.Control.DrawFeature und OpenLayers.Control.ModifyFeature …

Grüße, Max

Hallo Max,

vielen Dank für Deine super schnelle Antwort! :slight_smile:

OpenLayers.Control.ModifyFeature war genau das, was ich gesucht habe.

Für alle die es interessiert,
hier nun ein kurzer Pseudo-Code mit allen notwendigen Code-Fragmenten:

var map = new OpenLayers.Map ("map");
var vectorLayer = new OpenLayers.Layer.Vector("Overlay");
map.addLayer(vectorLayer);

var modifyControl = new OpenLayers.Control.ModifyFeature(vectorLayer, {standalone: true});                           // <== ModifyControl erzeugen
map.addControl(modifyControl);                                                                                       // <== ModifyControl zur Map hinzufügen

var arrFeature = new Array();
var arrLineString = new OpenLayers.Geometry.LineString(arrPoints);
arrFeature.push(new OpenLayers.Feature.Vector(arrLineString,null,style));
vectorLayer.addFeatures(arrFeature);

var bModify = true;
        
if(bModify)
{
   var Feature = vectorLayer.getFeatureById(arrFeature[0].id);
   modifyControl.selectFeature(Feature);                                                                             // <== Feature markieren ( hier der LineString )
   modifyControl.activate();                                                                                         // <== ModifyControl aktivieren
}
else
{
   var Feature = vectorLayer.getFeatureById(arrFeature[0].id);
   modifyControl.unselectFeature(Feature);                                                                           // <== Feature - Markierung aufheben
   modifyControl.deactivate();                                                                                       // <== ModifyControl deaktivieren
}


Also Max, nochmals vielen, vielen Dank für Deine Hilfe. :sunglasses:

Gruß
Andreas