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(维尔茨堡*)不会被发现,它只返回俄勒冈地址。
尝试自定义您的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>®ion=de&key=YOUR_API_KEY
https://maps.googleapis.com/maps/api/geocode/json?components=locality:<desired locality>|country:DE&key=YOUR_API_KEY
精心制作。 –
既然你是在主持人选举,我认为你会很合理......人们正在低调我的答案是正确的(一个捷径你的)OP只是犯了一个错字。感觉像朋友们在我身上联合起来(编码不是谎言......你的答案和我的问题解决了这个问题,我得到了两个反对票。阴谋?大声笑) –
@JasonKrs这不是一个阴谋 - 你可以将它标记为mod注意它是否与你有关。我最好的猜测是第一个答案的downote是因为它没有解决问题,第二个答案是因为你基本上重复了我的答案。你运行它并测试它是很好的。您需要知道 - 运行mod的人受到很多审查,并且如果有投票欺诈行为 - 就像我让人们代表我倒下或投票一样 - 这可能会导致我的帐户被暂停或甚至关闭。如果你仍然担心 - 请随时发布meta。 –
你需要证明你在哪里上的拉链搜索代码码。 –
这就是代码。这一切都在一行“getFromLocationName ..”中完成。你错过了什么吗? – dan
啊 - 这是邮政编码,其余部分是静态的(我的意思是你的硬编码值)? –