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

网站后台内容管理大学生做网站赚钱

网站后台内容管理,大学生做网站赚钱,农产品电子商务网站建设要求,互联网推广员前言在前面的文章中,我们学习了地图的基础操作控件。本文将深入探讨OpenLayers中的图层管理功能,教大家如何实现多图层的动态显示与隐藏控制。通过复选框组件,用户可以灵活切换不同的地图图层,包括OSM开源地图、天地图的矢量图层、…

前言

在前面的文章中,我们学习了地图的基础操作控件。本文将深入探讨OpenLayers中的图层管理功能,教大家如何实现多图层的动态显示与隐藏控制。通过复选框组件,用户可以灵活切换不同的地图图层,包括OSM开源地图、天地图的矢量图层、影像图层以及相应的注记图层。

项目结构分析

<template><div id="map"><div class="MapTool"><el-checkbox-group v-model="checkList"><el-checkbox label="OSM" @change="checked=>layerCtl(checked,0)"></el-checkbox><el-checkbox label="矢量图层" @change="checked=>layerCtl(checked,1)"></el-checkbox><el-checkbox label="矢量注记" @change="checked=>layerCtl(checked,2)"></el-checkbox><el-checkbox label="影像图层" @change="checked=>layerCtl(checked,3)"></el-checkbox><el-checkbox label="影像注记" @change="checked=>layerCtl(checked,4)"></el-checkbox></el-checkbox-group></div></div>
</template>

模板结构详解:

  • 地图容器: id="map" 作为地图挂载点
  • 控制面板: .MapTool 包含图层控制组件
  • 复选框组: el-checkbox-group 实现多选功能,通过 v-model 双向绑定数据
  • 单个复选框: 每个 el-checkbox 对应一个图层,@change 事件传递选中状态和图层索引

依赖引入详解

import {Map, View} from 'ol'
import {XYZ, OSM} from 'ol/source'
import TileLayer from 'ol/layer/Tile'

依赖说明:

  • Map, View: OpenLayers的核心类
  • XYZ: 用于加载XYZ瓦片服务的数据源(天地图使用此格式)
  • OSM: OpenStreetMap数据源
  • TileLayer: 瓦片图层类,用于显示栅格瓦片数据

数据属性初始化

