我没有找到有关该标准的完整文档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。呃.,
- D/Addresses getAdminArea():佛罗里达州
- D/Addresses getCountryCode()﹕美国
- D/Addresses getCountryName(): 统一国家
- D/地址 getFeatureName():7500
- D/Addresses getLocality(): 迈阿密
- D/地址 getPostalCode()﹕33156
- D/Addresses getPremises():null
- D/Addresses getSubAdminArea():null
- D/Addresses getSubLocality():null
- D/地址 getSubThoroughfare(): 7500
- D/地址 getThoroughfare():SW 120th St
- D/地址::来自 getAddressLine() 的地址:索引 n:0:Pinecrest,佛罗里达州,索引 n:1:EE。呃.,
- D/Addresses getAdminArea():佛罗里达州
- D/Addresses getCountryCode()﹕美国
- D/Addresses getCountryName(): 统一国家
- D/Addresses getFeatureName():Pinecrest
- D/Addresses getLocality():Pinecrest
- D/Addresses getPostalCode():null
- D/Addresses getPremises():null
- D/Addresses getSubAdminArea():Condado de 迈阿密-戴德
- D/Addresses getSubLocality():null
- D/Addresses getSubThoroughfare(): null
- D/Addresses getThoroughfare():null
- D/地址::来自 getAddressLine() 的地址:索引 n:0:迈阿密,佛罗里达州 33156,索引 n:1:EE。呃.,
- D/Addresses getAdminArea():佛罗里达州
- D/Addresses getCountryCode()﹕美国
- D/Addresses getCountryName(): 统一国家
- D/地址 getFeatureName():33156
- D/Addresses getLocality(): 迈阿密
- D/地址 getPostalCode()﹕33156
- D/Addresses getPremises():null
- D/Addresses getSubAdminArea():null
- D/Addresses getSubLocality():null
- D/Addresses getSubThoroughfare(): null
- D/Addresses getThoroughfare():null
- D/地址::来自 getAddressLine() 的地址:索引 n:0:Condado de Miami-Dade,索引 n:1:佛罗里达州,索引 n:2:EE。呃.,
- D/Addresses getAdminArea():佛罗里达州
- D/Addresses getCountryCode()﹕美国
- D/Addresses getCountryName(): 统一国家
- D/Addresses getFeatureName():Condado de 迈阿密-戴德
- D/Addresses getLocality(): null
- D/Addresses getPostalCode():null
- D/Addresses getPremises():null
- D/Addresses getSubAdminArea():Condado de 迈阿密-戴德
- D/Addresses getSubLocality():null
- D/Addresses getSubThoroughfare(): null
- D/Addresses getThoroughfare():null
- D/地址::来自 getAddressLine() 的地址:索引 n:0:佛罗里达州,索引 n:1:EE。呃.,
- D/Addresses getAdminArea():佛罗里达州
- D/Addresses getCountryCode()﹕美国
- D/Addresses getCountryName(): 统一国家
- 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(): 统一国家
- 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
在上面的结果集中,我们看到 Geocoder 产生了 6 组结果,如果我们分析的是从确切地址及其所有属性开始的分层位置,所以只有国家/地区。就好像每一层都是不同的地图,单个国家的地图,州和国家的地图,直到方向和街道的地图,以及每个地图的每组地理编码器查询结果。
我咨询了哥伦比亚一个村庄的一个点,
Geocoder 给了我 5 组结果。我们只分析第一组与前一组进行比较。
- D/Addresses:开始打印ArrayList
- D/地址:: getAddressLine() 中的地址:索引 n:0:Calle 34 # 36-2 a 36-100,索引 n:1:帕尔米拉,Valle del Cauca,索引 n:2:哥伦比亚,
- D/Addresses getAdminArea():考卡山谷
- D/地址 getCountryCode()﹕CO
- D/Addresses getCountryName():哥伦比亚
- D/地址 getFeatureName():362-36100
- D/Addresses getLocality():帕尔米拉
- D/Addresses getPostalCode():null
- D/Addresses getPremises():null
- D/Addresses getSubAdminArea():null
- D/Addresses getSubLocality():null
- D/地址 getSubThoroughfare():362-36100
- D/地址 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/地址 getCountryCode():EG
- D/Addresses getCountryName():Egipto
- 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(): ??????
埃及有很多不同之处;例如,getMaxAddressLine()
抛出5个结果,哥伦比亚和美国只有3个结果。更改国家/地区的位置顺序getAddressLine()
哥伦比亚和美国是getAddressLine(2)
埃及是getAddressLine(4)
. getLocality()
应该有城市“开罗”,但没有保存。
总之,Geocoder 结果列表是针对各个国家/地区系统的适配,并且缺少更新。
已经取决于正在开发的应用程序,为了优化地理编码器显示的结果,如果我们向用户显示它所在的位置,最好使用getAddressLine()
,但是如果我们需要国家数据库,则必须使用getCountry()
。如果你想了解更多细节,我们必须识别每个国家或地区的制度并针对每个国家或地区制定制度。