Vue使用openlayers加载天地图

 更新时间:2024年02月05日 08:52:47   作者:会说法语的猪  
这篇文章主要为大家详细介绍了Vue如何使用openlayers加载天地图,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解下

申请天地图key

官方:https://www.tianditu.gov.cn/

申请key:https://sso.tianditu.gov.cn/login?service=https%3A%2F%2Fconsole.tianditu.gov.cn%2F

进去之后,先登录,如果没账号先注册一个就行。 

可以创建个应用,创建完成后,会自动生成key。 

安装ol加载天地图 

先安装下 

npm i ol

然后是完整代码: 

<template>
  <div id="map-container"></div>
</template>
<script>
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'
 
export const projection = get("EPSG:4326");
const projectionExtent = projection.getExtent();
const size = getWidth(projectionExtent) / 256;
const resolutions = [];
for (let z = 2; z < 19; ++z) {
  resolutions[z] = size / Math.pow(2, z);
}
 
let map;
export default {
  data() {
    return {
 
    }
  },
  mounted(){
    this.initMap('SL') // 加载矢量底图
    // this.initMap('YX') // 加载影像底图
    // this.initMap('DX') // 加载地形晕渲
  },
  methods:{
    initMap(layerType = 'SL') {
      const TIANDI_KEY = '31499a6260cb9f29558750d04a934256'
 
      // 对应的值是固定的
      const layerTypeMap = {
        'SL': ['vec', 'cva'], // [矢量底图, 矢量注记]
        'YX': ['img', 'cia'], // [影像底图, 影像注记]
        'DX': ['ter', 'cta']  // [地形晕渲, 地形注记]
      }
 
      // c: 经纬度投影 w: 球面墨卡托投影
      const matrixSet = 'c'
 
      map = new Map({
        target: 'map-container',
        layers: [
          // 底图
          new TileLayer({
            source: new WMTS({
              url: `http://t{0-6}.tianditu.com/${layerTypeMap[layerType][0]}_${matrixSet}/wmts?tk=${TIANDI_KEY}`,
              layer: layerTypeMap[layerType][0],
              matrixSet: matrixSet,
              style: "default",
              crossOrigin: 'anonymous', // 解决跨域问题 如无该需求可不添加
              format: "tiles",
              wrapX: true,
              tileGrid: new WMTSTileGrid({
                origin: getTopLeft(projectionExtent),
                //resolutions: res.slice(0, 15),
                resolutions: resolutions,
                matrixIds: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14']
              })
            })
          }),
          // 标注
          new TileLayer({
            source: new WMTS({
              url: `http://t{0-6}.tianditu.com/${layerTypeMap[layerType][1]}_${matrixSet}/wmts?tk=${TIANDI_KEY}`,
              layer: layerTypeMap[layerType][1],
              matrixSet: matrixSet,
              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']
              })
            })
          })
        ],
        view: new View({
          center: [169.40, 65.35],
          projection: projection,
          zoom: 3,
          maxZoom: 17,
          minZoom: 1
        })
      })
    }
  }
}
</script>
<style scoped>
#map-container {
  width: 100%;
  height: 100%;
}
</style>

上面把天地图密钥替换成你第一步申请的key就可以。

上面示例加载了三种天地图:矢量底图、影像底图、地形晕渲 

效果图

下面是效果图:

矢量底图 

影像底图

地形晕渲 

到此这篇关于Vue使用openlayers加载天地图的文章就介绍到这了,更多相关Vue openlayers加载天地图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vuex中使用modules时遇到的坑及问题

    vuex中使用modules时遇到的坑及问题

    这篇文章主要介绍了vuex中使用modules时遇到的坑及问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • Vue 响应式系统依赖收集过程原理解析

    Vue 响应式系统依赖收集过程原理解析

    Vue 初始化时就会通过 Object.defineProperty 拦截属性的 getter 和 setter ,为对象的每个值创建一个 dep 并用 Dep.addSub() 来存储该属性值的 watcher 列表,这篇文章主要介绍了Vue 响应式系统依赖收集过程分析,需要的朋友可以参考下
    2022-06-06
  • Vue中使用v-model双向数据绑定select、checked等多种表单元素的方法

    Vue中使用v-model双向数据绑定select、checked等多种表单元素的方法

     v-model 指令可以用在表单 input、textarea 及 select 元素上创建双向数据绑定,它会根据控件类型自动选取正确的方法来更新元素,本文给大家介绍Vue中如何使用v-model双向数据绑定select、checked等多种表单元素,感兴趣的朋友一起看看吧
    2023-10-10
  • 如何在Vue.JS中使用图标组件

    如何在Vue.JS中使用图标组件

    这篇文章主要介绍了如何在Vue.JS中使用图标组件,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08
  • vue2.x select2 指令封装详解

    vue2.x select2 指令封装详解

    本篇文章主要介绍了vue2.x select2 指令封装详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • 为什么vue中不建议使用空字符串作为className

    为什么vue中不建议使用空字符串作为className

    本文主要介绍了为什么vue中不建议使用空字符串作为className,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Node.js path模块,获取文件后缀名操作

    Node.js path模块,获取文件后缀名操作

    这篇文章主要介绍了Node.js path模块,获取文件后缀名操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • 示例vue 的keep-alive缓存功能的实现

    示例vue 的keep-alive缓存功能的实现

    这篇文章主要介绍了示例vue 的keep-alive缓存功能的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • vue项目中使用qrcodesjs2生成二维码简单示例

    vue项目中使用qrcodesjs2生成二维码简单示例

    最近项目中需生成二维码,发现了很好用的插件qrcodesjs2,所以下面这篇文章主要给大家介绍了关于vue项目中使用qrcodesjs2生成二维码的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • Vue项目Element表格对应字段映射显示方法:formatter格式化数据问题

    Vue项目Element表格对应字段映射显示方法:formatter格式化数据问题

    这篇文章主要介绍了Vue项目Element表格对应字段映射显示方法:formatter格式化数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07

最新评论