脱离网络数据API!本地文件实现百度瓦片地图绘制!

496 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情

前言

掘友们,大家好啊!本篇文章接上篇 脱离后台api,离线渲染中国地图! ,继续为大家讲述中国地图点击省份模块后,如何使用离线瓦片地图渲染街道路线数据,并挂载图标展示位置信息。

大家在阅读本篇文章之前,可以先阅读一下上篇文章哦,希望对大家有所帮助!

预览效果

image.png

可能会遇到的问题

问题一:离线渲染街道,网络请求无法使用

解决方法:

此处小编使用的是百度瓦片地图,是开源的,适用于JavaScript API开发。但是百度瓦片地图在使用的时候,是通过网络请求获取瓦片拼接的。我们的项目要求在导出的html离线报告中使用,路径是本地路径,无法调取API。

因为是离线渲染,所以小编下载了百度地图的mapAPI文件。mapAPI文件下载地址:pan.baidu.com/s/1Xywybhlu… 提取码: mz2y,

文件下载之后我们需要在项目中引入,放置在static静态目录下。mapAPIjs文件还需要在index.html文件中引入,否则不会起到作用!

image.png

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>html_report</title>
  </head>
  <body>
    <div id="app"></div>
  </body>
  <script src="static/map/apiv2.0.min.js" type="text/javascript"></script>
  <script src="static/map/CurveLine.min.js" type="text/javascript"></script>
  <script src="static/map/getmodules.js" type="text/javascript"></script>
</html>

问题二:考虑离线瓦片地图,瓦片数量庞大

解决方法:

瓦片地图其实就是一张张的地图图片拼接起来的,通过缩放地图,API获取不同路径下的图片路径。但是考虑到我们需要在本地路径下获取瓦片的路径,就需要提前准备好瓦片的图片信息。官方提供的瓦片数据量特别大,我们不可能每一张图片都存储到本地路径中。

所以小编只获取了九级的瓦片地图,放置在静态资源static目录下,

代码实现

大家可以通过官方文档产看,声明实例,创建百度地图

1.创建地图实例 minZoom为最小的缩放层级,maxZoom为最大的缩放层级

this.map = new BMap.Map("map-analysis-details", { minZoom: 1, maxZoom: 9, });

2.创建中心点坐标

let point = new BMap.Point(121.557237, 29.876976);

3.设置中心点坐标

this.map.centerAndZoom(point, 5);

4.设置地图缩放,添加滚轮事件

enableScrollWheelZoom

5.启动键盘上下左右移动地图

this.map.enableKeyboard();

这里是小编创建实例后生成的点,渲染到图例上,并且绑定点击事件和缩放事件,因为数据源是本地数据,随后我将项目文件上传到github上,大家可以拉取项目运行查看

this.map.addEventListener("click", (e) => {  // 点击事件
     // 需要执行的函数
});
this.map.addEventListener("zoomend", () => {  // 缩放事件
})

问题三:如何在缩放的情况下,调用本地瓦片地图

我们已经将瓦片文件放置在静态资源的文件夹下,还需要更改api配置文件,设置返回瓦片地图的路径。

进入apiv2.0.min.js文件,搜索Uc.getTilesUrl,此时path就是你放置瓦片地图的静态文件夹,注意不要使用绝对路径,否则代码在执行的时候会从根路径查找,就无法获取到准确的图片路径,z,x,y则是百度地图api自动生成的文件层级,无需修改。

image.png

总结:

希望这篇文章对大家有所帮助。小编也在不断的成长,还需大家给予更多的鼓励!不断学习,不断进步!

项目地址:github.com/huangzhilei…

我已经把项目上传到了github,大家可以拉下来阅读下,有意见或者不太懂的可以问小编,小编会一一解答的。

项目启动:

npm i // 下载npm 安装依赖
npm run dev // 项目启动命令