現在のプロジェクトで 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() を使用すると正しく動作します。
さらに説明、情報、または何かが必要な場合はお知らせください。