百度地图离线开发demo(vue+openlayers6+百度瓦片)

 公司需求开发离线地图功能。搜索学习,踩坑,试验(由于参考借鉴了n多文章,就不分别贴出对应文章了。。。),最终整合了一套集成vue的离线地图开发方案,文章将分享一整套的解决方案思路与方式。后续分为各个功能分享,整个项目demo我也会放出。ol为npm安装的方式,同时也有ol5cdn引入的方式,示例有用ol5和ol6加载地图, 其他demo的主要功能我采用npm安装ol6后,按需引入开发。采用ol的方式,主要是百度3.0api离线开发方案太具局限性,万一瓦片更换,或者一些新功能需求无法满足,则会大费周章的去手写。而openlayers正好可以解决这一问题,他可以接入各类瓦片图层,而我们只需要对应的转换投影参考坐标系即可,如我使用了百度地图瓦片,所以只需将投影定义为百度投影。

百度地图离线开发demo(vue+openlayers6+百度瓦片)_第1张图片

 而我们使用的坐标,只需要进行个转换即可。后续如果使用其他地图,应该也可以对应修改投影方式以及转换对应坐标。

(一).所需资源

1.百度瓦片:采用获取瓦片加载的方式,加载离线地图,所以百度瓦片资源必不可少。软件下载瓦片,可以根据需要下载,而我使用的js的api我设置为png,所以类型可以勾选下载png格式,也支持主题自定义,只需要去百度地图个性化主题配置进行一个 配置,然后 讲json导入进来即可。瓦片就是地图请求的一张张瓦片切图,属静态资源放在服务器

百度地图离线开发demo(vue+openlayers6+百度瓦片)_第2张图片

百度地图离线开发demo(vue+openlayers6+百度瓦片)_第3张图片

 

2.openlayers6 安装

OpenLayers - Get the Code 官方地址,有很多demo可以参考以及类说明

 我的ol版本

百度地图离线开发demo(vue+openlayers6+百度瓦片)_第4张图片

初始化地图

// 定义百度投影
const projBD09 = new Projection({
  code:'BD:09',
  extent:[-20037726.37, -11708041.66, 20037726.37, 12474104.17],
  units:'m',
  axisOrientation:'neu',
  global:false
});
// 自定义分辨率
const baiduResolutions = [];

// 计算百度地图使用的分辨率
for(let i = 0; i <= 18; i++){
  baiduResolutions[i] = Math.pow(2, 18 - i);
}

// 自定义瓦片坐标系
const baiduTileGrid = new TileGrid({
  origin:[0, 0], // 将原点设置成和百度瓦片坐标系一致
  resolutions:baiduResolutions // 设置分辨率
});
// 百度地图源
const baiduSource = new TileImage({
  projection:'BD:09',
  tileGrid:baiduTileGrid,
  tilePixelRatio:2,
  tileUrlFunction: function(tileCoord, pixelRatio, proj) {
    let z = tileCoord[0];
    let x = tileCoord[1];
    let y = tileCoord[2];
    if (x < 0) {
      x = (-x);
    }
    if (y < 0) {
      y = (-y) - 1;  //初始化地图时,由于ol6算法有变,必须如此设置,否则瓦片加进来会看不见或者位置对不上
    }

    // 服务器的瓦片地址
    return window.ServerConfig.tilesUrl + 'tiles/' + z + '/' + x + '/' + y + '.png';

  }
});

demo列表,后续增加开发中遇到的需求功能,目前demo是一些普通的基本地图操作,其中聚合点分组功能有进行修改,即对应聚合层级,数值将有实际意义,可在对应的数值范围设置对应的图标与样式

百度地图离线开发demo(vue+openlayers6+百度瓦片)_第5张图片

你可能感兴趣的:(vue.js,学习,javascript)