18

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

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

我可以为此目的使用 Osm xml 数据吗?如果是这样,那么任何人都可以建议/解释如何使用它来创建 SQlite db .. 与我的应用程序一起使用

我在这里这里都读过关于 Spatialite
但不太了解它的工作和实现

谢谢

4

2 回答 2

1

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

于 2014-09-12T19:24:05.963 回答
0

这在这里有一个答案 https://stackoverflow.com/a/64811929/13794189

如下:

要在离线模式下使用 Open Street Maps (OSM),您需要首先实现一个下载管理器,就像下面的帖子中显示的那样。它具有恢复功能,适用于非常大的文件:

https://stackoverflow.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'
于 2020-11-12T21:19:16.350 回答