我刚开始使用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的正确语法的想法?
答案 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();