我试图找出如何使用类android.location.Address的Android SDK获取地址组件。

其中一些方法非常简单明了,而另一些方法在documentation中的示例中很容易理解,但是其中一些方法对我来说完全不清楚。可能是因为文档中没有示例,或者是因为该示例涉及美国,而美国的政治组织与其他国家可能不同。

我一直在寻找它们的含义,但是网络上的大多数教程都只使用getAddressLine(int index)方法进行教学,然后由开发人员来学习其余内容。

  • getAdminArea():返回州首字母缩写(“CA”,对于加利福尼亚)
  • getCountryCode():返回国家/地区ISO代码(“JP”,对于日本)
  • getCountryName():返回国家名称(“西类牙”,用于...西类牙)
  • getFeatureName():返回位置名称(如果有的话(对于博物馆为“Louvre”))
  • getLocality():返回城市名称(“伦敦”)
  • getPostalCode():返回邮政编码(“94110”,在美国)
  • getPremises():???
  • getSubAdminArea():???
  • getSubLocality():???
  • getSubThoroughfare():???
  • getThoroughfare():返回街道和建筑物编号(“1600 Amphitheatre Parkway”)

  • 我的问题是所有这些方法都会返回什么(以及示例,如果可能的话)。

    另外,我想知道如何分别获取建筑物编号和街道名称。解析Thoroughfare字符串似乎并不那么困难,但考虑到在某些国家/地区中,数字先出现在街道上,而在其他国家/地区出现在后面,解析文本的最佳方法是什么?

    最佳答案

    我没有找到有关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/地址:开始打印ArrayList
  • D/地址:get来自getAddressLine()的地址:索引n:0:7500 SW 120th St,索引n:1:佛罗里达州迈阿密市33156,索引n:2:EE。 UU。,
  • D/地址getAdminArea():佛罗里达
  • D/地址getCountryCode():美国
  • D/地址getCountryName():Estados Unidos
  • D/地址getFeatureName():7500
  • D/地址getLocality():迈阿密
  • D/地址getPostalCode():33156
  • D/地址getPremises():空
  • D/地址getSubAdminArea():空
  • D/地址getSubLocality():空
  • D/地址getSubThoroughfare():7500
  • D/地址getThoroughfare():SW 120th St
  • D/地址:get getAddressLine()中的地址:索引n:0:佛罗里达派恩克雷斯特,索引n:1:EE。 UU。,
  • D/地址getAdminArea():佛罗里达
  • D/地址getCountryCode():美国
  • D/地址getCountryName():Estados Unidos
  • D/地址getFeatureName():Pinecrest
  • D/地址getLocality():Pinecrest
  • D/地址getPostalCode():空
  • D/地址getPremises():空
  • D/地址getSubAdminArea():迈阿密戴德大街
  • D/地址getSubLocality():空
  • D/地址getSubThoroughfare():空
  • D/地址getThoroughfare():空
  • D/地址:get来自getAddressLine()的地址:索引n:0:佛罗里达州迈阿密33156,索引n:1:EE。 UU。,
  • D/地址getAdminArea():佛罗里达
  • D/地址getCountryCode():美国
  • D/地址getCountryName():Estados Unidos
  • D/地址getFeatureName():33156
  • D/地址getLocality():迈阿密
  • D/地址getPostalCode():33156
  • D/地址getPremises():空
  • D/地址getSubAdminArea():空
  • D/地址getSubLocality():空
  • D/地址getSubThoroughfare():空
  • D/地址getThoroughfare():空
  • D/地址:get getAddressLine()中的地址:索引n:0:迈阿密达德大道,索引n:1:佛罗里达,索引n:2:EE。 UU。,
  • D/地址getAdminArea():佛罗里达
  • D/地址getCountryCode():美国
  • D/地址getCountryName():Estados Unidos
  • D/地址getFeatureName():迈阿密戴德大街
  • D/地址getLocality():空
  • D/地址getPostalCode():空
  • D/地址getPremises():空
  • D/地址getSubAdminArea():迈阿密戴德大街
  • D/地址getSubLocality():空
  • D/地址getSubThoroughfare():空
  • D/地址getThoroughfare():空
  • D/地址:get来自getAddressLine()的地址:索引n:0:佛罗里达,索引n:1:EE。 UU。,
  • D/地址getAdminArea():佛罗里达
  • D/地址getCountryCode():美国
  • D/地址getCountryName():Estados Unidos
  • D/地址getFeatureName():佛罗里达
  • D/地址getLocality():空
  • D/地址getPostalCode():空
  • D/地址getPremises():空
  • D/地址getSubAdminArea():空
  • D/地址getSubLocality():空
  • D/地址getSubThoroughfare():空
  • D/地址getThoroughfare():空
  • D/地址:﹕ getAddressLine()中的地址:索引n:0:Estados Unidos,
  • D/地址getAdminArea():空
  • D/地址getCountryCode():美国
  • D/地址getCountryName():Estados Unidos
  • D/地址getFeatureName():Estados Unidos
  • D/地址getLocality():空
  • D/地址getPostalCode():空
  • D/地址getPremises():空
  • D/地址getSubAdminArea():空
  • D/地址getSubLocality():空
  • D/地址getSubThoroughfare():空
  • D/地址getThoroughfare():空

  • 在上面的结果集中,我们看到生成了6组结果Geocoder,如果我们分析的是从具有所有属性的确切地址出发的分层位置,则仅是国家/地区。好像每个图层都是不同的 map ,单个国家的 map ,州和国家的 map ,直到方向和街道的 map 以及每张 map 的每组Geocoder查询结果。

    我咨询了哥伦比亚一个村庄的一个地点,
    Geocoder给了我5组结果。让我们仅分析第一组以与前一组进行比较。
  • D/地址:开始打印ArrayList
  • D/地址:﹕ getAddressLine()中的地址:索引n:0:Calle 34#36-2 a 36-100,索引n:1:Palmira,Valle del Cauca,索引n:2:哥伦比亚,
  • D/地址getAdminArea():Valle del Cauca
  • D/地址getCountryCode():CO
  • D/地址getCountryName():哥伦比亚
  • D/地址getFeatureName():362-36100
  • D/地址getLocality():Palmira
  • D/地址getPostalCode():空
  • D/地址getPremises():空
  • D/地址getSubAdminArea():空
  • D/地址getSubLocality():空
  • D/地址getSubThoroughfare():362-36100
  • D/地址getThoroughfare():Calle 34

  • 唯一的区别是这些结果没有PostalCode和SubAdminArea。

    现在,我咨询了埃及的一个观点:
  • D/地址:开始打印ArrayList
  • D/地址:﹕来自getAddressLine()的地址:索引n:0:حارةعابدين,索引n:1:الزيتونالبحرية,索引n:2:الزيتون,索引n:3:Gobernaciónde El Cairo,索引n:4: Egipto,
  • D/地址getAdminArea():空
  • D/地址getCountryCode():EG
  • D/地址getCountryName():Egipto
  • D/地址getFeatureName():حارةعابدين
  • D/地址getLocality():空
  • D/地址getPostalCode():空
  • D/地址getPremises():空
  • D/地址getSubAdminArea():空
  • D/地址getSubLocality():空
  • D/地址getSubThoroughfare():空
  • D/地址getThoroughfare():حارةعابدين

  • 埃及有许多分歧。例如,getMaxAddressLine()抛出5个结果,哥伦比亚和美国仅抛出3个结果。更改国家/地区在哥伦比亚和美国的getAddressLine()中的顺序是在getAddressLine(2)中,埃及是getAddressLine(4)getLocality()应该具有城市“Cairo”,但不会保存。

    总之,Geocoder结果列表是针对每个国家/地区的系统的改编版,并且缺少更新。

    已经取决于正在开发的应用程序,为了优化显示在Geocoder中的结果,如果我们向用户显示它所在的位置,最好使用getAddressLine(),但是如果我们需要数据库所在的国家/地区,则必须使用getCountry()。如果您需要更多详细信息,我们必须确定每个国家或地区的系统并针对每个系统或系统进行开发。

    关于java - 每个Android的location.Address方法返回什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22096011/

    10-10 16:15