如何在安卓系统中使用OSM数据实现一个单城市离线地理编码器?

18

我正在尝试开发一个离线Android地图,使用特定缩放级别的OSM地图瓦片。为此,我使用了一个开源库:Osmdroid

现在,我正在研究创建一个可以与我的应用程序集成的单个城市的离线地理编码/反向地理编码的可能性,

我能否使用Osm xml数据来实现这个目的?如果可以,那么有人能否建议/解释如何使用它来创建SQLite数据库..以供我的应用程序使用

我阅读了这里也在这里关于Spatialite,但无法完全理解其工作原理和实现方式。

谢谢


你想从反编译器中获取哪些细节? - Simon B.
请查看http://wiki.openstreetmap.org/wiki/Nominatim。 - Goldorak84
1
请查看Mapsforge项目。该项目提供了一个Android库,用于从OSM数据渲染离线地图。 - Marco Kunis
2个回答

1

使用Skobbler SDK,您可以获得离线地图和(反向)地理编码。



0
这里有一个答案 https://stackoverflow.com/a/64811929/13794189 并且如下所示:
要在离线模式下使用Open Street Maps(OSM),您需要首先实现一个下载管理器,就像下面链接中的帖子所展示的那样。它具有恢复功能,非常适用于处理非常大的文件:

https://dev59.com/I3E85IYBdhLWcg3wvGKm#64811752

下一步,您可以像这样将下载的OSM地图文件加载到地图视图中:
     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'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接