vue3-openlayers marker 光晕扩散(光环扩散)(postrender 事件和 render 方法)

本篇介绍一下使用 vue3-openlayers marker 光晕扩散(光环扩散)(postrender 事件和 render 方法)

1 需求

  • marker 光晕扩散(光环扩散)

2 分析

marker 光晕扩散(光环扩散)使用 postrender 事件和 render 方法
关于即时渲染的知识点请看上篇《openlayers marker 光晕扩散(光环扩散)(postrender 事件和 render 方法)》

3 实现

<template>
  <ol-map
    :loadTilesWhileAnimating="true"
    :loadTilesWhileInteracting="true"
    style="width: 100%; height: 100%"
    ref="mapRef"
  >
    <ol-view ref="view" :center="center" :zoom="zoom" :projection="projection" />

    <ol-tile-layer>
      <ol-source-tianditu
        layerType="img"
        :projection="projection"
        :tk="key"
        :hidpi="true"
        ref="sourceRef"
      ></ol-source-tianditu>
    </ol-tile-layer>
    <ol-tile-layer>
      <ol-source-tianditu
        :isLabel="true"
        layerType="img"
        :projection="projection"
        :tk="key"
        :hidpi="true"
      ></ol-source-tianditu>
    </ol-tile-layer>
    <ol-vector-layer ref="vectorLayerRef" @postrender="handlePostRender">
      <ol-source-vector>
        <ol-feature>
          <ol-geom-point :coordinates="[110, 30]"></ol-geom-point>
          <ol-style>
            <ol-style-icon :src="iconSrc" :scale="0.05"></ol-style-icon>
          </ol-style>
        </ol-feature>
        <ol-feature>
          <ol-geom-point :coordinates="[112, 31]"></ol-geom-point>
          <ol-style>
            <ol-style-icon :src="iconSrc" :scale="0.05"></ol-style-icon>
          </ol-style>
        </ol-feature>
      </ol-source-vector>
    </ol-vector-layer>
  </ol-map>
  <div class="toolbar">
    <el-button type="primary" @click="handleClick">{{ animationFlag ? '停止' : '开始' }}</el-button>
  </div>
</template>

<script setup lang="ts">
import iconSrc from '@/assets/image/truck.png';
import { getVectorContext } from 'ol/render.js';
import { easeOut } from 'ol/easing.js';
import { Circle, Stroke, Style } from 'ol/style';

const center = ref([121, 31]);
const projection = ref('EPSG:4326');
const zoom = ref(5);
const mapRef = ref();
const key = '替换为天地图key';
const sourceRef = ref(null);
const vectorLayerRef = ref(null);
const animationFlag = ref(false);
const duration = ref([3000, 1000]);
const start = ref([0, 0]);

const handleClick = () => {
  if (!animationFlag.value) {
    start.value = start.value.map(i => Date.now());
    vectorLayerRef.value.vectorLayer.changed();
  }
  animationFlag.value = !animationFlag.value;
};

