当前位置: 首页 > article >正文

Vue2+OpenLayers添加缩放、滑块缩放、拾取坐标、鹰眼、全屏控件(提供Gitee源码)

目录

一、案例截图

二、安装OpenLayers库

三、代码实现

四、Gitee源码


一、案例截图

二、安装OpenLayers库

npm install ol

三、代码实现

废话不多说,直接给完整代码,替换成自己的KEY即可运行:

<template>
  <div>
    <div id="map-container"></div>
    <div id="scaleLine-map"></div>
  </div>
</template>
<script>
// 引入 OpenLayers 的 CSS
import "ol/ol.css";
import { Map, View } from 'ol'
import { Tile as TileLayer } from 'ol/layer'
import { get } from 'ol/proj';
import { getWidth, getTopLeft } from 'ol/extent'
import { WMTS } from 'ol/source'
import WMTSTileGrid from 'ol/tilegrid/WMTS'
import {
  defaults as defaultControls,
  FullScreen,
  MousePosition,
  OverviewMap,
  ScaleLine,
  Zoom,
  ZoomSlider
} from 'ol/control';

export const projection = get("EPSG:4326");
const projectionExtent = projection.getExtent();
const size = getWidth(projectionExtent) / 256;
const resolutions = [];
for (let z = 0; z < 19; ++z) {
  resolutions[z] = size / Math.pow(2, z);
}

export default {
  data() {
    return {
      map:null,
    }
  },
  mounted(){
    this.initMap() // 加载矢量底图
  },
  methods:{
    initMap() {
      const KEY = '你申请的KEY'
      const overviewMapControl = new OverviewMap({
        className: "ol-overviewmap ol-custom-overviewmap",
        // 父元素ID
        // target: 'overview-map',
        //不使用主视图使用过的图层,否则会出现闪烁、空白的问题
        layers: [
          // 底图
          new TileLayer({
            source: new WMTS({
              url: `http://t{0-6}.tianditu.com/vec_c/wmts?tk=${KEY}`,
              layer: 'vec', // 矢量底图
              matrixSet: 'c', // c: 经纬度投影 w: 球面墨卡托投影
              style: "default",
              crossOrigin: 'anonymous', // 解决跨域问题 如无该需求可不添加
              format: "tiles", //请求的图层格式,这里指定为瓦片格式
              wrapX: true, // 允许地图在 X 方向重复(环绕)
              tileGrid: new WMTSTileGrid({
                origin: getTopLeft(projectionExtent),
                resolutions: resolutions,
                matrixIds: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15','16','17','18']
              })
            })
          }),
          // 标注
          new TileLayer({
            source: new WMTS({
              url: `http://t{0-6}.tianditu.com/cva_c/wmts?tk=${KEY}`,
              layer: 'cva', //矢量注记
              matrixSet: 'c',
              style: "default",
              crossOrigin: 'anonymous',
              format: "tiles",
              wrapX: true,
              tileGrid: new WMTSTileGrid({
                origin: getTopLeft(projectionExtent),
                resolutions: resolutions,
                matrixIds: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15','16','17','18']
              })
            })
          })
        ],
        //初始为展开显示方式
        collapsed: false,
      });
      // 添加比例尺控件
      const scaleLine = new ScaleLine({
        units: 'metric', // 设置为米制
        target: 'scaleLine-map',
      });

      // 添加缩放控件
      const zoom = new Zoom();

      // 添加滑块缩放控件
      const zoomSlider = new ZoomSlider();

      //全屏控件
      const fullScreen = new FullScreen();

      //拾取坐标控件
      const mousePosition = new MousePosition({
        // 设置空间参考系统为'EPSG:4326'
        projection:'EPSG:4326',
      })
      this.map = new Map({
        target: 'map-container',
        layers: [
          // 底图
          new TileLayer({
            source: new WMTS({
              url: `http://t{0-6}.tianditu.com/vec_c/wmts?tk=${KEY}`,
              layer: 'vec', // 矢量底图
              matrixSet: 'c', // c: 经纬度投影 w: 球面墨卡托投影
              style: "default",
              crossOrigin: 'anonymous', // 解决跨域问题 如无该需求可不添加
              format: "tiles", //请求的图层格式,这里指定为瓦片格式
              wrapX: true, // 允许地图在 X 方向重复(环绕)
              tileGrid: new WMTSTileGrid({
                origin: getTopLeft(projectionExtent),
                resolutions: resolutions,
                matrixIds: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15','16','17','18']
              })
            })
          }),
          // 标注
          new TileLayer({
            source: new WMTS({
              url: `http://t{0-6}.tianditu.com/cva_c/wmts?tk=${KEY}`,
              layer: 'cva', //矢量注记
              matrixSet: 'c',
              style: "default",
              crossOrigin: 'anonymous',
              format: "tiles",
              wrapX: true,
              tileGrid: new WMTSTileGrid({
                origin: getTopLeft(projectionExtent),
                resolutions: resolutions,
                matrixIds: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15','16','17','18']
              })
            })
          })
        ],
        view: new View({
          center: [113.082753,28.180449],
          projection: projection,
          zoom: 12,
          maxZoom: 17,
          minZoom: 1
        }),
        //加载控件到地图容器中
        controls: defaultControls({
          zoom: false,
          rotate: false,
          attribution: false
        }).extend([overviewMapControl,scaleLine,zoom,mousePosition,zoomSlider,fullScreen])
      })
    }
  }
}
</script>
<style scoped>
#map-container {
  width: 100%;
  height: 100vh;
}
#scaleLine-map {
  position: relative;
  margin-left: 200px;
}
</style>

四、Gitee源码

地址: Vue2+OpenLayers添加缩放、滑块缩放、拾取坐标、鹰眼、全屏控件


http://www.kler.cn/a/512698.html

相关文章:

  • 20250120 深入了解 Apache Flink 的 Checkpointing
  • Vscode:问题解决办法 及 Tips 总结
  • 【Leetcode 每日一题】2239. 找到最接近 0 的数字
  • CMD批处理命令入门(6)——常用的特殊字符
  • 解锁辅助驾驶新境界:基于昇腾 AI 异构计算架构 CANN 的应用探秘
  • 搭建一个基于Spring Boot的书籍学习平台
  • 从密码学原理与应用新方向到移动身份认证与实践
  • 【三国游戏——贪心、排序】
  • 国自然面上项目|基于组合机器学习算法的病理性近视眼底多模态影像资料自动化定量分析研究|基金申请·25-01-18
  • 04、Redis从入门到放弃 之 数据持久化RDB和AOF
  • 相机成像及参数原理入门
  • python转转商超书籍信息爬虫
  • B站评论系统的多级存储架构
  • STM32补充——FLASH
  • Qt之文件系统操作和读写
  • 基于海思soc的智能产品开发(视频的后续开发)
  • 什么宠物最好养?
  • PhyCAGE:符合物理规律的图像到 3D 生成
  • 思维的进化:从链式推理到元链式推理的算法探秘
  • go语言两个协程goroutine交替打印1-100
  • 解决用 rm 报bash: /usr/bin/rm: Argument list too long错
  • Javascript 将页面缓存存储到 IndexedDB
  • BH1750使用程序
  • 基于SpringBoot和PostGIS的各国及所属机场信息检索及可视化实现
  • Debian常用命令
  • C 语言雏启:擘画代码乾坤,谛观编程奥宇之初瞰