GoogleMaps GLatLng Werte oder Koordinaten eines Markers auslesen

hugo1981

Erfahrenes Mitglied
hallo @ll,

ich hänge schon wieder an GoogleMaps fest.
Ich füge über einen geocoder ein Marker auf der Map ein. Z.B München,
nun will ich es schaffen, dass wenn dieser Marker verschoben/gedragged wird die neuen Lat/Lon werte ein ein Formularfeld übergeben werden.

Nachdem die Map geladen ist, wird die Funktion showLocation() aufgerufen, um den Marker an entsprechender Stelle einzuzeichnen.

DasEvent wird zwar gefeuert, aber ich weiss jetzt nicht, wie ich die neuen LatLng Werte auslesen (bzw. wenn nötig davor neusetzen) kann.'*grübel* Wichtiger part hervorgehoben.
Code:
<script type="text/javascript">
//<![CDATA[
  

    var map;
    var geocoder;
	// red marker icon
	var icon = new GIcon();
	icon.image = "http://labs.google.com/ridefinder/images/mm_20_blue.png";
	icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
	icon.iconSize = new GSize(12, 20);
	icon.shadowSize = new GSize(22, 20);
	icon.iconAnchor = new GPoint(6, 20);
	//icon.infoWindowAnchor = new GPoint(5, 1);
	var marker=[];
	var point=[];	
	var line=null;
	var n=0;


function load() {
 if (GBrowserIsCompatible()) {
	 map = new GMap2(document.getElementById("map"));
	
	map.setCenter(new GLatLng(48.143411,11.580276), 13);
	//map.setZoom(13);
	map.mapControl = new GMapTypeControl();
	
	//map.addControl(new GMapTypeControl(1));
	map.addControl(new GLargeMapControl());
	map.addControl(new GScaleControl());
	map.setMapType(G_HYBRID_MAP);
    geocoder = new GClientGeocoder();
	
}
    }
 // addAddressToMap() is called when the geocoder returns an
    // answer.  It adds a marker to the map with an open info window
    // showing the nicely formatted version of the address and the country code.
    function addAddressToMap(response) {
      map.clearOverlays();
	
      if (!response || response.Status.code != 200) {
        alert("Sorry, we were unable to geocode that address");
	load();
      } else {

        place = response.Placemark[0];
        point[n] = new GLatLng(place.Point.coordinates[1],
                            place.Point.coordinates[0]);
	GUnload();
 	map = new GMap2(document.getElementById("map"));
	start =new GLatLng(place.Point.coordinates[1],	
                            place.Point.coordinates[0]);
	map.setCenter(start, 13);
	map.addControl(new GMapTypeControl(1));
	map.addControl(new GLargeMapControl());
	map.addControl(new GScaleControl());
        marker[n] = new GMarker(point[n], {icon:icon, draggable: true});
	//marker[n].disableDragging();
	
        map.addOverlay(marker[n]);
		
		GEvent.addListener(marker[0],"dragend",function(){
	//alert("dragend 0 bei addadress gefeuert");
	//alert(marker[0].coordinates[1];);
	
            point[0] = new GLatLng(marker[0].getPoint);
	document.forms[1].lon.value=point[0].coordinates[1];
            document.forms[1].lat.value=point[0].coordinates[0];
 
	//draw()
	});
		//alert(n);
	n++;

 document.forms[1].lon.value=place.Point.coordinates[1];
 document.forms[1].lat.value=place.Point.coordinates[0];

      }
    }
  // showLocation() is called when you click on the Search button
    // in the form.  It geocodes the address entered into the form
    // and adds a marker to the map at that location.
    function showLocation() {
	marker=[];
	point=[];
	line=null;
	n=0;
      var address = document.forms[0].q.value;
      geocoder.getLocations(address, addAddressToMap);
    }

   // findLocation() is used to enter the sample addresses into the form.
    function findLocation(address) {
      document.forms[0].q.value = address;
      showLocation();
    }

    //]]>
    </script>

Vielen Dank für Hilfe im Voraus.. :)

lg,
hugo
 
