0

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

如果需要进一步的澄清、信息或任何事情,请告诉我。

4

0 回答 0