Android GeoCoder:按邮政编码搜索会返回意外结果



我想通过Android的GeoCoder类使用用户输入的文本进行搜索。这是我的代码:

Geocoder iGeocoder = new Geocoder(getContext(), Locale.GERMAN);
public Address getAdress(String aUserInput) {
List<Address> tAddressList = iGeocoder.getFromLocationName(aUserInput, 1000, 47.060940, 8.564278, 51.526396, 13.736392);
if(tAddressList != null &&
tAddressList.size() > 0) {
for(Address tAddress : tAddressList) {
// return the first adress found for germany.
Log.e(TAG, "returning Adress: " + tAddress );
if(tAddress.getCountryCode().equals("DE")) {
return tAddress;
}
}
return null;
} else {
return null;
}
}

我传递给getFromLocationName的边界框大致代表德国拜仁。我知道这个边界框不能保证结果地址真的在那里。我发现了一些问题,尤其是在通过邮政编码搜索时。

  • 按邮政编码搜索时返回的一些结果地址没有"管理区域",因此我无法过滤我想要的状态(="拜仁"(。
  • 奇怪的是,如果我搜索邮政编码 97070、97078 或 97076,地理编码器只返回美国俄勒冈州的地址。然而,这些邮政编码也是德国维尔茨堡镇的地方。例如,97082 将返回维尔茨堡地址,但找不到 97070(维尔茨堡中部(,它只返回俄勒冈州地址。

尝试自定义区域设置。使用德国和德语。德国用于德国的区域设置,而不是语言。

Locale locale = new Locale(langCode, countryCode) 
Locale locale = new Locale("de", "DE");
Geocoder iGeocoder = new Geocoder(getContext(), locale);

地理编码默认为美国,因此它似乎首先过滤邮政编码的搜索。如果您在此处测试:

97070给出的结果 威尔逊维尔, OR 97070, 美国

47.060940, 8.564278给 Spitzibüelstrasse 8, 6410 戈尔道, 瑞士

97070, 47.060940, 8.564278没有给出任何结果(这只是测试器(,它无法区分结果以包含该邮政编码和经度。

如果您需要增加区域设置区域 - 您始终可以创建一个包含 3 个国家/地区区域设置的数组并搜索每个区域设置。

您也有太多的返回 - 您只需要在第一个if之后返回一个null,如果它不返回地址,以确保所有路径都有返回值。

public Address getAdress(String aUserInput) {
.../...
if(.../...) {
for(Address tAddress : tAddressList) {
.../...
if(tAddress.getCountryCode().equals("DE")) {
return tAddress;
}
}
}
return null;
}

还有区域偏见感谢jausen布雷特的链接

https://maps.googleapis.com/maps/api/geocode/json?address=<some address>&region=de&key=YOUR_API_KEY

组件过滤

https://maps.googleapis.com/maps/api/geocode/json?components=locality:<desired locality>|country:DE&key=YOUR_API_KEY

最新更新