将边界传递给google places API

时间:2011-09-12 19:39:17

标签: javascript google-maps-api-3

我刚开始使用Google Places API(http://code.google.com/apis/maps/documentation/javascript/places.html),但我似乎无法正确使用传入边界而不是latLng对象和半径。

在API文档中,它说:

  

此方法接受带有以下字段的请求:   任何一个:   bounds,必须是google.maps.LatLngBounds对象,用于定义要搜索的矩形;要么   一个位置和半径;前者采用google.maps.LatLng对象,半径采用一个简单的整数,表示圆的半径(以米为单位)。

我的代码如下所示:

var bnds      = map.getBounds();
console.log(bnds); // this returns a valid bounds object!
var req       = {
                 bounds: bnds
              };
var service = new google.maps.places.PlacesService(map);
service.search(req, callback);

当我运行该页面时,我从Google服务收到错误Uncaught Error: Property bounds not specified。如果我将req对象更改为

var req    = {
               location: latlngobject,
               radius: '500'
             }

它运作正常。是否有关于传入bounds对象而不是lat / lng / radius的正确语法的想法?

5 个答案:

答案 0 :(得分:1)

文档执行表明边界是一个选项:

https://developers.google.com/maps/documentation/javascript/places#place_search_requests

  

以下任一项:   bounds,必须是定义矩形搜索的google.maps.LatLngBounds对象>区域;要么   一个位置和半径;形式.....

我遇到了这个问题,所以当完整错误显示时,我取出了其他参数:

  

未捕获错误:属性边界无效(可能是因为其他属性)。

因此,取出rankBy或关键字或类型参数,直到它起作用 - 然后再添加它们

这些参数对我有用: var arg = { bounds:map.getBounds(), types:['bar','airport'] };

根据需要填写类型。

在雷达搜索中,Bounds对我的影响比在附近的搜索

更好

答案 1 :(得分:1)

答案 2 :(得分:0)

我很确定Google Places API没有边界选项/参数。我至少在这里找不到它提到的任何地方:https://developers.google.com/places/documentation/

只看到

半径。

答案 3 :(得分:0)

以下示例说明如何从Geocoder()结果获取边界并将PlacesService()结果限制为该结果,并指定相应的默认位置标记。

var geocoder = new google.maps.Geocoder(),
    map = new google.maps.Map(document.getElementById('map'), {
        zoom: 10,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    }),
    rect = new google.maps.Rectangle({
        strokeColor: '#FF0000',
        strokeOpacity: 0.3,
        strokeWeight: 2,
        fillColor: '#FF0000',
        fillOpacity: 0.33,
        map: map
    }),
    markers_amount = 10,
    markers = [];

// GEOCODE
geocoder.geocode({
    'address': 'Vienna'
}, function (results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
        var geometry = results[0].geometry,
            places = new google.maps.places.PlacesService(map);

        map.setCenter( bounds.getCenter() );
        // SETS THE BOUNDS HERE
        rect.setBounds( bounds );

        places.search({
            bounds: bounds,
            // https://developers.google.com/places/documentation/supported_types
            types: [
                // Until there's enough meta data for Google, 
                // they label everything as an 'establishment'.
                'establishment'
            ]
        }, function (results, status) {
            if (status == google.maps.places.PlacesServiceStatus.OK) {
                console.log( results );
                for (var i = 0; i < markers_amount; i++) {
                    markers.push(new google.maps.Marker({
                        position: results[i].geometry.location,
                        map: map,
                        icon: image = {
                            url: results[i].icon,
                            size: new google.maps.Size(71, 71),
                            origin: new google.maps.Point(0, 0),
                            anchor: new google.maps.Point(17, 34),
                            scaledSize: new google.maps.Size(25, 25)
                        }
                    }));
                }
            }
        });
        //console.log(markers);
    } else {
        return $('#map').html('could not locate you');
    }
});

答案 4 :(得分:-1)

也许这段代码会帮助你

var bounds = map.getBounds();
var southWest = bounds.getSouthWest();
  var northEast = bounds.getNorthEast();
  var lngSpan = northEast.lng() - southWest.lng();
  var latSpan = northEast.lat() - southWest.lat();