每个Android的location.Address方法返回什么?

Gui*_*rme 7 java android street-address google-geocoding-api

我试图弄清楚如何使用类Android.location.Address获取Android SDK的地址组件.

有些方法非常简单,其他方法很容易通过文档中的示例来理解,但其中一些方法对我来说完全不清楚.要么是因为文档中没有示例,要么因为该示例涉及的美国与其他国家可能没有相同的政治组织.

我一直在寻找他们的意思,但网上的大多数教程只是使用该方法getAddressLine(int index)进行教学,然后由开发人员来学习其余的.

  • getAdminArea():返回州首字母缩略词("CA",加州)
  • getCountryCode():返回国家ISO代码("JP",日本)
  • getCountryName():返回国家名称("西班牙",代表...西班牙)
  • getFeatureName():返回该位置的名称(如果有的话)(博物馆的"卢浮宫")
  • getLocality():返回城市名称("伦敦")
  • getPostalCode():返回邮政编码("94110",在美国)
  • getPremises():???
  • getSubAdminArea():???
  • getSubLocality():???
  • getSubThoroughfare():???
  • getThoroughfare():返回街道和建筑物编号("1600 Amphitheatre Parkway")

我的问题是所有这些方法返回的内容(以及示例,如果可能的话).

另外,我想知道如何分别获得建筑物编号和街道名称.解析Thoroughfare字符串似乎并不那么难,但考虑到在某些国家,这个数字出现在街道之前,而其他国家出现后,解析文本的最佳方法是什么?

Car*_*llo 11

我没有找到关于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());
}
Run Code Online (Sandbox Code Playgroud)

以下是迈阿密经纬度点的结果:

  • D/Addresses:开始打印ArrayList
  • D/Addresses ::来自getAddressLine()的地址:索引n:0:7500 SW 120th St,索引n:1:迈阿密,佛罗里达州33156,索引n:2:EE.UU,
  • D/Addresses getAdminArea():佛罗里达州
  • D/Addresses getCountryCode():US
  • 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():US
  • 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():US
  • 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():US
  • 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():US
  • D/Addresses getCountryName():Estados Unidos
  • D /地址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():US
  • 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óndeEl Cairo,索引n:4:Egipto ,
  • 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(),但如果我们需要国家/地区的数据库,则必须使用getCountry().如果您想了解更多细节,我们必须确定每个国家或地区的系统,并为每个国家或地区进行开发.