OSMDroid离线地图未加载



使用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 中,这是缓存.db和 cache.db-日志文件所在的位置(这个目录结构已经存在(。

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

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

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

我从 https://github.com/TizioFittizio/OsmDroidOfflineMap 那里得到

的代码我的主要活动如下:

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);

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

或者,有没有人这样做过,你是否使用了渗透机器人?如果没有,你用了什么?

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

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

在您的情况下,磁贴源应准确Mapnik。 即map.setTileSource(TileSourceFactory.MAPNIK);必须与磁贴源名称匹配。查看TileSourceFactory的源代码,了解如何创建自己的ITileSource。要了解如何创建路径,请点击此处。

此处还有一个示例数据集,它将使用名为cb-wac的磁贴源

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

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

这现在正在工作。

我的主要活动.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/,即区分大小写。

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

最新更新