0

現在のプロジェクトで Google マップ API を使用しています。googles service.nearbySearch 機能を使用して近くの場所のクエリを実行します。次に、nearSearch の結果の緯度と経度の値を使用して、新しい google.maps.LatLng を作成します。以下は私がやっていることのコードです:

 var service = new google.maps.places.PlacesService(map);
 service.nearbySearch(request,function(results,status){
    for (var i = 0; i < results.length; i++) {
       var place = results[i];
       var pos = new google.maps.LatLng(place.geometry.location.A, place.geometry.location.k);
    };
 });

プログラムを実行するときに place.geometry.location.A と k の値を確認すると、正しい値が得られます。しかし、新しく作成された変数 pos の値を見ると、.k の値は -90 に変更されていますが、.A の値は正しいままです。

この変更が発生する理由を理解できる人はいますか?

さらに、代わりに以下のスニペットを使用すると、コードは正常に機能しますが、違いがある理由を理解したいと思います。

var service = new google.maps.places.PlacesService(map);
 service.nearbySearch(request,function(results,status){
    for (var i = 0; i < results.length; i++) {
       var place = results[i];
       var pos = new google.maps.LatLng(place.geometry.location.lat(), place.geometry.location.lng());
    };
 });

place.geometry.location.lat() と .lng() の値を再度確認すると、値が正しく、前のコード スニペットの値と同じであることがわかります。ただし、今回は、変数 pos が正しい値で作成され、-90 の変更された値を与えません。

わかりやすくするために、以下は私が使用している完全なコードです。関連する場合は、Ember.js フレームワークを使用してこれを構築しています。

CSS

<script type="text/x-handlebars">
    {{outlet}}
</script>

<script type="text/x-handlebars" id="map">
    <div id="map_canvas" style="width:400px; height:400px"></div>
    {{#view App.MapView}}{{/view}}
</script>

そしてジャバスクリプト

App = Ember.Application.create();

App.Router.map(function(){
    this.resource('map');
});

App.MapView = Ember.View.extend({
    didInsertElement: function (){
        var mapOptions = {
            zoom: 11,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };

        //Creates map instance with given mapOptions and inserts it into html div
        var map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);
        this.set('map', map);

        navigator.geolocation.getCurrentPosition(function(position){

            var pos = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
            map.setCenter(pos);

            //Searches google places for nearby places (in this case: bars within 1500 meters of current location)
            var request = {
                location: pos,
                radius: '1200',
                types: ['bar']
            };

            var service = new google.maps.places.PlacesService(map);
            service.nearbySearch(request,function(results,status){

                var positions = [];

                for (var i = 0; i < results.length; i++) {
                    var place = results[i];
                    var pos = new google.maps.LatLng(place.geometry.location.A, place.geometry.location.k);
//                            var pos = new google.maps.LatLng(place.geometry.location.lat(),   place.geometry.location.lng());
                    if (place.geometry.location.lat() === place.geometry.location.k)
                        console.log("lats are equal - Place.geometry.location.lat() = " +
                            place.geometry.location.lat() + ' place.geometry.location.k = ' +
                            place.geometry.location.k + 'and the value for pos are - pos.A = ' + pos.A +
                            ' pos.k = ' + pos.k);
                    else {
                        console.log("lats are not equal");
                    }

                    positions.pushObject(pos);
                };
                for(var i=0; i<positions.length;i++){
                    var marker = new google.maps.Marker({
                        position: positions[i],
                        map:map
                    });
                };
            });
        })
    }
})

このコードには、var pos を定義する両方の方法が含まれています。一番上の (コメントされていない行) は機能しませんが、下の (コメントアウトされた) 方法は機能します。また、直後の if ステートメントで緯度/経度の値を定義する両方の方法の値を比較すると、値が完全に等しいと解釈されることがわかります。

geometry.location.k を使用すると、私の pos 値が -90 の lng 値を誤って返す理由を理解できる人に事前に感謝しますが、geometry.location.lng() を使用すると正しく動作します。

さらに説明、情報、または何かが必要な場合はお知らせください。

4

0 に答える 0