2 Stimmen

Google Maps API Geocode-Funktionsproblem

Okay, ich spiele gerade mit Google Maps API v3 herum und bin auf ein Problem gestoßen. Ich weiß nicht, ob es an der API liegt oder einfach an einem JS-Fehler, den ich gemacht habe.

Problem: addMarkerFromAdress() Funktion ruft geocodeFromAdress() auf, das Koordinaten an addMarkerFromAdress() zurückgibt. Aber der zurückgegebene Wert ist "undefined".

Zu Debug-Zwecken habe ich zwei Alert-Ausgaben hinzugefügt, eine in addMarkerFromAdress() und eine in geocodeFromAdress(). Was mich beunruhigt, ist, dass das alert() in addMarkerFromAdress() anscheinend ausgelöst wird, bevor ein Wert zurückgegeben wird. Warum?

Quelle:

  var geocoder;
  var map;

  function initializeGoogleMaps() {

    geocoder = new google.maps.Geocoder();
    var latlng = new google.maps.LatLng(0, 0);
    var myOptions = {
      zoom: 1,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    }

    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

  }

  function geocodeFromAdress(address) {
   geocoder.geocode( { 'address': address}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        var latLng = results[0].geometry.location;
        alert(latLng); //Gibt Koordinaten aus, aber wird aus irgendeinem Grund 2. ausgegeben
        return latLng;
      } else {
        alert("Geocode war aus folgendem Grund nicht erfolgreich: " + status);
      }
    });
  }

  function addMarkerFromAdress(address, title){

    var latLng = geocodeFromAdress(address); 
    alert(latLng); //Gibt "undefined" aus, aber wird aus irgendeinem Grund zuerst ausgegeben
    map.setCenter(latLng);
        var marker = new google.maps.Marker({
            map: map, 
            position: latLng
    });

  }

  window.onload = function () { 
   initializeGoogleMaps();
   addMarkerFromAdress('Berlin, Germany', 'Berlin');
  }

4voto

Russ Cam Punkte 120837

Beachten Sie die Funktion, die als zweites Argument an geocoder.geocode() übergeben wird? Dort sollten Sie addMarkerFromAddress aufrufen. Aufgrund der asynchronen Natur der Geocode-Anforderung wird das alert nach var latLng = geocodeFromAdress(address); ausgelöst, bevor die Antwort mit den Breiten- und Längengradwerten zurückgegeben wird.

So sollte es funktionieren

  var geocoder;
  var map;

  function initializeGoogleMaps() {

    geocoder = new google.maps.Geocoder();
    var latlng = new google.maps.LatLng(0, 0);
    var myOptions = {
      zoom: 1,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    }

    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

  }

  function geocodeFromAdress(address, title) {
   geocoder.geocode( { 'address': address}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        var latLng = results[0].geometry.location;
        addMarkerFromAdress(latLng, title);
      } else {
        alert("Geocodierung war nicht erfolgreich aus folgendem Grund: " + status);
      }
    });
  }

  function addMarkerFromAdress(latLng, title){
    map.setCenter(latLng);
    var marker = new google.maps.Marker({
        map: map, 
        position: latLng
    });   
  }

  window.onload = function () { 
   initializeGoogleMaps();
   geocodeFromAdress('Berlin, Deutschland', 'Berlin');
  }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X