Javascript 如何防止google geocoder从其他国家返回结果

Javascript 如何防止google geocoder从其他国家返回结果,javascript,api,google-maps,google-maps-api-3,google-geocoding-api,Javascript,Api,Google Maps,Google Maps Api 3,Google Geocoding Api,我正在使用谷歌地理编码器,可以选择只返回来自德国的结果 这是我函数的相关部分 ... var geocoder = new google.maps.Geocoder(); geocoder.geocode({"address":address,"region":"DE" }, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { if (

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

这是我函数的相关部分

    ...
    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”加上地理编码,在德国找到那条街

例如,google返回“Cuvry,France”,它不在region参数范围内

如何防止google geocoder返回不在某个国家的结果?
我的意思是返回,如果国家代码匹配,则不签入回调。

简而言之,您不能

该问题已提交给谷歌,网址为:

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

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 Geocoder缺少的#1功能


祝你好运

使用组件过滤器可能会起作用。“组件”:“国家/地区:DE”

当我把它改成
geocoder.geocode({“address”:address,“componentRestrictions”:{“country”:“DE”}},
对于德国,我的搜索结果发现了越南

我已将其更改为:

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

这适用于本国语言中的国家名称。

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


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

所以,当你搜索一个错误的地址时,当使用
组件限制时,谷歌总是将
德国
作为地址返回。这是我让它工作的唯一方法,因为当你删除
组件限制时,谷歌会得到一个猜测的位置,这对于我的用例来说是不正确的

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

  • 组件限制
    -结果:
    Schenectady,纽约12345,美国

  • 地址中添加了
    Deutschland
    -结果:
    12345 High German Rd SE,美国马里兰州小奥尔良市21766

  • 带有
    组件限制
    -结果:
    德国

  • 更新

    另一种解决方案是检查
    部分匹配
    标志:

    if (result[0].partial_match) {
        return reject();
    }
    

    请注意,偏倚只会偏好特定领域的结果;如果该领域之外存在更多相关结果,则可能会包括在内。是的,我注意到,这让我提出了一个问题:驻留,这就是答案。答案是->你可以:D非常感谢你,这看起来是一个不错的方法!当我尝试好的方法时,我会给出反馈是的,但只适用于拥有单一边界的国家。这对像法国这样在许多大洋上、太平洋上以及其他地方都有岛屿的国家来说是行不通的。这会导致“未捕获的无效价值错误:未知的财产组成部分”我想我可以做到,我只是还没弄明白而已。[链接]我想我可以试试“组成部分限制”:{“国家”:“DE”}是的,它是有效的!!我只需要将它作为一个对象传递,比如:'componentRestrictions':{'country':'DE'}:D如果你更新你的答案,我会接受它关于何时用户输入了限制国家以外的内容?不适合我…“Budapest,France”将它定位到真正的匈牙利布达佩斯,并且componentRestrictions对FR提出了更糟糕的要求(例如:Grevrsvrqnreoi)be GeocoderStatus.OK,位于法国的某个随机位置。我尝试了这两种方法,但都没有更好…我有相同的问题。如果我包括组件限制,比如美国,无论我尝试进行地理编码,GeocoderStatus总是作为OK返回。如果我删除组件限制并搜索相同的胡言乱语,它将被删除返回零结果。“componentRestrictions”不再有效,应该只是“components”。不,这对我来说没有变化。你使用了哪个国家?对我来说,这是唯一有效的方法。法国也是一样,我认为iamjpg在写“你不能”时的回答是正确的…“组件限制”不再起作用,应该只是“组件”。
    geocoder.geocode({"address":address, "componentRestrictions":{"country":"The Netherlands"} },
    
    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();
    });
    
    if (result[0].partial_match) {
        return reject();
    }