const handlePostRender = e => {
  if (animationFlag.value) {
    const time = e.frameState.time;
    vectorLayerRef.value.vectorLayer
      .getSource()
      .getFeatures()
      .forEach((f, idx) => {
        // 时间戳差(毫秒)
        let elapsedTime = time - start.value[idx];
        if (elapsedTime >= duration.value[idx]) {
          start.value[idx] = Date.now();
          elapsedTime = duration.value[idx];
        }
        // 获取矢量上下文
        const vectorContext = getVectorContext(e);
        // elapsedRatio值0到1之间
        const elapsedRatio = elapsedTime / duration.value[idx];
        const radius = easeOut(elapsedRatio) * 25 + 5;
        const opacity = easeOut(1 - elapsedRatio);

        const style = new Style({
          image: new Circle({
            radius: radius,
            stroke: new Stroke({
              color: 'rgba(255, 0, 0, ' + opacity + ')',
              width: 1 + opacity
            })
          })
        });
        // 将feature渲染到画布中。
        vectorContext.drawFeature(f.clone(), style);
      });
    mapRef.value.map.render();
  }
};
</script>
<style scoped lang="scss">
.toolbar {
  position: absolute;
  top: 20px;
  left: 100px;
  display: flex;
  justify-content: center;
  align-items: center;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/744458.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

three.js 第十一节 - uv坐标

// ts-nocheck // 引入three.js import * as THREE from three // 导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls // 导入lil.gui import { GUI } from three/examples/jsm/libs/lil-gui.module.min.js // 导入tween import * as T…

PUBG绝地求生·阿童木透视自瞄免费辅助 v6.24

在享受电子游戏的精彩世界时&#xff0c;家庭用户的数据安全和系统稳定性是不容忽视的重要方面。为了确保在使用游戏辅助工具时既能获得愉悦的游戏体验&#xff0c;又能保障个人数据和系统的安全&#xff0c;这里有一些建议和操作指南需要大家注意。 对于家庭用户而言&#x…

【高校科研前沿】四川大学刘超研究员为一作在《Geophys. Res. Lett.》发表团队成果:植被形态影响河床泥沙输运

文章简介 论文名称&#xff1a;Plant morphology impacts bedload sediment transport 第一作者及单位&#xff1a;刘超&#xff08;研究员|四川大学水利水电学院&#xff09; 通讯作者及单位&#xff1a;Yuqi Shan&#xff08;四川大学灾后重建与管理研究所&#xff09; 文…

Java 21的最新进展

关于Java 21的最新进展&#xff0c;以下是一些重要的新特性和更新&#xff1a; 长期支持版本&#xff08;LTS&#xff09;&#xff1a;JDK 21是一个长期支持版本&#xff0c;这意味着它将获得五年的首要支持和扩展支持&#xff0c;直至2031年9月。这是继JDK 17之后的下一个LTS版…

用定时器T1中断控制两个LED以不同周期闪烁

#include<reg51.h> // 包含51单片机寄存器定义的头文件 sbit D1P2^0; //将D1位定义为P2.0引脚 sbit D2P2^1; //将D2位定义为P2.1引脚 unsigned char Countor1; //设置全局变量&#xff0c;储存定时器T1中断次数 unsigned char Countor2; //设置全局变量&#xff0c;储…

高考填报志愿,找准自己的真兴趣来选择专业

又是一年一度的高考填报志愿的时间了&#xff0c;毕业生们要根据自己的分数&#xff0c;在很短的时间内确定自己的专业。专业千万条&#xff0c;兴趣第一条。专业的选择很大程度上决定着大学的学习生活是否顺利&#xff0c;甚至决定着以后的职业生涯。在纷繁复杂的专业中&#…

C++基础编程100题-014 OpenJudge-1.3-12 计算球的体积

更多资源请关注纽扣编程微信公众号 http://noi.openjudge.cn/ch0103/12/ 描述 对于半径为r的球&#xff0c;其体积的计算公式为$ V4/3*πr^3 $&#xff0c;这里取π 3.14。 现给定r&#xff0c;求V。 输入 输入为一个不超过100的非负实数&#xff0c;即球半径&#xff0…

[leetcode]valid-triangle-number. 有效三角形的个数

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int triangleNumber(vector<int>& nums) {int n nums.size();sort(nums.begin(), nums.end());int ans 0;for (int i 0; i < n; i) {for (int j i 1; j < n; j) {int left j 1, righ…

从0搭建一个vue项目,不使用脚手架从html到vue

前言 从最开始学习web网页开始&#xff0c;搭建一个网页只需要创建一个html文件对其进行编写dom标签语言即可&#xff1b;后来分离了html&#xff0c;css和js&#xff0c;搭建一个网页开始需要文件夹&#xff0c;文件夹包含了这3类文件以及静态文件&#xff0c;图片&#xff0c…

运维.云技术学习.基于应用服务网格的灰度发布(上:理论基础篇)

运维专题 基于应用服务网格的灰度发布&#xff08;上&#xff1a;理论基础篇&#xff09; - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAdd…

S-Clustr(影子集群)V3 高并发,去中心化,多节点控制

S-Clustr 项目地址:https://github.com/MartinxMax/S-Clustr/releases/tag/S-Clustr-V3.0 Maptnh Не ограничивайте свои действия виртуальным миром. GitHub: Maptnh Jay Steinberg Man kann die Menschen, die man hasst, in d…

Arduino平台软硬件原理及使用——开源库的使用

文章目录&#xff1a; 一、库文件的下载及导入 二、库文件源代码说明 三、库文件应用举例 一、库文件的下载及导入 有关arduino开源库的导入有两种方案&#xff1a; 1.第一种方案需要借助arduino.cc网站来进行查询下载&#xff0c;然后在Arduino软件中进行导入。 2.第二种方案则…

【学习计划】文献阅读:癌症生物标志物文献综述

Cancer biomarkers: Emerging trends and clinical implications for personalized treatment 标题英文&#xff1a;Cancer biomarkers: Emerging trends and clinical implications for personalized treatment 标题中文&#xff1a;癌症生物标志物 &#xff1a; 个性化治疗的…

Axure RP 9 安装详细笔记

一、下载 1.官网下载地址 Axure RP 9 MAC正式版&#xff1a;https://axure.cachefly.net/versions/9-0/AxureRP-Setup-3740.dmgAxure RP 9 WINDOWS正式版&#xff1a;https://axure.cachefly.net/versions/9-0/AxureRP-Setup-3740.exe2.网盘下载 链接&#xff1a;https://pa…

计算机SCI期刊,中科院3区,1个月录用,易过审

一、期刊名称 Visual Computer 二、期刊简介概况 期刊类型&#xff1a;SCI 学科领域&#xff1a;计算机科学 影响因子&#xff1a;3.5 中科院分区&#xff1a;3区 三、期刊简介 视觉计算机发表有关捕获、识别、建模、分析和生成形状和图像的所有研究领域的文章。 计算机…

【ai】tx2 nx: yolov4-triton-tensorrt 成功部署server

isarsoft / yolov4-triton-tensorrt运行发现插件未注册? 【ai】tx2 nx: jetson Triton Inference Server 部署YOLOv4 【ai】tx2 nx: jetson Triton Inference Server 运行YOLOv4 对main 进行了重新构建 【ai】tx2 nx :ubuntu查找NvInfer.h 路径及哪个包、查找符号【ai】tx2…

基于SpringBoot+Vue电商平台系统(带 1w+字文档)

基于SpringBootVue电商平台系统(带 1w字文档) 本课题研究和开发电商平台&#xff0c;让安装在计算机上的该系统变成管理人员的小帮手&#xff0c;提高商品交易信息处理速度&#xff0c;规范商品交易信息处理流程&#xff0c;让管理人员的产出效益更高。 项目简介 基于SpringBo…

go语言day06 数组 切片

数组 : 定长且元素类型一致,在索引逻辑上连续存储,数组的内存地址是存储的第一个元素的内存地址 几种创建方式: 仅声明 var nums [ 3 ] int 声明并赋值 var nums [ 2 ] string {"武沛齐","alex"} 声明并按下标赋值 var nums [ 3 ] int {0:88,2:1 } 省略…

如何一步一步将Python中的应用打包成安卓的APK安装包文件

一、首先&#xff0c;按照如下链接操作 Python 应用打包成 APK【全流程】_python打包成apk-CSDN博客 二、运行 buildozer init会报错buildozer命令找不到&#xff0c;明明已经安装 解决方法&#xff1a; 这里重新创建一个conda环境 Installation — Buildozer 0.11 docum…

西门子840dsl机床仿真软件配置opcua说明

需要的安装包如下&#xff0c;可在百度网盘中下载 主软件包&#xff1a;sinutrain-v4.7-ed4&#xff08;也可在官网中下载最新版本&#xff09; 用户文件&#xff1a;UserDataBase 授权sinutrain&#xff1a;Sim_EKB_Install_2021_06_22 链接&#xff1a;https://pan.baidu.c…