根据此链接:http://code.google.com/apis/maps/documentation/javascript/places.html#place_search_requests
该方法可以采用
-点和半径或
-矩形边界
使用点+半径可以得到正确的结果,但最大半径只有50公里,我需要搜索到1000公里,所以我尝试使用边界。当我的边界很小时,我会得到与点+半径相同的正确结果,但当我增加边界时,我根本不会得到结果。
下面的代码将给出正确的结果,但是,如果用注释掉的坐标替换var sw和var ne,它将不再工作。
即。基钦纳是在艾尔和圭尔夫之间的边界内找到的,但不是在底特律和渥太华之间的边界。如果你看地图,那就没有任何意义了。
<script type="text/javascript">
var map;
var infowindow;
function initialize() {
var Cambridge = new google.maps.LatLng(43.346528, -80.417962);
var sw = new google.maps.LatLng(43.292501,-80.543175); // 41.914541,-83.282318
var ne = new google.maps.LatLng(43.605057,-80.156250); // 45.580391,-76.283051
var zoneBounds = new google.maps.LatLngBounds(sw,ne);
map = new google.maps.Map(document.getElementById('map'), {
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: Cambridge,
zoom: 10
});
var request = {
bounds: zoneBounds,
//location: Cambridge, //using location and
//radius: 500000, //radius works
name: ['Kitchener, ON']
};
infowindow = new google.maps.InfoWindow();
var service = new google.maps.places.PlacesService(map);
service.search(request, callback);
}
function callback(results, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
for (var i = 0; i < results.length; i++) {
createMarker(results[i]);
}
}
}
function createMarker(place) {
var placeLoc = place.geometry.location;
var marker = new google.maps.Marker({
map: map,
position: place.geometry.location
});
google.maps.event.addListener(marker, 'click', function() {
infowindow.setContent(place.name);
infowindow.open(map, this);
});
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
我应该能够使用PlacesServiceStatus来查找请求的状态,我想这会让我深入了解问题,但我不知道如何检索状态代码
非常感谢您对此的任何帮助
谢谢!
编辑:好的,我添加了警报(状态);状态显示为"ZERO_RESULTS"
在回调方法中,您可以执行类似的操作
function callback(results, status) {
window.alert(results.length);
它会告诉你你有多少结果,你可以像这样循环它们。。。
for (var i = 0; i < results.length; i++) {
window.alert(results[i].formatted_address);
}
我自己也试过,是的,如果边界超过50公里,那么结果就毫无用处了。我能猜出答案;如果界限非常大,那么可能会对谷歌服务器造成太大的影响。然而,我不喜欢这个答案,所以如果有人更清楚的话;帮帮我们!
另一种选择是使用Places Autocomplete-https://developers.google.com/maps/documentation/javascript/places#places_autocomplete
你可以使用地理定位,但我怀疑它是否能提供你想要的响应,例如,如果你对"enfield"进行地理编码,它会向你显示世界上所有的enfield,如果你将"enf"进行地理代码编码,它就会向你显示一个终点机场!