Google地图的google.maps.LatLng更改输入值

时间:2014-05-31 22:22:54

标签: javascript google-maps google-maps-api-3 google-geolocation

我一直在使用当前项目中的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()时正常工作的人。

如果需要进一步说明,信息或其他任何内容,请告知我们。

0 个答案:

没有答案