Zuletzt bearbeitet:
Die Methode dafür hast du ja schon gefunden(getPoint() bzw. getLatLng()).

Du musst damit kein neues GLatLng-Objekt erzeugen, das gibt dir bereits Eines zurück, du musst nur dessen lat()-bzw. lng()-Methode aufrufen, um die Werte zu Ermitteln:
Code:
marker[0].getPoint().lat()//Latitude
marker[0].getPoint().lng()//Longitude
 
Super. Vielen lieben Dank. :)
Bin auf den richtigen Abschluss nicht gekommen.

Merci :D

anbei die funtionierende Funktion:
Code:
GEvent.addListener(marker[0],"dragend",function(){
	
	
	 document.forms[1].lon.value=marker[0].getPoint().lng();
             document.forms[1].lat.value=marker[0].getPoint().lat();
 
	});
 
Hallo Leute,

habe dazu noch eine Frage. Wir haben jetzt hier nun den Breiten- und Längengrad, aber wie kann ich nach einem drag&drop auch noch die adresse an diesem Punkt auslesen?
Ist es mit dem marker hier möglich?

Gruß
batok
 
Danke Sven für die Antwort,

aber das war mir schon klar, dass dies mit reverse geocoding gemacht werden soll.
Meine Frage lautet aber, wenn ich einen Punkt habe, bzw. einen Marker habe den ich verschieben kann, ist es möglich dabei die Adresse rauszufischen. Hier kurz der Code:

Code:
    function showLocation() {
        address = document.forms[0].GeographicalPlaces.value;
        map = new GMap2(document.getElementById("map_canvas"));
            geocoder.getLatLng(address,
            function(point) {
                if (!point) {
                    alert(address + " wurde nicht gefunden");
                    initialize();
                } 
                else {
                    document.getElementById('frmLat').value=point.lat();
                    document.getElementById('frmLon').value=point.lng();
                    map.setCenter(point,15);
                    map.addControl(new GLargeMapControl());
                    map.addControl(new GMenuMapTypeControl());   
                    map.enableScrollWheelZoom();
                    var marker = new GMarker(point, {draggable: true}); 
                    map.addOverlay(marker);
                    marker.openInfoWindowHtml(address);
                    GEvent.addListener(marker, "dragstart", function() {
                      map.closeInfoWindow();
                    });
                    GEvent.addListener(marker, "dragend", function() {
                        document.getElementById('frmLat').value = marker.getPoint().lat().toFixed(6);
                        document.getElementById('frmLon').value = marker.getPoint().lng().toFixed(6);
                        //document.getElementById('frmOrt').value = marker.address;  ?   <---- WOBEI DAS HIER WICHTIG IST 
                    });
                }
			});
	}

Gruß
Batok
 
Hallo,

habr dasselbe Problem, dass ich nicht weiss, wie ich jetzt die Adresse auslesen kann.


GEvent.addListener(marker,"dragend",function(){
document.getElementById("long").value=marker.getPoint().lng();
document.getElementById("lat").value=marker.getPoint().lat();
document.getElementById("adresse").value = marker.address; ?

});

Kann mir jemand helfen?

thx
 
Moin,

um die Adresse zu Ermitteln, muss der GlientGeocoder eine Anfrage absetzen.

So sollte es hinhauen:
Code:
      GEvent
     .addListener(
                    marker, 
                    "dragend", 
                    function() 
                    {
                      new GClientGeocoder()
                      .getLocations(
                                      marker.getLatLng(), 
                                      function(data)
                                      {
                                        
                                        document.getElementById("long").value 
                                          = marker.getLatLng().lng();
                                        document.getElementById("lat").value  
                                          = marker.getLatLng().lat();
                                        var adresse=(
                                                      (data.Placemark)
                                                        ? data.Placemark[0].address
                                                        : 'keine Adresse verfügbar'
                                                    );
                                       
                                        document.getElementById("adresse").value = adresse;
                                      }
                                    )
           
                      }
                  );

Beachte, dass die Methode getPoint() mittlerweile veraltet ist, verwende besser getLatLng() .
 
Zurück