我刚刚研究了全球定位系统(GPS)的世界,发现了以下有趣的事实:
1]通过反向地址编码获取地址时,Android类android.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)像Google Maps这样的Android应用程序需要Internet连接;而像TomTom这样的离线提供商则将离线地理位置数据与他们的应用程序捆绑在一起,因此不需要Internet连接。
除了上述陈述的事实之外,还有另一种替代方法来获取地理位置地址而不使用离线反向地理数据或使用Internet连接吗?
[如果您在Android中具有地理编码和反向地理编码的经验,请发表您的想法。
谢谢。
对于反向地理编码,您可以让用户使用gps标记地址的地理位置。
对于地理编码,您让用户搜寻一组坐标,然后让他读取街道名称和他发现的地址。
https://developers.arcgis.com/android/
链接的示例代码:
https://github.com/Esri/arcgis-runtime-samples-android/tree/master
它使用OpenStreetMap数据并将其存储在SQLite中。您可以从数据源网站下载osm数据,然后使用此库将其导入数据库,然后可以查询地址。
有关文档和示例代码,请参阅readme.md。
注意:数据导入操作需要很长时间,而查询操作最多可能需要5分钟。该项目仍在进行中。