如何使用 android 中的 OSM 数据为单个城市实现离线地理编码器?
Posted
技术标签:
【中文标题】如何使用 android 中的 OSM 数据为单个城市实现离线地理编码器?【英文标题】:How can I implement an offline geocoder for a single city using OSM data in android? 【发布时间】:2012-02-09 14:45:45 【问题描述】:我正在尝试开发一个使用特定缩放级别的 OSM 地图图块的离线 android 地图,为此我使用了一个开源库:Osmdroid
现在,我正在研究为单个城市创建离线地理编码/反向地理编码的可能性,该城市可以与我的应用程序集成,
我可以为此目的使用 Osm xml 数据吗?如果是这样,那么任何人都可以建议/解释如何使用它来创建 SQlite db.. 以与我的应用程序一起使用
我阅读了关于 Spatialite 的 here 和 also here 但不能完全理解它的工作和实现
谢谢
【问题讨论】:
你想从反向编码器中得到什么细节? 看看wiki.openstreetmap.org/wiki/Nominatim 请查看 [Mapsforge ](code.google.com/p/mapsforge) 项目。该项目提供了一个 android 库,用于从 OSM 数据中渲染离线地图。 【参考方案1】:使用Skobbler SDK,您可以获得离线地图和(反向)地理编码。
【讨论】:
CartoType (www.cartotype.com) 还提供离线地图、反向地理编码和地址搜索。【参考方案2】:这里有答案 https://***.com/a/64811929/13794189
如下:
要在离线模式下使用 Open Street Maps (OSM),您需要首先实现一个下载管理器,如下面的帖子所示。它具有恢复功能,适用于非常大的文件:
https://***.com/a/64811752/13794189
接下来您可以像这样将下载的 OSM 地图文件加载到 mapView 中:
org.osmdroid.config.IConfigurationProvider osmConf = org.osmdroid.config.Configuration.getInstance();
File basePath = new File(SessionData.offlineMapsDirectoryPath, "osmdroid");
osmConf.setOsmdroidBasePath(basePath);
File tileCache = new File(SessionData.offlineMapsDirectoryPath, "tile");
osmConf.setOsmdroidTileCache(tileCache);
map = (MapView) getActivity().findViewById(R.id.map); // create basic map
//map.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE);
map.setTilesScaledToDpi(true);
map.setMultiTouchControls(true);
map.setUseDataConnection(false);
// add compass to map
//CompassOverlay compassOverlay = new CompassOverlay(getActivity(), new InternalCompassOrientationProvider(getActivity()), map);
//compassOverlay.enableCompass();
//map.getOverlays().add(compassOverlay);
//attach listeners
MapEventsOverlay mapEventsOverlay = new MapEventsOverlay(this);
map.getOverlays().add(0, mapEventsOverlay);
在上面的代码中,SessionData.offlineMapsDirectoryPath 是下载文件的保存路径。
不要忘记在你的 gradle 文件中添加以下实现:
implementation 'org.osmdroid:osmdroid-android:6.1.0'
implementation 'com.github.MKergall:osmbonuspack:6.6.0'
【讨论】:
以上是关于如何使用 android 中的 OSM 数据为单个城市实现离线地理编码器?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 android 应用程序中使用 OSM 地图。?有啥教程可以学习在android中使用OSM吗?
当我触摸地图android Osm时如何关闭infoWindow