在 UniApp 中实现天地图离线加载,需提前下载地图瓦片并存储到本地,然后通过自定义图层或本地服务器加载。以下是关键步骤和示例代码:
实现步骤
-
下载天地图瓦片:
- 使用工具(如 QGIS、Mobile Atlas Creator)下载指定区域的瓦片,存储为
z/x/y.png 格式(z 为缩放级别,x、y 为坐标)。
- 瓦片存放位置:UniApp 项目的
static 目录(如 static/tiles/{z}/{x}/{y}.png),确保路径可访问。
-
使用地图组件:
- 若用
map 组件(基于原生地图),需通过 tile-overlay 加载离线瓦片。
- 若用第三方库(如 Leaflet),需在 UniApp 中通过 WebView 或自定义渲染实现。
示例代码(使用 UniApp map 组件)
<template>
<view>
<map
:latitude="latitude"
:longitude="longitude"
:scale="scale"
style="width: 100%; height: 100vh;"
>
<!-- 自定义瓦片图层 -->
<tile-overlay
url-format="static/tiles/{z}/{x}/{y}.png"
:type="0"
/>
</map>
</view>
</template>
<script>
export default {
data() {
return {
latitude: 39.909, // 初始经纬度(北京)
longitude: 116.397,
scale: 10
};
}
};
</script>
注意事项
- 路径问题:确保
url-format 路径与实际存储路径一致。测试时建议使用真机,因 HBuilder 模拟器可能无法正确加载本地文件。
- 瓦片范围:离线瓦片仅覆盖下载区域,超出范围会显示空白。
- 性能优化:大量瓦片可能增加应用体积,建议压缩图片或按需加载。
替代方案
若 tile-overlay 兼容性不佳,可搭建本地服务器(如使用 uni-http 或嵌入轻量级 Web 服务器)通过 http://localhost 提供瓦片,并在 WebView 中加载 Leaflet 地图。
总结:核心是预处理瓦片+正确配置路径。根据实际需求选择合适的地图引擎,并充分测试真机兼容性。