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/ 之外,结构如描述的那样。区分大小写。
我现在开始在我的地图上叠加形状文件。祝我好运!
我正在尝试使用 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/ 之外,结构如描述的那样。区分大小写。
我现在开始在我的地图上叠加形状文件。祝我好运!