我没有找到关于 android.location.Address 用于在全球范围内识别和存储地址的标准的完整文档,因此我从不同国家/地区进行了几次地址查询以解释结果。
正如 Guilherme 所说,我们有 getAddressLine(int index) 和一个提取地址每个元素的方法列表。
本帖不解释代码,放在这里给有需要的人看看。
List<Address> addresses;
Geocoder geocoder = new Geocoder(getActivity());
addresses = geocoder.getFromLocation(latitude, longitude, 10);
if (addresses == null || addresses.isEmpty()) {
// Mygeocoder is a class with a http request to google server, that replaces Geocoder, if not work
addresses = MyGeocoder.getFromLocation(latitude, longitude, 10);
}
HashMap itemAddress;
ArrayList itemList = new ArrayList<HashMap<String, String>>();
Log.d("Addresses", "" + "Start to print the ArrayList");
for (int i = 0; i < addresses.size(); i++) {
itemAddress = new HashMap<String, String>();
Address address = addresses.get(i);
String addressline = "Addresses from getAddressLine(): ";
for (int n = 0; n <= address.getMaxAddressLineIndex(); n++) {
addressline += " index n: " + n + ": " + address.getAddressLine(n) + ", ";
}
Log.d("Addresses: ", addressline);
Log.d("Addresses getAdminArea()", "" + address.getAdminArea());
Log.d("Addresses getCountryCode()", "" + address.getCountryCode());
Log.d("Addresses getCountryName()", "" + address.getCountryName());
Log.d("Addresses getFeatureName()", "" + address.getFeatureName());
Log.d("Addresses getLocality()", "" + address.getLocality());
Log.d("Addresses getPostalCode()", "" + address.getPostalCode());
Log.d("Addresses getPremises()", "" + address.getPremises());
Log.d("Addresses getSubAdminArea()", "" + address.getSubAdminArea());
Log.d("Addresses getSubLocality()", "" + address.getSubLocality());
Log.d("Addresses getSubThoroughfare()", "" + address.getSubThoroughfare());
Log.d("Addresses getThoroughfare()", "" + address.getThoroughfare());
}
以下是迈阿密某点的经纬度结果:
- D/Addresses:开始打印ArrayList
- D/地址::来自 getAddressLine() 的地址:索引 n:0:7500 SW 120th St,索引 n:1:佛罗里达州迈阿密 33156,索引 n:2:EE。 UU.,
- D/Addresses getAdminArea():佛罗里达州
- D/Addresses getCountryCode():美国
- D/Addresses getCountryName(): Estados Unidos
- D/Addresses getFeatureName(): 7500
- D/Addresses getLocality():迈阿密
- D/Addresses getPostalCode(): 33156
- D/Addresses getPremises(): null
- D/Addresses getSubAdminArea(): null
- D/Addresses getSubLocality(): null
- D/Addresses getSubThoroughfare(): 7500
- D/Addresses getThoroughfare(): SW 120th St
- D/Addresses::来自 getAddressLine() 的地址:索引 n:0:佛罗里达州 Pinecrest,索引 n:1:EE。 UU.,
- D/Addresses getAdminArea():佛罗里达州
- D/Addresses getCountryCode():美国
- D/Addresses getCountryName(): Estados Unidos
- D/Addresses getFeatureName(): Pinecrest
- D/Addresses getLocality(): Pinecrest
- D/Addresses getPostalCode(): null
- D/Addresses getPremises(): null
- D/Addresses getSubAdminArea(): Condado de Miami-Dade
- D/Addresses getSubLocality(): null
- D/Addresses getSubThoroughfare(): null
- D/Addresses getThoroughfare(): null
- D/Addresses::来自 getAddressLine() 的地址:索引 n:0:迈阿密,佛罗里达州 33156,索引 n:1:EE。 UU.,
- D/Addresses getAdminArea():佛罗里达州
- D/Addresses getCountryCode():美国
- D/Addresses getCountryName(): Estados Unidos
- D/Addresses getFeatureName(): 33156
- D/Addresses getLocality():迈阿密
- D/Addresses getPostalCode(): 33156
- D/Addresses getPremises(): null
- D/Addresses getSubAdminArea(): null
- D/Addresses getSubLocality(): null
- D/Addresses getSubThoroughfare(): null
- D/Addresses getThoroughfare(): null
- D/Addresses::来自 getAddressLine() 的地址:索引 n:0:Condado de Miami-Dade,索引 n:1:佛罗里达,索引 n:2:EE。 UU.,
- D/Addresses getAdminArea():佛罗里达州
- D/Addresses getCountryCode():美国
- D/Addresses getCountryName(): Estados Unidos
- D/Addresses getFeatureName(): Condado de Miami-Dade
- D/Addresses getLocality(): null
- D/Addresses getPostalCode():null
- D/Addresses getPremises(): null
- D/Addresses getSubAdminArea(): Condado de Miami-Dade
- D/Addresses getSubLocality(): null
- D/Addresses getSubThoroughfare(): null
- D/Addresses getThoroughfare(): null
- D/Addresses::来自 getAddressLine() 的地址:索引 n:0:佛罗里达,索引 n:1:EE。 UU.,
- D/Addresses getAdminArea():佛罗里达州
- D/Addresses getCountryCode():美国
- D/Addresses getCountryName(): Estados Unidos
- D/Addresses getFeatureName():佛罗里达州
- D/Addresses getLocality(): null
- D/Addresses getPostalCode(): null
- D/Addresses getPremises():null
- D/Addresses getSubAdminArea(): null
- D/Addresses getSubLocality(): null
- D/Addresses getSubThoroughfare(): null
- D/Addresses getThoroughfare(): null
- D/Addresses::来自 getAddressLine() 的地址:索引 n:0:Estados Unidos,
- D/Addresses getAdminArea(): null
- D/Addresses getCountryCode():美国
- D/Addresses getCountryName(): Estados Unidos
- D/Addresses getFeatureName(): Estados Unidos
- D/Addresses getLocality(): null
- D/Addresses getPostalCode(): null
- D/Addresses getPremises(): null
- D/Addresses getSubAdminArea(): null
- D/Addresses getSubLocality():null
- D/Addresses getSubThoroughfare(): null
- D/Addresses getThoroughfare(): null
在上面的几组结果中,我们看到产生了 6 组结果 Geocoder,如果我们分析是从具有所有属性的确切地址分层位置,所以只有国家。就好像每一层都是不同的地图,单个国家的地图,州和国家的地图,直到方向和街道的地图,以及来自每个地图的每组 Geocoder 查询结果。
我在哥伦比亚的一个村庄咨询了一个点,
Geocoder 给了我 5 组结果。让我们只分析第一组以与前一组进行比较。
- D/Addresses:开始打印ArrayList
- D/Addresses::来自 getAddressLine() 的地址:索引 n:0:Calle 34 # 36-2 a 36-100,索引 n:1:Palmira,Valle del Cauca,索引 n:2:哥伦比亚,李>
- D/Addresses getAdminArea(): Valle del Cauca
- D/Addresses getCountryCode(): CO
- D/Addresses getCountryName():哥伦比亚
- D/Addresses getFeatureName():362-36100
- D/Addresses getLocality(): Palmira
- D/Addresses getPostalCode():null
- D/Addresses getPremises():null
- D/Addresses getSubAdminArea(): null
- D/Addresses getSubLocality():null
- D/Addresses getSubThoroughfare():362-36100
- D/Addresses getThoroughfare(): Calle 34
唯一的区别是这些结果没有 PostalCode 和 SubAdminArea。
现在,我在埃及咨询了一点:
- D/Addresses:开始打印ArrayList
- D/Addresses::来自 getAddressLine() 的地址:索引 n:0:حارة عابدين,索引 n:1:الزيتون البحرية,索引 n:2:الزيتون,索引 n:3:Gobernación de El Cairo,索引 n: 4:埃及,
- D/Addresses getAdminArea():null
- D/Addresses getCountryCode(): EG
- D/Addresses getCountryName():Egipto
- D/Addresses getFeatureName(): حارة عابدين
- D/Addresses getLocality(): null
- D/Addresses getPostalCode():null
- D/Addresses getPremises():null
- D/Addresses getSubAdminArea(): null
- D/Addresses getSubLocality():null
- D/Addresses getSubThoroughfare(): null
- D/Addresses getThoroughfare(): حارة عابدين
埃及有很多不同;例如,getMaxAddressLine() 抛出 5 个结果,哥伦比亚和美国只有 3 个结果。在哥伦比亚和美国更改国家/地区在getAddressLine() 中的位置顺序是在getAddressLine(2) 埃及是getAddressLine(4)。 getLocality() 应该有城市“开罗”,但没有保存。
总之,Geocoder结果列表是针对各个国家系统的适配,缺少更新。
已经依赖于正在开发的应用程序,优化显示的结果 Geocoder,如果我们向用户显示它所在的位置,最好使用getAddressLine(),但是如果我们需要国家到数据库,则必须使用@987654330 @。如果您想了解更多细节,我们必须确定每个国家或地区的系统并针对每个国家或地区进行开发。