每个 Android 的 location.Address 方法返回啥?
Posted
技术标签:
【中文标题】每个 Android 的 location.Address 方法返回啥?【英文标题】:What does each Android's location.Address method return?每个 Android 的 location.Address 方法返回什么? 【发布时间】:2014-04-01 12:07:44 【问题描述】:我正试图弄清楚如何使用带有 android.location.Address 类的 Android SDK 获取地址组件。
有些方法很简单,有些方法很容易通过documentation 中的示例理解,但有些方法我完全不清楚。要么是因为文档中没有示例,要么是因为示例指的是美国,而美国的政治组织与其他国家可能不同。
我一直在寻找它们的含义,但是网络上的大多数教程只是使用getAddressLine(int index)
的方法来教,然后由开发人员来学习。
getAdminArea()
:返回州首字母缩写词(“CA”,代表加利福尼亚)
getCountryCode()
:返回国家 ISO 代码(“JP”,代表日本)
getCountryName()
:返回国家名称(“西班牙”,代表...西班牙)
getFeatureName()
:返回地点的名称,如果有的话(“卢浮宫”,对于博物馆)
getLocality()
:返回城市名称(“伦敦”)
getPostalCode()
:返回邮政编码(“94110”,在美国)
getPremises()
:???
getSubAdminArea()
:???
getSubLocality()
:???
getSubThoroughfare()
:???
getThoroughfare()
:返回街道和楼号(“1600 Amphitheatre Parkway”)
我的问题是所有这些方法返回什么(如果可能的话,还有例子)。
另外,我想知道如何分别获取楼号和街道名称。解析 Thoroughfare 字符串似乎并不难,但考虑到在某些国家/地区,数字在街道之前,而在其他国家/地区之后,解析文本的最佳方法是什么?
【问题讨论】:
getFeatureName()
通常返回虚假的废话,例如,getAddressLine(0)
的全部或部分。我从未见过它返回文档所说的返回值。
@BrodoFraggins 只是在调查。即使去埃菲尔铁塔,它也只会返回地址。
getFeatureName()
即使在 4 年后仍然没有返回地名。
再过一年,另一个 Android 版本和 getFeaturename() 仍然没有返回任何有用的信息。
2021 和 getFeatureName()
中仍然没有任何用处
【参考方案1】:
我没有找到关于 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 @。如果您想了解更多细节,我们必须确定每个国家或地区的系统并针对每个国家或地区进行开发。
【讨论】:
看看像新加坡这样的城市国家会发生什么也很有趣。因此,在大部分地区,我得到 city=null 但 country=SG。此外,例如,在埃及亚历山大港,我得到 city=null 但地址的第二行有时会显示某个区域或其他内容。以上是关于每个 Android 的 location.Address 方法返回啥?的主要内容,如果未能解决你的问题,请参考以下文章