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 ...
Ehrfürchtig ... genau das, was ich nach :) – howlee
Doy war! Ich hätte es wissen sollen. Vielen Dank! –