x

Einzelne Punkte eines LineStrings markieren und verschieben


  1. Einzelne Punkte eines LineStrings markieren und verschieben · Greaseball (Gast) · 23.01.2014 19:42 · [flux]

    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


    • Re: Einzelne Punkte eines LineStrings markieren und verschieben · maxbe (Gast) · 23.01.2014 20:54 · [flux]

      Greaseball wrote:

      Gibt es eine Möglichkeit, einen bereits vorhanden LineString zu editieren?
      l

      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


    • Re: Einzelne Punkte eines LineStrings markieren und verschieben · Greaseball (Gast) · 23.01.2014 23:36 · [flux]

      Hallo Max,

      vielen Dank für Deine super schnelle Antwort! 🙂

      maxbe wrote:

      ......aber vielleicht helfen auch so die Stichworte OpenLayers.Control.DrawFeature und OpenLayers.Control.ModifyFeature ...

      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. 😎

      Gruß
      Andreas