openlayers6地图离线开发demo-百度瓦片资源地图初始化

 公司需求开发离线地图功能。搜索学习,踩坑,试验(由于参考借鉴了n多文章,就不分别贴出对应文章了。。。),最终整合了一套集成vue的离线地图开发方案,文章将分享一整套的解决方案思路与方式。后续分为各个功能分享,整个项目demo我也会放出。

ol为npm安装的方式,同时也有ol5cdn引入的方式,示例有用ol5和ol6加载地图, 其他demo的主要功能我采用npm安装ol6后,按需引入开发。采用ol的方式,主要是百度3.0api离线开发方案太具局限性,万一瓦片更换,或者一些新功能需求无法满足,则会大费周章的去手写。而openlayers正好可以解决这一问题,他可以接入各类瓦片图层,而我们只需要对应的转换投影参考坐标系即可,如我使用了百度地图瓦片,所以只需将投影定义为百度投影。

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

(一).所需资源

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

2.openlayers6 安装

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

 我的ol版本

初始化地图

// 定义百度投影
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是一些普通的基本地图操作,其中聚合点分组功能有进行修改,即对应聚合层级,数值将有实际意义,可在对应的数值范围设置对应的图标与样式

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
为了在Vue3中使用OpenLayers显示离线地图,您需要执行以下步骤: 1. 首先,您需要安装OpenLayers和proj4js依赖项。您可以使用以下命令进行安装: ```shell npm install ol proj4 --save ``` 2. 接下来,您需要下载离线地图瓦片。您可以使用QGIS等工具创建自己的离线地图瓦片,或者从第三方提供商下载现成的瓦片。将下载的瓦片放在您的项目中的public文件夹中。 3. 在Vue组件中,您需要导入OpenLayers和proj4js库,并创建一个地图实例。您需要使用proj4js库来设置地图的投影方式。以下是一个示例组件: ```vue <template> <div id="map" class="map"></div> </template> <script> import 'ol/ol.css'; import { Map, View } from 'ol'; import TileLayer from 'ol/layer/Tile'; import OSM from 'ol/source/OSM'; import XYZ from 'ol/source/XYZ'; import proj4 from 'proj4'; export default { name: 'MapComponent', mounted() { // 设置投影方式 proj4.defs('EPSG:3857', '+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs'); // 创建地图实例 const map = new Map({ target: 'map', layers: [ new TileLayer({ source: new XYZ({ url: '/tiles/{z}/{x}/{y}.png', // 离线瓦片路径 }), }), ], view: new View({ center: [0, 0], zoom: 2, projection: 'EPSG:3857', }), }); }, }; </script> <style> .map { height: 500px; } </style> ``` 在上面的示例中,我们使用XYZ源加载离线瓦片,并将其添加到地图图层中。我们还设置了地图的投影方式为EPSG:3857。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值