OSMDroid 离线地图未加载

OSMDroid offline maps not loading

我正在尝试使用 osmdroid 构建离线地图应用程序。

我正在使用从文件服务器生成的 PNG 格式的地图图块。它们以标准 /x/y/z.png file/directory 结构组织,并压缩成具有内部结构的 .zip 文件:/mapnik/x/y/z.png

.zip 文件的名称是 mapnik.zip(我知道这个文件的名称无关紧要)。

我通过在 Android Studio 中构建 .apk 安装了它。

我尝试将 .zip 文件放在 /storage/emulated/0/osmdroid 和 /storage/emulated/0/osmdroid/tiles 中,这是 cache.db 和 cache.db-journal 文件所在的位置(此目录结构已经存在)。

当我 运行 应用程序 运行 时,它显示的是空白网格而不是地图。

如果我改变map.setUseDataConnection(false);为 (true) 它通过 Internet 加载地图并显示它。

不幸的是,我需要这个才能 运行 独一无二地离线。

我从 https://github.com/TizioFittizio/OsmDroidOfflineMap

获得的代码

我的MainActivity如下:

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MapView map = (MapView) findViewById(R.id.map);
        map.setUseDataConnection(false);

        map.setTileSource(TileSourceFactory.MAPNIK);

        IMapController controller = map.getController();
        GeoPoint startPoint = new GeoPoint(37.370925, -5.972684);
        controller.setCenter(startPoint);
        Marker startMarker = new Marker(map);
        startMarker.setPosition(startPoint);
        startMarker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM);
        map.getOverlays().add(startMarker);

        controller.setZoom(8);
        map.setMinZoomLevel(6);
        map.setMaxZoomLevel(15);

有人知道我做错了什么吗?

或者,还有其他人这样做过吗?您使用过 osmdroid 吗?如果没有,您使用了什么?

在您的 zip 中,它应该具有以下结构

/
/tileSource
/tileSource/0/0/0.png

在您的情况下,图块源应该是 Mapnik。即 map.setTileSource(TileSourceFactory.MAPNIK); 必须匹配图块源名称。查看 TileSourceFactory to get an idea of how to create your own ITileSource. To get an idea of how the path is created, it is here.

的来源

还有一个示例数据集 here,它将使用名称为 cb-wac

的图块源

如果您仍然遇到问题, Configuration.getInstance().setDebugMode(true)); Configuration.getInstance().setDebugTileProviders(true)); 可能有助于调试

感谢所有做出贡献的人。我是 Android dev 的新手,所以我很感谢大家的耐心等待。

现在可以使用了。

我的MainActivity.java如下:

@Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    map = (MapView) findViewById(R.id.map);
    map.setTileSource(TileSourceFactory.MAPNIK);
    map.setUseDataConnection(false);
    map.getZoomController().setVisibility(CustomZoomButtonsController.Visibility.ALWAYS);
    map.setMultiTouchControls(true);

    IMapController mapController = map.getController();
    mapController.setZoom(13.0);
    map.setMinZoomLevel(7.0);
    map.setMaxZoomLevel(19.0);

    map.setClickable(true);

    GeoPoint startPoint = new GeoPoint(37.3691, -5.97907);
    mapController.setCenter(startPoint);

我的 .zip 文件在 /storage/emulated/0/osmdroid 中,除了 .zip 文件的根目录是 /Mapnik/ 之外,结构如描述的那样。区分大小写。

我现在开始在我的地图上叠加形状文件。祝我好运!