2012-05-04 30 views
8

Tôi đang sử dụng API địa điểm Google Maps v3 để trả lại một số loại 'địa điểm', mỗi địa điểm được biểu thị bằng một điểm đánh dấu khác nhau trên bản đồ.Tìm kiếm địa điểm API bản đồ Google v3 - chuyển một tham số khác tới hàm gọi lại

Tôi tạo đối tượng google.maps.places.PlacesService và sau đó gọi phương thức "tìm kiếm" một lần cho mỗi loại địa điểm. Mỗi lần, tôi sử dụng một hàm gọi lại khác (tham số thứ hai của "tìm kiếm"), bởi vì tôi cần phải chọn một MarkerImage khác nhau cho từng loại.

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

Sau đây là các chức năng gọi lại, mà chỉ khác nhau bởi các 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)); 
     } 
    } 
} 

Mã này hoạt động 100%, nhưng tôi muốn tránh sao chép gọi lại cho từng loại nơi khác nhau (có sẽ khoảng 10). Có cách nào tôi có thể chuyển URL đánh dấu vào chức năng gọi lại không? Sau đó, tôi sẽ chỉ cần một cuộc gọi lại duy nhất ...

Trả lời

7

Làm thế nào về những điều sau đây:

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

awesome ... chỉ là những gì tôi đã sau :) – howlee

+0

doy! Tôi không nên biết. Cảm ơn! –

Các vấn đề liên quan