如何防止谷歌地理编码器从其他国家/地区返回结果
How to prevent google geocoder from returning results from other countries
我正在使用谷歌地理编码器,可以选择只返回来自德国的结果
这是我函数的相关部分
...
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"进行地理编码,也可以找到德国的那条街道
谷歌返回例如"法国库夫里",它位于区域参数之外
如何防止谷歌地理编码器返回不在某个国家/地区的结果?我的意思是返回,如果国家/地区代码匹配,则不签入回调。
这可能适用于组件过滤器。"组件":"国家:德国"
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);
}
});
当我将其更改为 geocoder.geocode({"address":address, "componentRestrictions":{"country":"DE"} },
对于德国,我的搜索结果找到了越南。
我已将其更改为:
geocoder.geocode( {'address':address + ', Deutschland'}, function(results, status)
这适用于使用自己语言的国家/地区名称。
简短的回答是你不能。
该问题已在此处提交给谷歌:
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;
};
请花点时间在我上面链接的谷歌上对这个问题进行投票。对我来说,这是谷歌地理编码器缺少的#1功能。
祝你好运!
使用完整的国家/地区名称(例如。 The Netherlands
而不是 NL
),因为后者不起作用(在 NL 之外返回结果):
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();
});
因此,当您搜索错误的地址时,Google在使用时始终Deutschland
返回componentRestrictions
地址。这是我让它工作的唯一方法,因为当您删除componentRestrictions
Google 时,会产生一个猜测的位置,这对于我的用例来说是不正确的。
例:搜索邮政编码 12345,该代码在德国无效。
没有
componentRestrictions
— 结果:Schenectady, New York 12345, USA
将
Deutschland
添加到地址 — 结果:12345 High Germany Rd SE, Little Orleans, MD 21766, USA
使用
componentRestrictions
— 结果:Deutschland
更新
另一种解决方案是检查partial_match
标志:
if (result[0].partial_match) {
return reject();
}
- Possibile使用Manifest v2下的HTML5地理位置API将lat/long转换为国家/地区
- 无法使用国家/地区选择中的状态动态填充下拉列表
- 使用自动完成服务()将 Google 地图地点限制为特定国家/地区
- Magento:根据所选国家/地区隐藏/显示输入字段
- 仅在引导程序表单助手国家/地区选取器中显示国家/地区子集文本
- 如何从特定国家/地区重定向用户
- 根据国家/地区更改货币
- 如何将 gmap 搜索自动完成功能限制为有限的国家/地区
- GeoIP2 Javascript仅重定向到其他国家,但不重定向到特定国家
- 带有标志和文本的国家/地区建议列表
- 选择国家/地区时更改颜色
- 相对于选定的地区中心缩放SVG国家/地区地图
- Three.js地球仪-使国家/地区可点击
- javascript从所选国家/地区值中选择城市
- 如何获得用户'的国家/地区,并转发到URL
- 下拉菜单,用于选择国家/地区,然后选择州
- 如果在JavaScript w/HTML中选择了特定国家/地区,如何要求邮政编码为数字
- 我如何限制谷歌地图API's的搜索框将搜索到一个国家/地区
- 如何制作验证电话号码中国家/地区代码的正则表达式
- 如何防止谷歌地理编码器从其他国家/地区返回结果