data(){return{map:null,           // 地图实例checkList:["OSM"]   // 复选框选中状态数组,默认选中OSM}
}

属性说明:

  • map: 存储地图实例对象
  • checkList: 与 el-checkbox-group 双向绑定,控制哪些复选框被选中

图层创建与配置

1. OSM图层创建

var osm = new TileLayer({name: "OSM",source: new OSM()//加载OpenStreetMap
})

特点分析:

  • 使用OpenStreetMap免费开源地图数据
  • 默认可见(visible 属性默认为true)
  • 提供全球范围的基础地图服务

2. 天地图矢量图层

var TiandiMap_vec = new TileLayer({name: "天地图矢量图层",source: new XYZ({url: "http://t0.tianditu.com/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=你的key请去天地图官网申请",}),visible:false
});

配置详解:

  • name: 图层名称,便于管理和识别
  • source: 使用XYZ数据源连接天地图服务
  • url: 天地图矢量服务地址,包含瓦片坐标参数 {x}{y}{z} 和API密钥 tk
  • visible: false: 初始状态为隐藏
  • T=vec_w: 表示全球矢量地图(vec表示矢量,w表示Web墨卡托投影)

3. 天地图矢量注记图层

var TiandiMap_cva = new TileLayer({name: "天地图矢量注记图层",source: new XYZ({url: "http://t0.tianditu.com/DataServer?T=cva_w&x={x}&y={y}&l={z}&tk=你的key请去天地图官网申请",wrapX: false}),visible:false
});

新增配置:

  • T=cva_w: 矢量注记图层(cva表示矢量注记)
  • wrapX: false: 禁止X轴方向的重复平铺,避免注记重复显示

4. 天地图影像图层

var TiandiMap_img = new TileLayer({name: "天地图影像图层",source: new XYZ({url: "http://t0.tianditu.com/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=你的key请去天地图官网申请",}),visible:false
});

功能说明:

  • T=img_w: 影像图层(img表示卫星影像)
  • 提供高清卫星图像数据
  • 适用于需要详细地物信息的应用场景

5. 天地图影像注记图层

var TiandiMap_cia = new TileLayer({name: "天地图影像注记图层",source: new XYZ({url: "http://t0.tianditu.com/DataServer?T=cia_w&x={x}&y={y}&l={z}&tk=你的key请去天地图官网申请",}),visible:false
});

用途分析:

  • T=cia_w: 影像注记图层(cia表示影像注记)
  • 通常与影像图层叠加使用,提供地名、道路名称等文字标注
  • 增强地图的可读性和导航功能

地图初始化

this.map=new Map({target:'map',layers:[osm, TiandiMap_vec, TiandiMap_cva, TiandiMap_img, TiandiMap_cia],view:new View({center: [113.24981689453125, 23.126468438108688],projection: "EPSG:4326",zoom: 12})
})

配置说明:

  • layers数组: 按顺序添加所有图层,索引顺序很重要(对应复选框的index参数)
  • 图层顺序: 数组中靠后的图层会显示在上层
  • 中心点: 设置为广州地区坐标

核心控制方法

图层控制方法 (layerCtl)

layerCtl(checked,index){console.log(checked)let layers = this.map.getLayers();console.log(layers)layers.getArray()[index].setVisible(checked)
}

方法详解:

参数说明:
  • checked: 布尔值,表示复选框的选中状态(true/false)
  • index: 数字,表示图层在layers数组中的索引位置
执行步骤:
  1. 获取图层集合: this.map.getLayers() 返回地图的图层集合对象
  2. 转换为数组: getArray() 将图层集合转换为JavaScript数组
  3. 设置可见性: setVisible(checked) 根据复选框状态控制图层显示/隐藏
图层索引对应关系:
索引图层名称对应复选框
0OSM"OSM"
1天地图矢量图层"矢量图层"
2天地图矢量注记图层"矢量注记"
3天地图影像图层"影像图层"
4天地图影像注记图层"影像注记"

复选框事件处理

事件绑定分析

@change="checked=>layerCtl(checked,0)"

箭头函数详解:

  • checked: Element UI复选框change事件的参数,表示当前选中状态
  • 箭头函数: checked=>layerCtl(checked,0) 是ES6箭头函数的简写
  • 等价写法: function(checked){ this.layerCtl(checked,0) }

双向绑定机制

<el-checkbox-group v-model="checkList"><el-checkbox label="OSM" @change="checked=>layerCtl(checked,0)"></el-checkbox>
</el-checkbox-group>

绑定流程:

  1. v-model="checkList" 将选中的label值存储到checkList数组
  2. @change 事件触发图层可见性控制
  3. 用户操作复选框 → 更新checkList → 触发change事件 → 调用layerCtl方法

天地图服务详解

URL参数说明

天地图服务URL格式:

http://t0.tianditu.com/DataServer?T={type}&x={x}&y={y}&l={z}&tk={token}
参数详解:
  • T: 服务类型
  • vec_w: 矢量地图
  • cva_w: 矢量注记
  • img_w: 影像地图
  • cia_w: 影像注记
  • x, y, z: 瓦片坐标参数(由OpenLayers自动替换)
  • tk: API密钥(需要在天地图官网申请)

图层组合建议

常用组合方案:

  1. 矢量地图模式: OSM + 天地图矢量图层 + 矢量注记
  2. 影像地图模式: 天地图影像图层 + 影像注记
  3. 对比模式: 可同时显示多个图层进行对比

核心API方法总结

Map对象方法:

方法功能返回值示例
getLayers()获取图层集合Collectionmap.getLayers()

图层集合方法:

方法功能返回值示例
getArray()转换为数组Arraylayers.getArray()

图层对象方法:

方法功能参数示例
setVisible(visible)设置可见性Booleanlayer.setVisible(true)
getVisible()获取可见性-layer.getVisible()

实际应用扩展

1. 图层透明度控制

setLayerOpacity(index, opacity) {let layers = this.map.getLayers();layers.getArray()[index].setOpacity(opacity);
}

2. 图层顺序调整

moveLayerToTop(index) {let layers = this.map.getLayers();let layer = layers.getArray()[index];layers.remove(layer);layers.push(layer);
}

3. 图层信息获取

getLayerInfo(index) {let layers = this.map.getLayers();let layer = layers.getArray()[index];return {name: layer.get('name'),visible: layer.getVisible(),opacity: layer.getOpacity()};
}

4. 批量图层控制

showOnlyLayer(targetIndex) {let layers = this.map.getLayers();layers.getArray().forEach((layer, index) => {layer.setVisible(index === targetIndex);});// 更新复选框状态this.checkList = [this.getLayerLabel(targetIndex)];
}

样式设计

.MapTool{position: absolute;top:50px;right: 50px;z-index: 9999;
}

样式特点:

  • 固定定位在地图右上角
  • 高层级确保在地图之上显示
  • 与前面文章的工具栏样式保持一致

注意事项与最佳实践

1. API密钥管理

// 建议将API密钥存储在环境变量中
const TIANDITU_TOKEN = process.env.VUE_APP_TIANDITU_TOKEN;

2. 图层加载状态监听

layer.getSource().on('tileloadstart', function() {console.log('开始加载瓦片');
});layer.getSource().on('tileloadend', function() {console.log('瓦片加载完成');
});

3. 错误处理

layer.getSource().on('tileloaderror', function(event) {console.error('瓦片加载失败:', event);
});

总结

本文详细介绍了OpenLayers中的图层控制功能,主要知识点包括:

  1. 多图层管理: 如何创建和管理多个不同类型的图层
  2. 天地图服务: 天地图API的使用方法和参数配置
  3. 图层控制: 通过复选框实现图层的显示/隐藏切换
  4. 数据绑定: Vue.js与OpenLayers的结合使用
  5. API密钥: 第三方地图服务的认证机制

通过 getLayers().getArray()[index].setVisible() 这一核心方法,我们实现了对地图图层的精确控制。结合Element UI的复选框组件,为用户提供了直观友好的图层切换界面。

在实际项目中,可以根据业务需求选择合适的地图服务,并通过图层控制功能让用户灵活切换不同的地图视图,从而提供更好的用户体验和更丰富的地图信息展示。

http://www.dtcms.com/a/468309.html

相关文章:

  • 域名备案和网站备案有什么区别嘉兴网站建设网站
  • 昆明企业网站建设个人网站不备案可以吗
  • 网站模版制作教程做网站时给图片添加链接
  • 盐城网站建设0515icpdw 怎么做钓鱼网站
  • 襄阳作风建设年活动网站国外饮品网站
  • 大兴网站建设制作wordpress小工具推荐
  • 房产网站cms邯郸开发网站有哪些
  • 网站建设都需学哪些苏州公司网站设计
  • 上海高端做网站海南微信网站制作平台
  • 网站定制电话qq浏览器直接打开网页
  • 平邑县建设局网站公众号页面开发
  • 专业的网站建设流程wordpress评论框添加表情评论
  • 家纺 网站模版连云港网站关键词优化
  • 做qq阅读网站介绍可口可乐软文范例
  • 本溪网站制作龙华网站 建设信科网络
  • 国外酷炫网站市场营销手段13种手段
  • 桐庐做网站html5做手机网站建设
  • 学校网站建设情况汇报国际形势最新消息
  • 可以推广网站咸阳网站建设费用
  • 网站推广工具网络百度搜索引擎介绍
  • 电子商务网站建设视频教程小程序商城哪家好些
  • 西安微信网站制作wordpress用户ip
  • 如何用源码搭建网站源码王通seo
  • 建设银行网银盾不能打开网站网络营销模式不是孤立存在的
  • 高并发电商网站开发西安是哪个省属于哪个市
  • 那里有网站建设苏州做网站比较好的公司
  • o2o网站建设信息建工厂网站的公司
  • 淘宝客网站免费建站潍坊外贸建站
  • 网站建设下什么科目设计公司企业价值观
  • 瑜伽网站模版科技节手抄报