What does each Android's location.Address method return?

拟墨画扇 提交于 2019-12-03 07:25:49
Carlos Alberto Murillo

I did not find complete documentation on the standard that android.location.Address uses to identify and store the address globally, so I made several address queries from different countries in order to interpret the results.

As Guilherme says, we have getAddressLine(int index) and a list of methods to extract every element of an address.

This post is not intended to explain the code, but I put it here for those who need to see it.

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());
}

Here are the results from a point with latitude and longitude in Miami:

  • D/Addresses﹕ Start to print the ArrayList
  • D/Addresses:﹕ Addresses from getAddressLine(): index n: 0: 7500 SW 120th St, index n: 1: Miami, Florida 33156, index n: 2: EE. UU.,
  • D/Addresses getAdminArea()﹕ Florida
  • D/Addresses getCountryCode()﹕ US
  • D/Addresses getCountryName()﹕ Estados Unidos
  • D/Addresses getFeatureName()﹕ 7500
  • D/Addresses getLocality()﹕ Miami
  • 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:﹕ Addresses from getAddressLine(): index n: 0: Pinecrest, Florida, index n: 1: EE. UU.,
  • D/Addresses getAdminArea()﹕ Florida
  • 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:﹕ Addresses from getAddressLine(): index n: 0: Miami, Florida 33156, index n: 1: EE. UU.,
  • D/Addresses getAdminArea()﹕ Florida
  • D/Addresses getCountryCode()﹕ US
  • D/Addresses getCountryName()﹕ Estados Unidos
  • D/Addresses getFeatureName()﹕ 33156
  • D/Addresses getLocality()﹕ Miami
  • 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:﹕ Addresses from getAddressLine(): index n: 0: Condado de Miami-Dade, index n: 1: Florida, index n: 2: EE. UU.,
  • D/Addresses getAdminArea()﹕ Florida
  • 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:﹕ Addresses from getAddressLine(): index n: 0: Florida, index n: 1: EE. UU.,
  • D/Addresses getAdminArea()﹕ Florida
  • D/Addresses getCountryCode()﹕ US
  • D/Addresses getCountryName()﹕ Estados Unidos
  • D/Addresses getFeatureName()﹕ Florida
  • 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:﹕ Addresses from getAddressLine(): index 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

In the above sets of results, we see that yielded 6 sets of results Geocoder, if we analyze are layered location from the exact address with all its attributes, so only the country. It is as if each layer was a different map, a map of single countries, map of states and countries, until the map for directions and streets, and every set of Geocoder query results from each map.

I consulted a point in a village in Colombia, Geocoder gave me 5 sets of results. Let's analyze only the first set to compare with the previous one.

  • D/Addresses﹕ Start to print the ArrayList
  • D/Addresses:﹕ Addresses from getAddressLine(): index n: 0: Calle 34 # 36-2 a 36-100, index n: 1: Palmira, Valle del Cauca, index n: 2: Colombia,
  • D/Addresses getAdminArea()﹕ Valle del Cauca
  • D/Addresses getCountryCode()﹕ CO
  • D/Addresses getCountryName()﹕ Colombia
  • 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

The only difference is that these results have no PostalCode and SubAdminArea.

Now, I consulted a point in Egypt:

  • D/Addresses﹕ Start to print the ArrayList
  • D/Addresses:﹕ Addresses from getAddressLine(): index n: 0: حارة عابدين, index n: 1: الزيتون البحرية, index n: 2: الزيتون, index n: 3: Gobernación de El Cairo, index 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()﹕ حارة عابدين

Egypt has many differences; for example, getMaxAddressLine() throws 5 results, Colombia and the United States only 3 results. Changing the order of the country's location in getAddressLine() in Colombia and USA is in getAddressLine(2) Egypt is getAddressLine(4). getLocality() should have the city "Cairo", but is not saved.

In conclusion, Geocoder results list is an adaptation for the system in each country, and the update is missing.

Already depends on application being developed, to optimize results shown Geocoder, if we show the user where it is located, it is best to use getAddressLine(), but if we need the country to a database, you must use getCountry(). If you want more details, we must identify the system of each country or region and develop for each.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!