x

OpenLayers: PNG on Vector Layer


  1. OpenLayers: PNG on Vector Layer · c4yolli (Gast) · 11.06.2013 12:22 · [flux]

    Hallo,

    ich würde gerne dieses Beispiel (http://openlayers.org/dev/examples/drag-feature.html) so ändern, dass statt dem Punkt ein PNG-Bild plaziert werden kann.

    Ich habe es schon mit StyleMap versucht, aber das scheint nicht der richtige Weg zu sein. Bei einem Punkt werden mir dann zwar die Marker angezeigt, aber die anderen Elemente gehen dann nicht mehr.

    Ziel ist es, verschiedene Bilder UND Linien, Punkte, Polygone auf der Karte einzuzeichnen UND sie verschieben zu können. Wenn ich die Bilder im Marker Layer plaziere, habe ich ja nicht die "Drag"-Funktionalität, oder?

    Bin um jeden Tipp verlegen.

    Danke.

    var sMap = new OpenLayers.StyleMap({
    "default": {
    externalGraphic: 'http://www.openlayers.org/dev/img/marker.png',
    graphicWidth: 30,
    graphicHeight: 30
    }
    });

    vectors = new OpenLayers.Layer.Vector("Vector Layer", {styleMap: sMap});
    map.addLayer(vectors);


    • Re: OpenLayers: PNG on Vector Layer · c4yolli (Gast) · 11.06.2013 14:47 · [flux]

      Ich habe es jetzt versucht, indem ich per handlerOptions einen eigenen Style übergebe. Nur greift das irgendwie nicht.

      var myStyle = new OpenLayers.StyleMap({
      strokeColor: "blue",
      strokeOpacity: "0.7",
      strokeWidth: 2,
      fillColor: "blue",
      pointRadius: 3,
      cursor: "pointer"
      });

      controls = {
      point: new OpenLayers.Control.DrawFeature(vectors, OpenLayers.Handler.Point, {handlerOptions: {style: myStyle}}),
      line: new OpenLayers.Control.DrawFeature(vectors,
      OpenLayers.Handler.Path),
      polygon: new OpenLayers.Control.DrawFeature(vectors,
      OpenLayers.Handler.Polygon),
      drag: new OpenLayers.Control.DragFeature(vectors)
      };


    • Re: OpenLayers: PNG on Vector Layer · wambacher (Gast) · 11.06.2013 15:08 · [flux]

      erstmal herzlich willkommen im Forum!

      Du hast hier ein OL-Problem, das wohl die wenigsten von uns hier klären können. Dazu ist es ein wenig zu speziell.
      Ich würde es mal direkt bei OL versuchen:

      http://trac.osgeo.org/openlayers/wiki/MailingLists

      wenn es dann zu Openstreetmap-Problemen kommen sollte, können wir sicher weiterhelfen.

      Gruss
      walter

      p.s. soll kein "Rausschmiss" sein, aber ich bin wirklich skeptisch ob dir hier jemand schnell weiterhelfen kann. geht schon verdammt tief an die OL-Substanz ran. 1-2 Super-OL-User haben wir schon, aber das kann dauern.


    • Re: OpenLayers: PNG on Vector Layer · mmd (Gast) · 11.06.2013 15:55 · [flux]

      Hallo,

      nimm mal das hier als Beispiel: http://openlayers.org/dev/examples/sele … layer.html

      und füge am Ende von function init(), also kurz vor dem createFeature folgendes ein:

      		var␣d1␣=␣new␣OpenLayers.Control.DragFeature(vectors1);
      var␣d2␣=␣new␣OpenLayers.Control.DragFeature(vectors2);
      map.addControl(d1);
      map.addControl(d2);
      d1.activate();
      d2.activate();
      

      Dann kannst Du das sowohl png Image als auch die Vector features in der Gegend hin und her schieben.

      hth


    • Re: OpenLayers: PNG on Vector Layer · Oranger Assistent (Gast) · 11.06.2013 19:09 · [flux]

      Tach.

      c4yolli wrote:

      ich würde gerne dieses Beispiel (http://openlayers.org/dev/examples/drag-feature.html) so ändern, dass statt dem Punkt ein PNG-Bild plaziert werden kann.

      Die DrawFeature des Original-OpenLayers benutzen das Styling des (gemeinsamen) LayerVector.

      Nach einem kleinen Patch kann man jedem DrawFeature einen eigenen Style vergeben.

      Orange Grüße
      Der Assistent


    • Re: OpenLayers: PNG on Vector Layer · mmd (Gast) · 11.06.2013 19:31 · [flux]

      Hallo,

      ich habe mein Beispiel mal online gestellt: http://maxheight.bplaced.net/demo.html

      Wahrscheinlich muss der OP die Lösungen von Wolf's Assistent und meinem Ansatz (mit 2 Layern) kombinieren, wenn

      Bilder UND Linien, Punkte, Polygone

      gezeichnet werden / verschiebbar sein sollen. YMMV.

      Ah, ich sehe gerade, dass Wolf aus

      drawFeature: function(geometry) {
      var feature = new OpenLayers.Feature.Vector(geometry);

      ein
      drawFeature: function(geometry) {
      var feature=new OpenLayers.Feature.Vector(geometry, null, this.style);

      gemacht hat in OpenLayers.Control.DrawFeature) Damit spart man sich auch das Rumgehampele mit 2 layern und kann jedem Feature unterjubeln was man will 😎

      Ohne Patch müsste man wahrscheinlich dennoch zu 2 Layern + Templates greifen und die Features in Abhängigkeit von irgendwelchen Eigenschaften dynamisch stylen (Beispiel: http://openlayers.org/dev/examples/styles-context.html). Ich glaube, es gab da irgendein Problem mit den Kontexten, wenn man in einem Layer Bilder + Vektor-Features gemeinsam nutzen wollte, daher der 2. Layer. Kann sein, dass ich das aber falsch in Erinnerung habe, dunno.


    • Re: OpenLayers: PNG on Vector Layer · c4yolli (Gast) · 17.06.2013 06:58 · [flux]

      Hallo,

      ich möchte nicht vergessen, mich für die Hilfe zu bedanken. Der Patch von Oranger Assistent funktioniert super.

      Gruß
      c4yolli