Android 反向地理编码需要 Internet 连接或后端数据提供程序

Posted

技术标签:

【中文标题】Android 反向地理编码需要 Internet 连接或后端数据提供程序【英文标题】:Android reverse geocoding requires either an Internet connection or a backend data provider 【发布时间】:2015-08-26 20:42:48 【问题描述】:

我刚刚深入研究了全球定位系统 (GPS) 的世界,发现了以下有趣的事实:

1) androidandroid.location.Geocoder 在通过反向地理编码获取地址时总是返回null。我使用的代码是:

Geocoder mGeocoder = new Geocoder(context, locale);
List<Address> addresses = mGeocoder.getFromLocation(latitude, longitude, 1);
if (!addresses.isEmpty()) 
    // do something.
 else 
    // Display a message regarding no address available.

原因说明here:

Geocoder 类需要一个不包含在 核心android框架。

因此,基本上我要么必须自己提供离线地理定位数据以进行反向地理编码,要么我的 Android 应用必须连接到 Internet 并从 Google 查找地理定位数据(例如通过 http://maps.googleapis.com/maps/api/geocode/json?latlng=)。或者使用其他地理定位提供商,例如OpenStreetMap 等。

2) 谷歌地图等安卓应用需要互联网连接;而像 TomTom 这样的离线提供商将离线地理定位数据与他们的应用程序捆绑在一起,因此不需要互联网连接。

除了上述事实之外,是否有另一种方法可以在不使用离线反向地理数据或使用 Internet 连接的情况下检索地理位置地址?

如果您对 Android 中的地理编码和反向地理编码有一些经验,请发表您的想法。

谢谢。

【问题讨论】:

除了您在帖子中所述的方法外,我不知道还有其他反向地理编码的方法。 对于基于 OSM 的地理编码,您可以尝试使用 Telenav SDK,因为它们带有离线地理编码和反向地理编码:developer.skobbler.com/getting-started/android#sec019 【参考方案1】:

每种方法至少有一种方法。

对于反向地​​理编码,您让用户自己使用 gps 标记地址的地理位置。

对于地理编码,您让用户搜索一组坐标,然后让他读取街道名称和他找到的地址。

【讨论】:

感谢您发布您的答案,但我的要求与您的建议不同。 ;)【参考方案2】:

很少有离线库可用于反向地理编码离线。建议您浏览这些库。我个人没有使用这些库。如果您仍然遇到任何问题,请告诉我。

https://developers.arcgis.com/android/

链接示例代码:

https://github.com/Esri/arcgis-runtime-samples-android/tree/master

【讨论】:

以上是关于Android 反向地理编码需要 Internet 连接或后端数据提供程序的主要内容,如果未能解决你的问题,请参考以下文章

Android 反向地理编码

Android反向地理编码getLocality通常返回null

Android地理编码器反向定位-获取城市的可靠方法?

反向数据编码是啥

单个应用程序中的正向和反向地理编码:需要方向

地理编码器是否需要地图api密钥才能在Android模拟器上运行