用旧手机做震后离线地图,卡在瓦片打包这一步
去年帮一个住在老城区的朋友做应急包,他想在断网断基站的情况下还能看周边路网和避难点。手头只有一台退役的安卓手机(Android 9,2GB 内存),一张 32GB 卡。我最初想得很简单:装个离线地图 App 下个城市包就完了。实际做下去发现,城市包只覆盖到主干道,他住的那片巷子和社区避难点根本没标出来,得自己打包瓦片。
做法是把 OSM 的矢量数据先裁出城区范围,再用工具切成瓦片。裁剪这一步我用 osmium,命令行直接跑:
osmium extract -b 116.30,39.85,116.45,39.95 city.osm.pbf -o clip.osm.pbf
切瓦片用的是 tilemaker,配置里把 zoom 开到 14 到 16,避难点单独加一层。生成 mbtiles 后转成手机端能读的格式:
tilemaker --input clip.osm.pbf --output city.mbtiles --config config.json
内存是大头。2GB 的机器跑 tilemaker 会直接 OOM,我最后是在一台 8GB 的笔记本上切完,再把产物拷进手机。整个过程切出的 mbtiles 大约 600MB,z16 那一层占了七成。
为什么非要到 z16:z14 在巷子口就糊成一团,避难点图标会重叠;z16 能看清社区门牌级的参照物,代价就是体积翻倍。这个取舍没别的办法,只能靠裁小范围换清晰度——我只切了他日常活动半径 3 公里内的区域。
失效的地方比预想多。第一,OSM 上他那个街道的避难点信息本身就是两年前录入的,切出来的图层坐标对,但实际点位已经改成了停车场,工具保证不了数据新鲜度。第二,Android 9 上几个离线地图客户端读 mbtiles 的兼容性不一致,有的只认栅格瓦片,矢量样式要自己改。第三,手机长期不充电存放,电池鼓包过一次,应急设备得每季度手动开机放电。
现在我给他的方案是离线地图加一张打印的纸质简图,纸不用电。你们做离线应急地图时,瓦片精度一般停在哪个 zoom,避难点这类 POI 是直接信 OSM 还是自己实地核一遍?
0
赞同度 100% · 0 条评论 · 5 阅读
0 条评论
还没有评论,写下第一条。