android - Android Studio如何使用osmdroid和mbtiles显示离线地图
问题描述
我们正在开发一款必须显示一个特定位置(例如 3-7 个相邻岛屿)的离线地图的 Android 应用程序。我们成功地展示了整个世界,但这太重了。当手机离线时,地图的缩放有限(变得模糊并开始滞后)。
我设想该应用程序类似于 Maps.me,如果您处于离线状态,您可以连续放大下载的地图。一直在尝试了解https://github.com/osmdroid/osmdroid/wiki/Offline-Map-Tiles并在 2 天半之后,我能够使用 Maperitive 获得 mbtiles。但是从那里开始,我对下一步是什么感到困惑。从github教程中,我被困在这里:https ://github.com/osmdroid/osmdroid/wiki/Offline-Map-Tiles#using-offline-tile-archives 这是否意味着我必须手动将mbtiles放到路径还是有办法自动(或通过代码)存储和使用mbtiles?
几周前我刚开始学习 osm 和 android studio,我需要帮助。很糟糕。有人请赐教。
解决方案
- 您可以将磁贴存档托管在您提供给应用用户下载的服务器上
- 您可以使用 CacheManager 实用程序使您的用户能够在离线之前缓存和/或永久存档给定区域的切片
- 正如@Josef Adamcik 所说,如果瓷砖数量很少,您可以将它们直接放入
/assets/YourTileSourceHere
. 然后告诉 osmdroid 使用匹配该名称的地图瓦片源 - 如果磁贴存档很小,您也可以将其放入,
raw
然后在安装时将其复制到 osmdroid 可以读取的位置,例如/data/data/yourpackagename
(这也称为应用程序私有存储或复制到 /sdcard/osmdroid 或任何您想要的地方,只需使用 Configuration.getInstance().set.... 方法为其配置路径。
如果您有改进 wiki 的建议,请告诉我
推荐阅读
- docker - Docker volume vs Kubernetes persistent volume
- sql-server - 关于 t-sql SUM func 的奇怪 ssms 结果,无法弄清楚
- ruby-on-rails - 当用户在 Devise 中注销时如何避免重定向?
- python - UnicodeDecodeError:“utf-8”编解码器无法解码位置 1023 中的字节 0xe2:数据意外结束
- android - React-Native FlatList 在 Android 上不滚动
- c# - 如何动态创建按钮并添加不同的事件处理程序?
- formatting - 通过在 Eclipse CDT 中修改 AST 来停止代码格式化
- scala - 运行 sbt 时可以指定要编译的目录吗?
- parsing - 使用 Haskell 将随机嵌套列表展平为非嵌套列表
- c# - 如何从 sql 数据库中获取图像数据