Marker auf der Karte verschieben

Ein schönes Wochenende an alle,

ich jetzt schon so einige Seiten durch aber leider noch nicht das gefunden was ich suche.

Ich würde gerne mit OSM mir eine Adresse mittels eines Markers anzeigen lassen und diesen dann bei Bedarf auch noch die Möglichkeit zu geben ihn neu oder besser zu Positionieren.

Das heißt er soll mir eine Adresse anzeigen und der User hat dann die Möglichkeit die Anzeige noch zu verfeinern weil er weiß wo die genaue Hausnummer liegt. Und dann am Ende habe ich die korrekten Kooridinaten zum Auslesen.

Hat da schon jemand Erfahrungen gesammelt oder eine Idee wie ich das umsetzten könnte?

Als Beispiele habe ich das mal bei Google Maps gefunden:

http://www.wolfpil.de/coords.html

http://code.google.com/intl/de-DE/apis/maps/documentation/examples/marker-drag.html

Freue mich auf Vorschläge und Anregungen

bis dahin

Mitch

Hi,

die Beispielseite von Openlayers ist immer ein guter Anlaufpunkt: http://openlayers.org/dev/examples/

Im Speziellen: http://openlayers.org/dev/examples/marker-shadow.html

Und hier der relevante Codeabschnitt:


            // Add a drag feature control to move features around.
            var dragFeature = new OpenLayers.Control.DragFeature(layer);
            
            map.addControl(dragFeature);
            
            dragFeature.activate();

Dragfeature hat auch Funktionszeiger, mit denen du die Ereignisse abfangen kannst: http://dev.openlayers.org/releases/OpenLayers-2.8/doc/apidocs/files/OpenLayers/Control/DragFeature-js.html

Viel Spaß!

Plasmon

Hallo,

ich habe mal ein wenig damit rumprobiert bin aber leider zu keinem Erfolg gekommen.

Ich habe das Problem mir die Marker anzeigen zu lassen. In meinen bisherigen Script lasse ich mir einen Marker anzeigen aber der hat eine feste Position vorgegeben.

Wie muss ich “OpenLayers.Control.DragFeature” in dieses Script einarbeiten?

Danke schonmal im voraus für die Hilfe

Mitch

Hi,

mich würde eine Lösung des Problems ebenfalls interessieren…

ich glaube nicht, dass du der DragFeature Klasse eine Marker Klasse übergeben kannst. Der Konstruktor von DragFeature verlangt einen Vektorlayer:
http://dev.openlayers.org/releases/OpenLayers-2.8/doc/apidocs/files/OpenLayers/Control/DragFeature-js.html

Ich hab’ mal etwas rumprobiert:


<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>OpenLayers: Vector Graphics with Shadows</title>
    <link rel="stylesheet" href="../theme/default/style.css" type="text/css" />
    <link rel="stylesheet" href="style.css" type="text/css" />

    <script src="../lib/OpenLayers.js" type="text/javascript"></script>
    <script type="text/javascript">
        
        var SHADOW_Z_INDEX = 10;
        var MARKER_Z_INDEX = 11;
        
  
        var objekt;
        var map, layer;   
        
        function init() {
            map = new OpenLayers.Map("map");
            
            layer = new OpenLayers.Layer.Vector(                                 //1.) layer
                "Marker Drop Shadows",                                        //2.) style für layer
                {
                    styleMap: new OpenLayers.StyleMap({
                        externalGraphic: "../img/marker-gold.png",
                        backgroundGraphic: "./marker_shadow.png",
     
                        backgroundXOffset: 0,
                        backgroundYOffset: -7,
                        
                        graphicZIndex: MARKER_Z_INDEX,
                        backgroundGraphicZIndex: SHADOW_Z_INDEX,
                        
                        pointRadius: 10
                    }),
                    isBaseLayer: false,
                    rendererOptions: {yOrdering: true}
                }
            );
                   var wmsLayer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
                    "http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'});
            map.addLayers([layer,wmsLayer]);                                    //3.)layer zu map hinzufügen
               map.addControl(new OpenLayers.Control.LayerSwitcher());
                map.addControl(new OpenLayers.Control.MousePosition());
            // Add a drag feature control to move features around.
            var dragFeature = new OpenLayers.Control.DragFeature(layer);                //4.) layer zu dragFeature
            
            map.addControl(dragFeature);
            
            dragFeature.activate();
                        
            map.zoomToMaxExtent();
            drawFeatures();
            
        }
        
        function drawFeatures() {
            
            layer.removeFeatures(layer.features);
            
            var center = map.getViewPortPxFromLonLat(map.getCenter());
            

                var pixel = new OpenLayers.Pixel(center.x , center.y );
                
                var lonLat = map.getLonLatFromViewPortPx(pixel);
              
                     feature=(new OpenLayers.Feature.Vector(
                        new OpenLayers.Geometry.Point(lonLat.lon, lonLat.lat)
                 
                ));
             
                     layer.addFeatures(feature);
                    
                    
            }
            
            
            function draw(){
                
                 feature.geometry.x=feature.geometry.x+3.0; // hier gewünschte Position übergeben
                 //feature.geometry.y=11; // hier gewünschte Position übergeben
                 layer.redraw();
            }
        
        
    </script>
  </head>
  <body onload="init()">

        <br>

        <table>
            <tr>
                <td>
                    <div id="map" class="smallmap"></div>
                </td>
            </tr>
            <tr>
                <td>
                    <button onclick="drawFeatures()">Redraw Features</button><br />
                     <button onclick="draw()">Verschieben</button>
                </td>
            </tr>
        </table>
        
        
    </body>
</html>

Man kann dem verschiebbaren Marker eine beliebge Position zuweisen. Marker wird dann auch korrekt verschoben, nur ein Problem gibt es:
Beim hineinzoomen verschwindet der Vektor-Marker plötzlich… weiß einer warum?

Grüße
M.Sirin

Hallo Mehmet,

also ich bekomme dir Karte nun bei mir zum Anzeigen nur leider ohne einen Marker.

In der Funktion draw() soll ich die Position übergeben, nur wie mache ich das?

Mitch