5

我正在使用谷歌地理编码器,并选择只返回来自德国的结果

这是我的功能的相关部分

    ...
    var geocoder = new google.maps.Geocoder();
    geocoder.geocode({"address":address,"region":"DE" }, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            if (results[0].geometry.location) {
                completeGeo(results[0],address);
            } else {
                completeGeo(null,address);
            }

     ...

但是如果我对“cuvry”进行地理编码也能在德国找到那条街

谷歌返回例如“Cuvry, France”,它在 region 参数之外

如何防止谷歌地理编码器返回不在某个国家/地区的结果?我的意思是返回,如果国家代码匹配,则不检查回调。

4

5 回答 5

13

这可能使用组件过滤器。“组件”:“国家:德国”

var geocoder = new google.maps.Geocoder();
geocoder.geocode({"address":address, "componentRestrictions":{"country":"DE"} },
function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
        if (results[0].geometry.location) {
            completeGeo(results[0],address);
        } else {
            completeGeo(null,address);
        }
});
于 2013-11-14T22:41:17.633 回答
3

当我将其更改 geocoder.geocode({"address":address, "componentRestrictions":{"country":"DE"} }, 为德国时,我的搜索结果找到了越南。

我已将其更改为:

geocoder.geocode( {'address':address + ', Deutschland'}, function(results, status)

这适用于以自己的语言命名的国家/地区。

于 2015-01-29T16:21:48.763 回答
2

简短的回答是你不能。

该问题已在此处向 Google 提交:

https://code.google.com/p/gmaps-api-issues/issues/detail?id=4233

您唯一可以尝试的是将“接受的界限”传递给地理编码器。它远非完美,但对我的项目确实有所帮助。这是我用来尝试将 Google 地理编码器限制在美国西部的代码的粗略副本。显然,您希望编辑边界以表示您感兴趣的区域。

var geocoder = new google.maps.Geocoder()

var callGoogleGeocoder = function(str) {
  var geo_bounds;
  geo_bounds = setGeoBounds();
  return geocoder.geocode({
    address: str,
    bounds: geo_bounds
  }, function(results, status) {
    console.log(results);
  });
}

var setGeoBounds = function() {
  var geo_bounds, ne, sw;
  geo_bounds = new google.maps.LatLngBounds();
  sw = new google.maps.LatLng(41.24843789608676, -126.5633079709794);
  ne = new google.maps.LatLng(49.01224853841337, -108.3479759397294);
  geo_bounds.extend(sw);
  geo_bounds.extend(ne);
  return geo_bounds;
};

请花点时间对我在上面链接到的 Google 问题进行投票。对我来说,这是 Google Geocoder 缺少的第一大功能。

祝你好运!

于 2013-11-14T22:36:20.737 回答
1

使用完整的国家名称(例如,The Netherlands而不是NL ,因为后者不起作用(在 NL 之外返回结果):

geocoder.geocode({"address":address, "componentRestrictions":{"country":"The Netherlands"} },
于 2015-06-30T09:38:34.563 回答
1

我刚刚遇到了同样的问题并以这种方式解决了(对于德国):

var searchObject = {
    'address': address,
    componentRestrictions: {
        country: 'DE'
    }
};


geocoder().geocode(searchObject, function (result, status) {
    if (status !== google.maps.GeocoderStatus.OK) {
        return reject();
    }

    if (result[0].formatted_address === 'Deutschland' && address !== 'Deutschland') {
        return reject();
    }

    return reject();
});

因此,当您搜索错误的地址时,Google 总是Deutschland在使用时返回地址componentRestrictions。这是我让它工作的唯一方法,因为当你删除componentRestrictions谷歌时会产生一个猜测的位置,这对我的用例来说是不正确的。

示例: 搜索邮政编码 12345,这在德国无效。

  1. 没有componentRestrictions——结果:Schenectady, New York 12345, USA

  2. 添加到Deutschland地址 - 结果:12345 High Germany Rd SE, Little Orleans, MD 21766, USA

  3. componentRestrictions- 结果:Deutschland

更新

另一种解决方案是检查partial_match标志:

if (result[0].partial_match) {
    return reject();
}
于 2017-08-28T11:17:44.913 回答