【问题标题】:OSMDroid offline maps not loadingOSMDroid 离线地图未加载
【发布时间】:2020-02-05 12:48:27
【问题描述】:

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

我正在使用从文件服务器生成的 PNG 格式的地图图块。它们以标准的 /x/y/z.png 文件/目录结构进行组织,并压缩为具有内部结构的 .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);为(真)它通过互联网加载地图并显示它。

不幸的是,我需要它以独特的方式离线运行。

我从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 吗?如果没有,你用的是什么?

【问题讨论】:

    标签: osmdroid


    【解决方案1】:

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

    /
    /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)); 可能会帮助您进行调试

    【讨论】:

    • 确认一下,这正是我的 .zip 文件 /mapnik/x/y/z.png 的结构
    • 应该是“Mapnik”,区分大小写
    • 这是正确的,问题是我在 zip 文件中使用了 /mapnik。这应该是 /Mapnik
    【解决方案2】:

    感谢所有做出贡献的人。我是 Android 开发的新手,所以我很感谢人们的耐心。

    现在可以了。

    我的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/ 之外,其结构与描述的一样。区分大小写。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-11
      • 2011-11-29
      • 1970-01-01
      • 1970-01-01
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      相关资源
      最近更新 更多