OSMDroid离线地图未加载

时间:2020-02-05 12:48:27

标签: osmdroid

我使用osmdroid试图构建一个离线地图绘制应用程序。

我正在使用从文件服务器以PNG格式生成的地图图块。这些文件以标准的/x/y/z.png文件/目录结构进行组织,并压缩为内部结构为/mapnik/x/y/z.png

的.zip文件。

.zip文件的名称为mapnik.zip(我知道此文件的名称无关紧要)。

我通过将.apk安装在Android Studio中来安装它。

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

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

如果我更改map.setUseDataConnection(false); (true),它将通过互联网加载地图并显示。

不幸的是,我需要它才能唯一地离线运行。

我从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?如果没有,您使用了什么?

2 个答案:

答案 0 :(得分:0)

在您的拉链中,它应具有以下结构

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

在您的情况下,图块源应准确为Mapnik。即map.setTileSource(TileSourceFactory.MAPNIK);必须与图块源名称匹配。查看TileSourceFactory的源代码,以了解如何创建自己的ITileSource。要了解如何创建路径,它是here

还有一个示例数据集here,该数据集将使用名称为cb-wac的图块源

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

答案 1 :(得分:0)

感谢所有贡献者。我是Android开发人员的新手,非常感谢大家的耐心等待。

这正在工作。

我的MainActivity.java如下:

IPV4_ADDRESS, IPV6_ADDRESS

我的.zip文件位于/ storage / emulated / 0 / osmdroid中,其结构如下所述,但.zip文件的根目录为/ Mapnik /。区分大小写。

我现在继续在地图上叠加形状文件。祝我好运!