我使用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?如果没有,您使用了什么?
答案 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 /。区分大小写。
我现在继续在地图上叠加形状文件。祝我好运!