2012-05-04 15 views
8

Googleマップの場所API v3を使用して、地図上に別のマーカーで表されたいくつかの種類の場所を返します。GoogleマップAPI v3の場所検索 - 別のパラメータをコールバック関数に渡す

私はgoogle.maps.places.PlacesServiceオブジェクトを作成し、プレースタイプごとに「検索」メソッドを1回呼び出します。それぞれのタイプに対して異なるMarkerImageを選択する必要があるため、毎回異なるコールバック関数(「検索」の2番目のパラメータ)を使用します。

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

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

このコードが100%に動作しますが、私はそれぞれ異なる場所タイプのコールバックの重複を避けるしたいと思います(そこになります約10である)。 マーカーURLをコールバック関数に渡す方法はありますか?それから私だけ...後約

答えて

7

どのように単一のコールバックが必要になります

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

素晴らしい...私は後に:) – howlee

+0

DOYただけで何を!私は知っていたはずです。ありがとう! –

関連する問題