我一直在使用当前项目中的google map api。我使用googles service.nearbySearch功能对附近的地方执行查询。然后,我使用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时错误地返回lng值为-90但是在使用geometry.location.lng()时正常工作的人。
如果需要进一步说明,信息或其他任何内容,请告知我们。