最白目*_*最白目 4 java android google-maps
我想通过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;
}
}
Run Code Online (Sandbox Code Playgroud)
我传给getFromLocationName大致代表德国拜仁的边界框.我知道这个边界框不能保证结果地址真的存在.我发现一些问题,特别是在通过邮政编码搜索时.
尝试自定义您的区域设置.使用德国和德国.德国被用于德国的国家而不是语言.
Locale locale = new Locale(langCode, countryCode)
Locale locale = new Locale("de", "DE");
Geocoder iGeocoder = new Geocoder(getContext(), locale);
Run Code Online (Sandbox Code Playgroud)
GeoCode默认为美国,因此它首先会过滤搜索邮政编码.如果你在这里测试:
97070给出Wilsonville,OR 97070,USA的结果
47.060940, 8.564278给出Spitzibüelstrasse8,6410Goldau,瑞士
97070, 47.060940, 8.564278 没有给出结果(这只是测试者),它无法区分结果以包含该邮政编码和lat long.
如果需要增加区域设置区域 - 您始终可以创建包含3个国家/地区区域的数组,并在每个区域设置上进行搜索.
您还有太多的返回 - 您只需要在第一个null之后返回一个if并且如果它不返回地址,则确保所有路径都有返回值.
public Address getAdress(String aUserInput) {
.../...
if(.../...) {
for(Address tAddress : tAddressList) {
.../...
if(tAddress.getCountryCode().equals("DE")) {
return tAddress;
}
}
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
还有Region Biasing感谢jausen brett的链接
https://maps.googleapis.com/maps/api/geocode/json?address=<some address>®ion=de&key=YOUR_API_KEY
Run Code Online (Sandbox Code Playgroud)
和组件过滤
https://maps.googleapis.com/maps/api/geocode/json?components=locality:<desired locality>|country:DE&key=YOUR_API_KEY
Run Code Online (Sandbox Code Playgroud)