Google Maps API地理编码器,受边界限制

时间:2012-08-07 13:58:36

标签: javascript google-maps google-maps-api-3 bounds google-geocoder

我正在尝试从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)的值。这就是我想在这里实现的目标。因此,如果您知道另一种方法来实现这一目标,请回答这个问题!

1 个答案:

答案 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");
                    }
                }
            }
        });
}