Android GeoCoder:通过邮政编码搜索返回意外结果

问题描述:

我想通过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,GeoCoder只返回美国俄勒冈州的地址。然而这些邮政编码也是在德国小镇维尔茨堡的地方。例如。 97082将返回维尔茨堡地址,但97070(维尔茨堡*)不会被发现,它只返回俄勒冈地址。
+0

你需要证明你在哪里上的拉链搜索代码码。 –

+0

这就是代码。这一切都在一行“getFromLocationName ..”中完成。你错过了什么吗? – dan

+0

啊 - 这是邮政编码,其余部分是静态的(我的意思是你的硬编码值)? –

尝试自定义您的locale。使用德国和德国。 Germany用于德国的国家,而不是language

Locale locale = new Locale(langCode, countryCode) 

Locale locale = new Locale("de", "DE"); 

Geocoder iGeocoder = new Geocoder(getContext(), locale); 

GeoCode默认为美国,所以它似乎首先筛选邮政编码。如果您test here

97070给出Wilsonville, OR 97070, USA

47.060940, 8.564278的结果给出Spitzibüelstrasse 8, 6410 Goldau, Switzerland

97070, 47.060940, 8.564278没有给出结果(这只是测试仪),它不能区分的结果,包括邮政编码和LAT长。

如果您需要增加区域设置区域 - 您可以随时创建一个包含3个国家区域设置的数组并在每个区域进行搜索。

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

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

       return tAddress; 
      } 
     } 
    } 
    return null; 
} 

还有Region Biasing感谢jausen brett的链接

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

Component Filtering

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

精心制作。 –

+0

既然你是在主持人选举,我认为你会很合理......人们正在低调我的答案是正确的(一个捷径你的)OP只是犯了一个错字。感觉像朋友们在我身上联合起来(编码不是谎言......你的答案和我的问题解决了这个问题,我得到了两个反对票。阴谋?大声笑) –

+0

@JasonKrs这不是一个阴谋 - 你可以将它标记为mod注意它是否与你有关。我最好的猜测是第一个答案的downote是因为它没有解决问题,第二个答案是因为你基本上重复了我的答案。你运行它并测试它是很好的。您需要知道 - 运行mod的人受到很多审查,并且如果有投票欺诈行为 - 就像我让人们代表我倒下或投票一样 - 这可能会导致我的帐户被暂停或甚至关闭。如果你仍然担心 - 请随时发布meta。 –