2016-05-08 4 views
-1

Googleマップの場所APIを使用してプレースリクエストを作成しようとしていますが、結果は常に未定義ですか?Googleマップの場所要求が未定義の結果を返しますか?

提案がありますか?私の他の関数は地図オブジェクトを正しく初期化でき、この場所機能を持たないマーカーで地図を見ることができますか?

この機能で誰かがエラーを発見した場合、私は非常に感謝しています!

$scope.placeRequest = function(map){ 
       var location = new google.maps.LatLng(39.6303225,-106.57294); 
       var service = new google.maps.places.PlacesService(map); 

       service.nearbySearch({ 
        location: location, 
        radius: 5000, 
        types: ['lodging','art_gallery','restaurant','bar', 'spa','museum'] 
       }, callback()); 

       function callback(results, status) { 
       console.log(results); 
        if (status == google.maps.places.PlacesServiceStatus.OK) { 
         for (var i = 0; i < results.length; i++) { 
          $scope.places.push(results[i]); 
         } 
        } 
       }; 
      }; 
+0

問題を示す[最小、完全、テスト済みおよび読み取り可能な例](http://stackoverflow.com/help/mcve)を入力してください。 2つのことに注意してください:1. 'types'オプションは推奨されなくなり、もはやサポートされません。 2.機能が失敗したときの状態を示すものではないため、結果が得られない理由に関する追加情報が表示される場合があります。 – geocodezip

+0

は 'callback'ではなく単に' callback'を使用します。 –

答えて

0

callbackパラメータを誤って使用しているため、結果は常に不定です。この構文は、それがcallback関数を呼び出し、コールバック関数としてその呼び出し(ヌル)の結果を使用して、正しくない:

service.nearbySearch({ 
    location: location, 
    radius: 5000, 
    types: ['lodging','art_gallery','restaurant','bar', 'spa','museum'] 
      }, callback()); 

それは次のようになります。

service.nearbySearch({ 
    location: location, 
    radius: 5000, 
    types: ['lodging','art_gallery','restaurant','bar', 'spa','museum'] 
      }, callback); 

proof of concept fiddle

コードスニペット:

var geocoder; 
 
var map; 
 
var infowindow; 
 
var $scope = { 
 
    places: [] 
 
}; 
 

 
function initialize() { 
 
    map = new google.maps.Map(
 
    document.getElementById("map_canvas"), { 
 
     center: new google.maps.LatLng(37.4419, -122.1419), 
 
     zoom: 13, 
 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
 
    }); 
 
    var location = new google.maps.LatLng(39.6303225, -106.57294); 
 
    var service = new google.maps.places.PlacesService(map); 
 
    infowindow = new google.maps.InfoWindow(); 
 

 
    service.nearbySearch({ 
 
    location: map.getCenter(), 
 
    radius: 5000, 
 
    types: ['lodging', 'art_gallery', 'restaurant', 'bar', 'spa', 'museum'] 
 
    }, callback); 
 

 
    function callback(results, status) { 
 
    console.log(results); 
 
    if (status == google.maps.places.PlacesServiceStatus.OK) { 
 
     for (var i = 0; i < results.length; i++) { 
 
     console.log(results[i].name + ":" + results[i].geometry.location); 
 
     $scope.places.push(results[i]); 
 
     createMarker(results[i]); 
 
     } 
 
    } else alert("places request failed, status=" + status) 
 
    }; 
 

 
    function createMarker(place) { 
 
    var placeLoc = place.geometry.location; 
 
    var marker = new google.maps.Marker({ 
 
     map: map, 
 
     position: place.geometry.location, 
 
     title: place.name 
 
    }); 
 

 
    google.maps.event.addListener(marker, 'click', function() { 
 
     infowindow.setContent(place.name); 
 
     infowindow.open(map, this); 
 
    }); 
 
    } 
 
} 
 

 
google.maps.event.addDomListener(window, "load", initialize);
html, 
 
body, 
 
#map_canvas { 
 
    height: 100%; 
 
    width: 100%; 
 
    margin: 0px; 
 
    padding: 0px 
 
}
<script src="https://maps.googleapis.com/maps/api/js?libraries=geometry,places"></script> 
 
<div id="map_canvas"></div>

関連する問題