Android:地址(来自 GeoCode)是不是有固定格式?

Posted

技术标签:

【中文标题】Android:地址(来自 GeoCode)是不是有固定格式?【英文标题】:Android: Does Address(from GeoCode) have fixed format?Android:地址(来自 GeoCode)是否有固定格式? 【发布时间】:2011-09-20 00:10:10 【问题描述】:

我需要确定一个地理位置的地址,所以我使用了 GeoCoder 和 Address,我尝试打印一个 Address 对象并得到以下信息:

(出于隐私原因,我使用了一些虚假数据,但我在设备上收到的数据是真实的)

Address[addressLines=[0:"123 ABC St",1:"Melbourne VIC 1234",2:"Australia"],feature=123,admin=Victoria,sub-admin=null,locality=Melbourne,thoroughfare =ABC St,postalCode=1234,countryCode=AU,countryName=Australia,hasLatitude=true,latitude=-123.321,hasLongitude=true,longitude=123.321,phone=null,url=null,extras=null]

现在我想知道,我可以假设:

    地址行索引 0 始终是街道地址? 索引 1 和 to 是郊区、州、邮政编码对,索引 2 是国家/地区? “feature”其实是门牌号(即123)? “admin”是状态?

如果格式不固定,我如何获取地址信息? 谢谢!

【问题讨论】:

【参考方案1】:

我不认为格式是固定的,你不应该依赖数组索引。来自文档:

反面的细节量 地理编码的位置描述可能 变化,例如一个可能包含 最近的完整街道地址 建筑物,而另一个可能包含 只有城市名称和邮政编码。这 地理编码器类需要一个后端 未包含在服务中的服务 核心安卓框架。

地理编码服务是由我相信在后台运行的谷歌地图服务实现的。您应该使用Address 类来获取您需要的地址元素。

【讨论】:

是的,我使用的是 Address 类,我帖子中的 String 实际上是由 Address 对象的 toString() 方法返回的,我需要知道哪个方法(getThoroughfare()、getFeature() 或什么)返回街道号码和名称。谢谢! 我猜你必须通过反复试验才能找到答案。地理编码器返回的地址信息取决于国家/地区。对美国来说,对其他国家来说可能会有所不同。有些地点根本不返回街道号码。 但是我该怎么做呢?我不能走遍世界所有地方来测试它。 您也可以尝试使用 Google Maps API 反向地理编码器。 code.google.com/apis/maps/documentation/geocoding【参考方案2】:

这里有一个可能有帮助的 sn-p。

-> 使用地理编码器

    String currentAddress = "";

    try 
        Geocoder geoCoder = new Geocoder(context);
        List<Address> adds = geoCoder.getFromLocation(
                        latitude
                        , longitude
                        , 1);

        if (adds!=null && adds.size()>0) 
             Address add = adds.get(0);
             int max = add.getMaxAddressLineIndex();
             if (max!=-1) 
                   for (int i=0; i<max;i++)
                   currentAddress += add.getAddressLine(i) + " ";
             
        

catch (Exception ex) 
     Log.w(TAG, "geocoding_fromandroid->"+ex.toString());
     currentAddress = "";

请记住,并非所有 Android 设备都实现了 GeoCoder :|在这种情况下,您可以直接使用 Google API

->http://code.google.com/apis/maps/documentation/geocoding/

【讨论】:

谢谢,但我如何确定设备上是否有可用的 GeoCoder? @hzxu 您可以通过两种方式确定 GeoCoder 的可用性。 1) 当你遇到异常时2) 使用这个函数,从 api 级别 9 开始 -> link

以上是关于Android:地址(来自 GeoCode)是不是有固定格式?的主要内容,如果未能解决你的问题,请参考以下文章

Google Maps geocode() 循环放置标记

Google Maps API v3:使用 IP 地址多个 LatLng 的 Geocoder.geocode

Google maps api geocode web 服务返回一个添加了点的地址

Fiddler - 被捕获的 IP 地址而不是来自 android 模拟器的 URL

在 Android(java) 中,如何使用 URL 而不是来自互联网的图像地址在 ImageView 中加载图像?

需要来自 CLGeocoder 的坐标超过限制