2012-05-04 13 views
8

Ich verwende die Google Maps Orte API v3, um eine Reihe von "Typen" von Orten zurückzugeben, die jeweils durch einen anderen Marker auf der Karte dargestellt werden.Google Maps API v3 platziert Suche - übergibt einen anderen Parameter an Callback-Funktion

Ich erstelle ein google.maps.places.PlacesService Objekt, und rufen Sie anschließend die Methode einmal pro Ort Typ „suchen“. Jedes Mal verwende ich eine andere Callback-Funktion (der zweite Parameter von "search"), weil ich für jeden Typ ein anderes MarkerImage wählen muss.

var address = "97-99 Bathurst Street, Sydney, 2000"; 
geocoder.geocode({ 'address': address }, function (results, status) { 
    if (status == google.maps.GeocoderStatus.OK) { 
     var location = results[0].geometry.location; 

     map.setCenter(location); 

     var marker = new google.maps.Marker({ 
      map: map, 
      position: location 
     }); 

     infowindow = new google.maps.InfoWindow(); 
     var service = new google.maps.places.PlacesService(map); 

     // banks 
     var req_bank = { location: location, radius: 500, types: ['bank'] }; 
     service.search(req_bank, banks); 

     // bars 
     var req_bar = { location: location, radius: 500, types: ['bar'] }; 
     service.search(req_bar, bars); 

     // car parks 
     var req_parking = { location: location, radius: 500, types: ['parking'] }; 
     service.search(req_parking, carparks); 

    } else { 
     alert("Geocode was not successful for the following reason: " + status); 
    } 
}); 

Hier sind die Callback-Funktionen, die durch die Markerimage nur unterscheiden:

function banks(results, status) { 
    if (status == google.maps.places.PlacesServiceStatus.OK) { 
     for (var i = 0; i < results.length; i++) { 
      createMarker(results[i], new google.maps.MarkerImage("/images/bank.png", null, null)); 
     } 
    } 
} 
function bars(results, status) { 
    if (status == google.maps.places.PlacesServiceStatus.OK) { 
     for (var i = 0; i < results.length; i++) { 
      createMarker(results[i], new google.maps.MarkerImage("/images/bar.png", null, null)); 
     } 
    } 
} 
function carparks(results, status) { 
    if (status == google.maps.places.PlacesServiceStatus.OK) { 
     for (var i = 0; i < results.length; i++) { 
      createMarker(results[i], new google.maps.MarkerImage("/images/parking.png", null, null)); 
     } 
    } 
} 

Dieser Code funktioniert 100%, aber ich würde den Rückruf für jeden anderen Ort Art zu vermeiden, wie das Duplizieren (es wird um 10 sein). Gibt es eine Möglichkeit, die Marker-URL in die Callback-Funktion zu übergeben? Dann würde ich nur einen einzigen Rückruf benötigen ...

Antwort

7

Wie über die folgenden:

service.search(req_bank, function (results, status) { 
    locations(results, status, "bank"); 
}); 

function locations(results, status, type) { 
    if (status == google.maps.places.PlacesServiceStatus.OK) { 
    // check the type to determine the marker, or pass a url to the marker icon 
    } 
} 
+0

Ehrfürchtig ... genau das, was ich nach :) – howlee

+0

Doy war! Ich hätte es wissen sollen. Vielen Dank! –