Vue+Openlayers实现显示图片并分优先级多图层加载
场景
Vue中使用Openlayers加载Geoserver发布的TileWMS:
Vue中使用Openlayers加载Geoserver发布的TileWMS_BADAO_LIUMANG_QIZHI的博客-CSDN博客
在上面的基础上实现加载地图显示,如果要在地图上添加图片图层显示效果如下
注:
博客:
BADAO_LIUMANG_QIZHI的博客_霸道流氓气质_CSDN博客
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
1、跟上面的博客相比,导入的模块增多
import "ol/ol.css";
import Map from "ol/Map";
import View from "ol/View";
import { Point } from "ol/geom";
import Feature from "ol/Feature";
import { Icon,Style} from "ol/style";
//导入相关模块
import { Tile as TileLayer , Vector as VectorLayer } from 'ol/layer'
import { TileWMS ,Vector as VectorSource } from 'ol/source'
2、这里要在原先地图图层的基础上,再加两个图层分别为灯图层和房子图层。
声明图层对象和灯图层以及房子图层的坐标数据。
data() {return {map: null, // map地图layer:null, //地图图层lightLayer:null, //灯图层houseLayer:null, //房子图层//红绿灯数据lightData:[{x:"987798.93778", y:"213885.81024"},{x:"987710.93778", y:"213810.81024"},],//房子数据houseData:[{x:"987610.93778", y:"213885.81024"},{x:"987510.93778", y:"213810.81024"},],};},
3、页面加载完成后调用初始化地图的方法
mounted() {this.initMap();},
在初始化地图的方法中
initMap() {//地图图层this.layer = new TileLayer({source: new TileWMS({//不能设置为0,否则地图不展示。ratio: 1,url: "http://localhost:8000/geoserver/nyc/wms",params: {LAYERS: "nyc:nyc_roads",STYLES: "",VERSION: "1.1.1",tiled: true},serverType: "geoserver",}),});// 红绿灯的图层this.lightLayer = new VectorLayer({source: new VectorSource(),});//房子的图层this.houseLayer = new VectorLayer({source: new VectorSource(),});this.map = new Map({//地图容器IDtarget: "map",//引入地图layers: [this.layer,this.lightLayer,this.houseLayer],view: new View({//地图中心点center: [987777.93778, 213834.81024],zoom: 12,minZoom:6, // 地图缩放最小级别maxZoom:19,}),});this.initLightData();this.initHouseData();//获取点的监听方法设置this.onPoint()},
在这里先声明两个图层lightLayer和houseLayer,然后最后调用给这两个图层加载数据的方法。
4、这里决定图层上下优先级顺序的是
layers: [this.layer,this.lightLayer,this.houseLayer],
越往左,图层越在底层,当三个图层重合时,从上往下依次看到的是房子图层、灯图层、地图图层
5、然后调用加载图层坐标数据的方法
方法initLightData
//初始化灯数据initLightData(){this.lightLayer.getSource().clear();this.lightData.forEach((item, index) => {var feature = new Feature({geometry: new Point([Number(item.x), Number(item.y)]),});let url = "images/light.png";let style = new Style({image: new Icon({scale: 0.15 ,src: url,anchor: [0.48, 0.52],}),});feature.setStyle(style);this.lightLayer.getSource().addFeature(feature);});},
方法initHouseData
//初始化房子数据initHouseData(){this.houseLayer.getSource().clear();this.houseData.forEach((item, index) => {var feature = new Feature({geometry: new Point([Number(item.x), Number(item.y)]),});let url = "images/house.png";let style = new Style({image: new Icon({scale: 0.3,src: url,anchor: [0.48, 0.52],}),});feature.setStyle(style);this.houseLayer.getSource().addFeature(feature);});},
6、完整代码
<template><div id="map" class="map"></div>
</template><script>
//导入基本模块
import "ol/ol.css";
import Map from "ol/Map";
import View from "ol/View";
import { Point } from "ol/geom";
import Feature from "ol/Feature";
import { Icon,Style} from "ol/style";
//导入相关模块
import { Tile as TileLayer , Vector as VectorLayer } from 'ol/layer'
import { TileWMS ,Vector as VectorSource } from 'ol/source'
export default {name: "olMapImageWMSMulLayers",data() {return {map: null, // map地图layer:null, //地图图层lightLayer:null, //灯图层houseLayer:null, //房子图层//红绿灯数据lightData:[{x:"987798.93778", y:"213885.81024"},{x:"987710.93778", y:"213810.81024"},],//房子数据houseData:[{x:"987610.93778", y:"213885.81024"},{x:"987510.93778", y:"213810.81024"},],};},mounted() {this.initMap();setInterval(() => {this.initLightData();}, 1000)},methods: {//初始化红绿灯数据initLightData(){this.lightLayer.getSource().clear();this.lightData.forEach((item, index) => {var feature = new Feature({geometry: new Point([Number(item.x), Number(item.y)]),});let url = "images/light.png";//const zoom = this.map.getView().getZoom();let style = new Style({image: new Icon({scale: 0.15 ,src: url,anchor: [0.48, 0.52],}),});feature.setStyle(style);this.lightLayer.getSource().addFeature(feature);});},//初始化房子数据initHouseData(){this.houseLayer.getSource().clear();this.houseData.forEach((item, index) => {var feature = new Feature({geometry: new Point([Number(item.x), Number(item.y)]),});let url = "images/house.png";let style = new Style({image: new Icon({scale: 0.3,src: url,anchor: [0.48, 0.52],}),});feature.setStyle(style);this.houseLayer.getSource().addFeature(feature);});},initMap() {//地图图层this.layer = new TileLayer({source: new TileWMS({//不能设置为0,否则地图不展示。ratio: 1,url: "http://localhost:8000/geoserver/nyc/wms",params: {LAYERS: "nyc:nyc_roads",STYLES: "",VERSION: "1.1.1",tiled: true},serverType: "geoserver",}),});// 红绿灯的图层this.lightLayer = new VectorLayer({source: new VectorSource(),});//房子的图层this.houseLayer = new VectorLayer({source: new VectorSource(),});this.map = new Map({//地图容器IDtarget: "map",//引入地图layers: [this.layer,this.lightLayer,this.houseLayer],view: new View({//地图中心点center: [987777.93778, 213834.81024],zoom: 12,minZoom:6, // 地图缩放最小级别maxZoom:19,}),});this.initLightData();this.initHouseData();//获取点的监听方法设置this.onPoint()},// 获取点onPoint() {// 监听singleclick事件this.map.on('singleclick', function(e) {console.log(e.coordinate)})}},
};
</script><style scoped>
.map {width: 100%;height: 800px;
}
</style>
Vue+Openlayers实现显示图片并分优先级多图层加载相关推荐
- android listview 只加载显示的图片大小,Android ListView只加载当前屏幕内的图片(解决list滑动时加载卡顿)...
最近在做ListView分页显示,其中包括图片 和文字(先下载解析文字内容,再异步加载图片)发现每次点击下一页后,文字内容加载完毕,马上向下滑动,由于这时后台在用线程池异步下载图片,我每页有20条,也 ...
- 为网格布局图片打造的超炫 CSS 加载动画
今天,我想与大家分享一些专门为网格布局的图像制作的很酷的 CSS 加载动画效果.您可以把这些效果用在你的作品集,博客或任何你想要的网页中.设置很简单.我们使用了下面这些工具库来实现这个效果: Norm ...
- 图片较多时要提高网页加载速度
1.图片懒加载 将图片src先赋值为一张默认图片,当用户滚动滚动条到可视区域图片的时候,再去加载后续真正的图片 如果用户只对第一张图片感兴趣,那剩余的图片请求就可以节省了. 懒加载(LazyLoad) ...
- 图片在xml文件中直接加载.9文件
图片在xml文件中直接加载.9文件,可能会因为图片压缩的缘故产生锯齿,如果使用 ImageView imageview = (ImageView) view .findViewById(R.id.in ...
- 图片太大,导致页面加载过慢的处理方法
整合博客:https://blog.csdn.net/wsyzxss/article/details/73480436 与 http://yujiangshui.com/three-html5-fe ...
- 分图层加载CAD数据
#region 分图层加载CAD数据 private void btnAddCADByLayer_Click(object sender, EventArgs e) {IWorkspaceFactor ...
- native react 图片多选_React Native中加载图片的各种姿势
初使用Image,由于在React Native中图片资源来源丰富,刚开始我也是一脸懵逼,在几番尝试以后,终于了然 加载项目目录图片 在项目目录中新建一个Directory,命名img,拷贝一张名为' ...
- 088:vue+openlayers实时显示单个卫星的位置及轨迹 (示例代码)
第088个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers项目中计算并显示卫星的轨迹. 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果: 注 ...
- 132:vue+openlayers: 设置显示图层的层级数zIndex (示例代码)
第132个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers中设置显示层级数zIndex.每一个图层都像一张纸似的,叠加在一起,上面的层级数zIndex值高,下面的层级数小. ...
最新文章
- 2018-4-7 进化类算法------1、遗传算法(GA)
- 经典算法题每日演练——第二十二题 奇偶排序
- 如何在工作中快速成长?致工程师的 10 个简单技巧
- html弄多个按钮_html+css3实现多个表单按钮美化效果
- mysql中存储gis数据类型_mysql 中的数据类型
- 流量卡官网源码【全解无后门】 修复添加教程
- 数据表的新建 修改 删除 mysql
- Web API应用架构在Winform混合框架中的应用(3)--Winfrom界面调用WebAPI的过程分解...
- .Net Micro Framework研究—让MF支持鼠标
- 数塔问题-------给你有哪些启示?
- 无需U盘最简单的系统重装Win10
- 移动互联网(一)短信和彩信等接口开发封装
- mybatis报错:Could not find resource mapper/UserMapper.xml
- OpenGL基础入门及准备
- VS 用户自定义控件未出现在工具箱的解决方案
- Mac系统升级,降级PHP出现的问题解决办法
- 假期培训总结——初三寒假
- 变化环境下渭河流域水文干旱演变特征剖析
- CrownCAD三维CAD绘制四连杆机构的具体步骤
- FBX导入错误 :ImportFBX Errors:
热门文章
- Unity通过鼠标操作来控制场景视角(包括旋转、平移以及缩放)
- layui表格合并单元格多表_layui动态表格之合并单元格
- python的xlutils模块_xlutils模块使用
- assert 闪退 android,AEX部分软件闪退问题,求解!
- 关于string转int、float、double常用方法
- php静态方法场景,深入介绍PHP中的static的修饰方法和yield的使用场景
- option:contains后面加变量_什么是配置环境变量,配置以后有什么作用呢?
- threejs模型可视化编辑器_一个近乎无门槛、零基础的3D场景编辑器
- github流程图_「强烈推荐」开源的在线流程图工具--draw.io
- c语言周传生教材答案,C语言程序设计与实践(普通高等教育“十二五”规划教材)...