我正在尝试从Google Maps地理编码器API中限制返回的地址,如下所示:
var geocoder = new google.maps.Geocoder();
var auVicSwLatLon = new google.maps.LatLng(-39.234713, 140.962526);
var auVicNeLatLon = new google.maps.LatLng(-33.981125, 149.975296);
var auVicLatLonBounds = new google.maps.LatLngBounds(auVicSwLatLon, auVicNeLatLon);
geocoder.geocode(
{
address: searchStr,
region: 'AU',
// bounds: auVicLatLonBounds,
},
function(results, status) {
// ... do stuff here
}
);
使用区域限制工作。但是使用bounds的限制不会 - 当我取消注释上面的bounds属性时,我得不到任何结果。留下评论,我从澳大利亚各地得到结果。
我在这里做错了吗?
谢谢!
其他信息:
此处的相关文件:
https://developers.google.com/maps/documentation/javascript/geocoding
在这里:
https://developers.google.com/maps/documentation/javascript/reference#Geocoder
请注意,我在LatLngBounds
中使用的值是维多利亚州(VIC)的值。这就是我想在这里实现的目标。因此,如果您知道另一种方法来实现这一目标,请回答这个问题!
答案 0 :(得分:1)
为什么不手动查找满足边界要求的结果?
我遍历结果并使用lat和lng值检查限制区域内的第一个结果。你也可以得到所有结果。
function searchFromAddress() {
var address = document.getElementById("txtBxAddress").value;
// Check if input is not empty
if (address.length < 1) {
return;
}
var geocoder = new google.maps.Geocoder();
geocoder.geocode({ 'address': address },
function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var point;
// Find first location inside restricted area
for (var i = 0 ; i < results.length ; i++) {
point = results[i].geometry.location;
// I compare my lng values this way because their are negative
if (point.lat() > latMin && point.lat() < latMax && point.lng() < lngMin && point.lng() > lngMax) {
map.setCenter(point);
var marker = new google.maps.Marker({
position: point,
map: map,
title: "You are here",
icon: home_pin
});
break;
}
// No results inside our area
if (i == (results.length - 1)) {
alert("Try again");
}
}
}
});
}