3

インスタンス化されたマップと検索ボックスがあり、検索が完了した後にマーカーをドロップします。これは正常に機能していますが、場所サービスにクエリを実行して、マーカーがドロップされた場所の近くの場所を取得したいのですが、実行時に次のエラーが発生します: google.maps.places.PlacesService(map) Uncaught TypeError: undefined is not a関数...

以下は、Angular.module.config の関連コードです。

uiGmapGoogleMapApiProvider.configure({
  v: '3.17',
  libraries: 'places'
});

私のマップコントローラーでは:

1) ロード時のコールバック

uiGmapGoogleMapApi.then(function(maps) {
  $scope.googleMapsObject = maps;
});

2) マーカーを作成するイベント ハンドラーをセットアップします。

$scope.searchbox = {
  events: {
      places_changed: placesChangedHandler
  }
}

3) 場所が変更されたときの処理、緯度のマーカーの設定、および (最後の行が問題です) 場所の名前のクエリ。

function placesChangedHandler(searchBox) {
  var lat = searchBox.getPlaces()[0].geometry.location.k;
  var lgn = searchBox.getPlaces()[0].geometry.location.C;
  var center = { latitude: lat , longitude: lgn };
  $scope.address = searchBox.getPlaces()[0].adr_address;
  $scope.map = {
    center: center, zoom: 15
  };
  setMarker(center);
  var service = new google.maps.places.PlacesService($scope.googleMapsObject); 
 // service.nearbySearch(request, callback);
}

エラーは、その 2 番目から最後の行にあります。(また、これらの変数に到達するためのよりクリーンな方法はありますか?)

よろしくお願いします。

4

3 に答える 3

0

私は最近同じ問題に直面しましたが、角度が初めてなので、何が悪いのかを理解するのに時間がかかりました(正直に言うと、Java Script は初めてです;))

$windowコントローラーでは、グローバル オブジェクトにアクセスするために依存関係を追加する必要がありますgoogle。これは次のようになります。

.controller('mapCtrl', ['$scope', '$window', 'uiGmapGoogleMapApi'
    , function($scope, $window, GoogleMapApi) {
  GoogleMapApi.then(function(map) {
    $scope.googleVersion = map.version;
    $scope.map = { center: { latitude: 59.9500, longitude: 10.7500 }, zoom: 11 };
    $scope.googleMapsObject = map

    var service = new $window.google.maps.places.PlacesService($scope.googleMapsObject);
  });
}])
于 2015-01-25T22:24:32.630 に答える
0

問題は、 google.maps オブジェクトである「マップ」の戻り値に場所サービスをロードしようとしていると思います。

それで:

$scope.googleMapsObject == google.maps

必要なのは、markers ディレクティブ (まだ試していません) を使用するか、 tilesLoaded イベントから取得できるマップの実際のマップ オブジェクトを使用することです。

$scope.map = {
   events: {
     tilesloaded: function (map) {
        $scope.$apply(function () {
            $scope.actualMapObj = map;
            $log.info('this is the map instance', map);
        });
     }
   }
}

tilesFAQ からロード: http://angular-ui.github.io/angular-google-maps/#!/faq

于 2015-04-22T06:29:32.597 に答える
0

ライブラリとして「places」で初期化した後、api パラメータに place プロパティが必要です。

uiGmapGoogleMapApi.then(function(maps) {
  maps.places.PlacesService() // -> here you can search for something
});

于 2015-08-16T21:03:30.467 に答える