我一直在当前项目中使用 google map api。我使用 googles service.nearbySearch 功能对附近的地方进行查询。然后,我使用来自附近搜索结果的纬度和经度值创建一个新的 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>
和 Javascript
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 语句中定义 lat/lng 值的两种方法的值,可以看到这些值被解释为完全相等。
提前感谢任何可以帮助我理解为什么我的 pos 值在使用 geometry.location.k 时错误地返回 -90 的 lng 值的人,但是在使用 geometry.location.lng() 时可以正常工作。
如果需要进一步的澄清、信息或任何事情,请告诉我。