2012-05-04 7 views
8

Estoy usando la API de lugares de Google Maps para devolver un número de 'tipos' de lugares, cada uno representado por un marcador diferente en el mapa.Google maps API v3 coloca la búsqueda - pase en otro parámetro a la función de devolución de llamada

Creo un objeto google.maps.places.PlacesService y luego llamo al método "buscar" una vez por tipo de lugar. Cada vez, utilizo una función de devolución de llamada diferente (el segundo parámetro de "búsqueda"), porque tengo que elegir una MarkerImage diferente para cada tipo.

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); 
    } 
}); 

Aquí están las funciones de devolución de llamada, que se diferencian sólo por el MarkerImage:

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)); 
     } 
    } 
} 

Este código funciona al 100%, pero me gustaría evitar la duplicación de la devolución de llamada para cada diferente tipo de lugar (no se estar alrededor de 10). ¿Hay alguna manera en que pueda pasar la URL del marcador a la función de devolución de llamada? entonces sólo se necesitaría una sola llamada de retorno ...

Respuesta

7

¿Qué hay de lo siguiente:

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

impresionante ... justo lo que estaba buscando :) – howlee

+0

Doy! Debería haberlo sabido. ¡Gracias! –

Cuestiones relacionadas