场景

Vue+Openlayers实现显示图片并分优先级多图层加载:

Vue+Openlayers实现显示图片并分优先级多图层加载_BADAO_LIUMANG_QIZHI的博客-CSDN博客

上面实现的效果如下

如果要实现地图缩放时图标等比例放大缩小,效果如下

注:

博客:
BADAO_LIUMANG_QIZHI的博客_霸道流氓气质_CSDN博客
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

1、首先在页面加载完之后,设置定时器进行一秒一次的渲染灯图层的数据。

    this.initMap();setInterval(() => {this.initLightData();}, 1000)},

这里是使用定时器的方式一秒执行一次的渲染灯图层的数据。

在真实业务中,这里可能是由后台推送的比如红绿灯的数据,然后进行定时的渲染灯图层的数据。

比如后台获取地图上所有红绿的信号,然后定时推送给前端,前端在收到数据后重新渲染灯的图层。

2、然后在渲染灯图层的方法中,获取当前地图的缩放等级,乘以一个比例,赋值给Style的image的

scale属性。

    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 * (zoom -13) ,src: url,anchor: [0.48, 0.52],}),});feature.setStyle(style);this.lightLayer.getSource().addFeature(feature);});},

这里的scale的比例算法根据实际要的效果进行调整,这里的0.15是自己所需要的比例。

3、完整代码

​
<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:"986610.93778", y:"213885.81024"},{x:"986510.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 * (zoom -13) ,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实现地图缩放图标等比例缩放相关推荐

  1. vue+openlayers在地图添加图标

    参考帖子:https://blog.csdn.net/feiteyizu/article/details/81133845 有两种方式,介绍第二种,第一种太简单,,而且不能动态增加dom元素从而添加图 ...

  2. Vue使用高德地图api实现热力图动态缩放

    Vue使用高德地图api实现热力图动态缩放 前言 1.引入高德js 2.显示基本的热力图 3.显示优化 4.Vue页面完整代码 前言 项目需要,根据积水数据的多少,在页面中进行展示,选用高德热力图ap ...

  3. OpenLayers 3地图添加图标

    OpenLayers 3地图添加图标 一.overlay方式在地图添加图标 1.项目结构 2.map.html <!Doctype html> <html xmlns='http:/ ...

  4. Vue+Openlayers实现地图上绘制线

    场景 Vue+Openlayers实现显示图片并分优先级多图层加载: Vue+Openlayers实现显示图片并分优先级多图层加载_BADAO_LIUMANG_QIZHI的博客-CSDN博客 上面是添 ...

  5. Vue 使用echarts 地图自定义图标和修改图标样式,点击切换图标

    效果图:如下 注意事项: 1.使用echarts最好看官方文档,官方文档(链接如下) https://echarts.apache.org/examples/zh/index.html#chart-t ...

  6. 155:vue+openlayers 设置地图的反转色、复古色、灰度图、原始图

    第155个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers中设置地图的反转色.复古色.灰度,原始状态等.采用的是CSS filter的形式. 直接复制下面的 vue+ope ...

  7. 自定义Imageview控件实现多种手势操作 (拖动、水平缩放、竖直缩放、等比例缩放、双击、长按)

    项目中需要使用自定义控件的多种手势操作,之前在网上查阅资料的时候发现能找到的一般是只实现了其中的几种,这次就把我做的控件分享一下,人人为我,我为人人嘛,哈哈! 这个自定义控件实现的主要功能是控件的拖动 ...

  8. SpringBoot+Vue+Openlayers实现地图上新增和编辑坐标并保存提交

    场景 若依前后端分离版手把手教你本地搭建环境并运行项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108465662 Vue ...

  9. vue+openlayers实现地图打点

    前言 openlayers的使用 一.使用步骤 1.引入库 代码如下(示例):npm install ol import "ol/ol.css"; //样式 import Map ...

最新文章

  1. 遭遇错误:ORA-01031
  2. 利用JavaScript的复制
  3. 猜想串scan的order
  4. Postgresql中的hybrid hash join(无状态机讲解)
  5. VS2005为什么会自动关闭?使用Visual Assist X的要注意了
  6. java打印正三角形_java实现打印正三角的方法
  7. C语言指针类型 强制转换
  8. Linux内核学习笔记(一)CFS完全公平调度类
  9. 计算机软件工程职业道德论文,软件工程职业道德论文_软件工程_软件工程就业前景...
  10. 使用arecord、aplay 实现录音和播放
  11. 使用ID3算法实现决策树
  12. 计算机无法打开浏览器,Internet选项打不开怎么办?IE浏览器internet选项无法打开解决方法...
  13. 三个工具测试网络速度
  14. 利用Oh-My-Zsh打造你的超级终端
  15. minigui[基础篇][11]—— 图标
  16. pe文件签名信息检测技术
  17. 李沐-斯坦福《实用机器学习》-01章
  18. 【转】为什么要使用ModelDriven
  19. UML笔记一:UML概述三(UML构成、UML中的事物)
  20. HTML插件程序,10个最棒的jQuery和HTML所见即所得编辑器插件

热门文章

  1. Python 计算机视觉(十)—— OpenCV 图像锐化及边缘检测
  2. Zookeeper在Kafka中的作用
  3. 计算机与人脑_看!自行车成精了...清华网红自行车:拥有“类人脑芯片”,可无人驾驶...
  4. springboot @ConfigurationProperties注入属性流程
  5. ie网络集合代理无法启动_网络故障诊断70例!经典老文了!
  6. 获取下月第一天_获取当前月 下月 下下月 的第一天和最一天
  7. solve函数c语言_数值计算方法编程作业(C语言版)汇总
  8. python周志_Python学习周志—第一周(入门知识)
  9. ACL和NAT内容整理
  10. sql入门经典第5版pdf网盘_如何学习 SQL 语言?