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

Openlayers:实现聚合

一、什么是聚合

聚合是一种将一定范围内的多个图形合并为一个图形的一种技术方案。通常用来解决图形过于集中或者图形数量过多的问题。

在Openlayers中主要通过Cluster数据源来实现聚合的效果。与其它的数据源不同,Cluster数据源在实例化时需要接收一个矢量数据源作为参数,然后在将Cluster数据源作为一个矢量图层的数据源,这样就能实现对矢量数据源中图形的聚合。

二、如何实现聚合

1.点聚合

如果是有一些点要素需要全部进行聚合,像这种情况实现起来就非常简单,只需要通过distance属性(以像素为单位)设置好聚合的范围就可以了。

  // 矢量数据源const weatherStationSource = new VectorSource({format: new GeoJSON(),url: "src/data/气象站点/stations-wgs.geojson",});// 聚合数据源const clusterSource = new Cluster({distance: 40,source: weatherStationSource,});const weatherStationLayer = new VectorLayer({properties: {name: "气象站点",id: "weather-station",},source: clusterSource,});window.map.addLayer(weatherStationLayer);

聚合前:

聚合后:

2.部分图形聚合

有的时候我们并不希望将矢量数据源中的所有图形都参与聚合,这个时候可以通过geometryFunction属性进行设置。

geometryFunction属性是一个函数,该函数以一个要素(Feature)作为参数,并返回一个点(Point),以此作为该要素用于聚合计算的点。当某个要素不应被纳入聚类考虑范围时,该函数应返回null

注意,如果返回null就相当于矢量数据源中没有这个图形。

  // 矢量数据源const weatherStationSource = new VectorSource({format: new GeoJSON(),url: "src/data/气象站点/stations-wgs.geojson",});// 聚合数据源const clusterSource = new Cluster({distance: 40,source: weatherStationSource,geometryFunction: function (feature) {const type = feature.get("type");console.log(type);if (type == "基本站") {return null;}return feature.getGeometry();},});const weatherStationLayer = new VectorLayer({properties: {name: "气象站点",id: "weather-station",},source: clusterSource,});window.map.addLayer(weatherStationLayer);

3.其它图形的聚合

如果需要进行聚合的是点以外的其它图形,例如多边形,那么就必须设置geometryFunction属性,以指定用于聚合计算的点。对于多边形来说我们可以使用Polygon.getInteriorPoint()方法获取多边形的中心点来进行聚合计算。

  // 矢量数据源const polygonSource = new VectorSource({features: randomPolygonFeature(window.map, 1000),//随机生成1000个多边形});const clusterSource = new Cluster({distance: 40,source: polygonSource,geometryFunction: function (feature) {return feature.getGeometry().getInteriorPoint();},});const polygonLayer = new VectorLayer({properties: {name: "多边形图层",id: "polygonLayer",},source: clusterSource,});window.map.addLayer(polygonLayer);

聚合前:

聚合后:

4.自定义聚合图形

从之前的示例可以看到,聚合后的聚合图形都是点,如果希望使用其它的图形作为聚合图形,那就需要使用createCluster属性进行自定义。

createCluster属性也是一个函数,该函数接受聚合的中心点以及包含在该聚合中的要素数组作为参数。它必须返回一个将用于渲染的要素。

通过下面的代码就可以将一个小正方形作为聚合的图形:

  // 矢量数据源const polygonSource = new VectorSource({features: randomPolygonFeature(window.map, 1000),});const clusterSource = new Cluster({distance: 40,source: polygonSource,geometryFunction: function (feature) {return feature.getGeometry().getInteriorPoint();},createCluster: function (point, features) {// 定义中心点const centerPoint = point.getCoordinates();// 定义正方形的半边长const halfSideLength = 0.5;// 计算正方形的四个顶点const topLeft = [centerPoint[0] - halfSideLength,centerPoint[1] + halfSideLength,];const topRight = [centerPoint[0] + halfSideLength,centerPoint[1] + halfSideLength,];const bottomRight = [centerPoint[0] + halfSideLength,centerPoint[1] - halfSideLength,];const bottomLeft = [centerPoint[0] - halfSideLength,centerPoint[1] - halfSideLength,];// 创建正方形的多边形坐标const squareCoordinates = [topLeft,topRight,bottomRight,bottomLeft,topLeft, // 闭合多边形];// 创建多边形要素const squareFeature = new Feature({geometry: new Polygon([squareCoordinates]),features: features,});return squareFeature;},});const polygonLayer = new VectorLayer({properties: {name: "多边形图层",id: "polygonLayer",},source: clusterSource,});window.map.addLayer(polygonLayer);

三、优化聚合效果

1.显示聚合的数量

有一种常见的聚合优化的效果就是在聚合点上显示聚合的图形的数量。

这种效果需要通过给矢量图层设置样式来实现。

可以使用普通样式来实现:

  // 缓存样式const styleCache = new Map([[1,new Style({image: new CircleStyle({radius: 10,stroke: new Stroke({color: "#fff",}),fill: new Fill({color: "#3399CC",}),}),}),],]);weatherStationLayer.setStyle(function (feature) {const size = feature.get("features").length;let style = styleCache.get(size);if (!style) {style = new Style({image: new CircleStyle({radius: 10,stroke: new Stroke({color: "#fff",}),fill: new Fill({color: "#3399CC",}),}),text: new Text({text: size.toString(),fill: new Fill({color: "#fff",}),}),});styleCache.set(size, style);}return style;});

当然也可以使用flat样式实现:

  weatherStationLayer.setStyle([{filter: [">", ["get", "features", "length"], 1],style: [{"circle-radius": 10, //圆半径"circle-fill-color": "#3399CC", //圆填充颜色"circle-stroke-width": 1.25, //圆边框宽度"circle-stroke-color": "#fff", //圆边框颜色},{"text-value": ["to-string", ["get", "features", "length"]], //文本内容"text-fill-color": "#fff", //文本颜色},],},{else: true,style: [{"circle-radius": 10, //圆半径"circle-fill-color": "#3399CC", //圆填充颜色"circle-stroke-width": 1.25, //圆边框宽度"circle-stroke-color": "#fff", //圆边框颜色},],},]);

2.点击聚合点放大视图展示构成聚合点的要素

这是一个常用的聚合的交互效果,它基本的实现思路如下:

  map.on("click", e => {weatherStationLayer.getFeatures(e.pixel).then(clickedFeatures => {if (clickedFeatures.length) {// Get clustered Coordinatesconst features = clickedFeatures[0].get("features");if (features.length > 1) {const extent = boundingExtent(features.map(r => r.getGeometry().getCoordinates()));map.getView().fit(extent, { duration: 1000, padding: [50, 50, 50, 50] });}}});});

3.鼠标悬停到聚合点时展示构成该聚合点的各个要素

想要实现这种效果就不能继续使用地图事件了(其实也可以,但是会很麻烦),推荐通过 Select 交互来实现,它的style属性可以为选中的图形设置样式。

整体的思路如下:

  // 矢量数据源const weatherStationSource = new VectorSource({format: new GeoJSON(),url: "src/data/气象站点/stations-wgs.geojson",});// 聚合数据源const clusterSource = new Cluster({distance: 40,source: weatherStationSource,geometryFunction: function (feature) {const type = feature.get("type");if (type == "基本站") {return null;}return feature.getGeometry();},});// 矢量图层const weatherStationLayer = new VectorLayer({properties: {name: "气象站点",id: "weather-station",},source: clusterSource,});// 聚合样式weatherStationLayer.setStyle([{filter: [">", ["get", "features", "length"], 1],style: [{"circle-radius": 10, //圆半径"circle-fill-color": "#3399CC", //圆填充颜色"circle-stroke-width": 1.25, //圆边框宽度"circle-stroke-color": "#fff", //圆边框颜色},{"text-value": ["to-string", ["get", "features", "length"]], //文本内容"text-fill-color": "#fff", //文本颜色},],},{else: true,style: [{"circle-radius": 10, //圆半径"circle-fill-color": "#3399CC", //圆填充颜色"circle-stroke-width": 1.25, //圆边框宽度"circle-stroke-color": "#fff", //圆边框颜色},],},]);window.map.addLayer(weatherStationLayer);// 定义选中聚合点时的样式function selectStyleFunction(feature) {const styles = [new Style({image: new CircleStyle({radius: 10,fill: new Fill({color: "rgba(255, 255, 255, 0.01)",}),}),}),];const originalFeatures = feature.get("features");let originalFeature;for (let i = originalFeatures.length - 1; i >= 0; --i) {originalFeature = originalFeatures[i];styles.push(new Style({geometry: originalFeature.getGeometry(),image: new RegularShape({radius: 3,radius2: 7,points: 5,angle: Math.PI,fill: new Fill({color: "rgba(255, 153, 0, 0.8)",}),stroke: new Stroke({color: "rgba(255, 204, 0, 0.2)",width: 1,}),}),}));}return styles;}// 定义选中聚合点的交互const select = new Select({condition: function (evt) {return evt.type == "pointermove" || evt.type == "singleclick";},style: selectStyleFunction,});window.map.addInteraction(select);

参考资料

  1. OpenLayers v10.5.0 API - Class: Cluster
  2. Clustered Features
  3. Earthquake Clusters
  4. OpenLayers v10.5.0 API - Class: Select

相关文章:

Openlayers:实现聚合

一、什么是聚合 聚合是一种将一定范围内的多个图形合并为一个图形的一种技术方案。通常用来解决图形过于集中或者图形数量过多的问题。 在Openlayers中主要通过Cluster数据源来实现聚合的效果。与其它的数据源不同,Cluster数据源在实例化时需要接收一个矢量数据源…...

相机内外参

文章目录 相机内参相机外参 相机的内外参是相机标定过程中确定的重要参数,用于建立图像像素坐标与实际世界坐标之间的关系。 相机内参 定义:相机内参是描述相机内部光学和几何特性的参数,主要包括焦距、主点坐标、像素尺度因子以及畸变系数等…...

轨道力学课程习题集

轨道力学课程习题集 第一讲:轨道力学概述 思考题 推导开普勒第三定律与牛顿万有引力定律的关系。 计算地球表面的第一宇宙速度和第二宇宙速度。 设计一个太阳同步轨道,高度为800公里,要求当地时间为上午10:30。 分析地球静止轨道的稳定性…...

【Web三十一】K8S的常用命令

01 基础资源操作​​ 查看资源​​ # 查看 kube-system 命名空间下的 Pod 列表 kubectl get pods -n kube-system# 查看节点详细信息(IP、状态等) kubectl get nodes -o wide# 按标签筛选 Pod(例如筛选标签 appnginx 的 Pod) ku…...

GDPR/CCPA

定义 GDPR(通用数据保护条例) 适用范围:适用于欧盟境内所有成员国,以及处理欧盟居民个人数据的全球企业。 数据主体权利:用户有权知道、访问、更正、删除(被遗忘权)自己的数据,还有…...

Lua中的元表

2025年4月14日,周一上午 Lua中的元表(metatable)是一种特殊的表,用于定义或修改其他表(或用户数据类型)的行为。通过元表中的元方法(meta-methods),开发者可以自定义表在…...

Sql Server(自用查看版)

目录 1、基本数据库相关概念 1.1数据Data 1.2数据库DataBase,DB 1.3数据库管理系统DataBase Management System,DBMS 1.4数据库系统 DataBase System DBS 1.5数据库系列架构 2、SQL sever 基本概念 单表查询 查询所有列的信息,用* 查询部分列&#xff1a…...

【JavaScript】二十、电梯导航栏的实现

文章目录 1、案例:电梯导航1.1 需求分析与实现1.2 关键思路梳理 2、属性选择器补充 1、案例:电梯导航 1.1 需求分析与实现 需求:点击不同的模块,页面可以自动跳转不同的位置 模块分析: 页面滚动到对应位置,导航显示…...

【Python】OpenCV图像处理

文章目录 OpenCV安装查看版本getVersionString查看图片像素shape打开图片imshowRGB灰度图图像裁剪image绘制处理噪点图像特征提取匹配图像梯度(canny边缘检测)阈值图像的形态学(腐蚀、膨胀)打开电脑的摄像头 OpenCV OpenCV&#…...

HTTP协议 --- 超文本传输协议 和 TCP --- 传输控制协议

是基于 TCP 协议的 80 端口的一种 C/S 架构协议。 特点:无状态 --- 数据传输完成后,会断开 TCP 连接,哪怕浏览器还正常运行。 请求报文 --- 方法 响应报文 --- 状态码 是一种面向连接的可靠传输协议 。 面向连接 --- 在传输数据之前&am…...

微信小程序实现table样式,自带合并行合并列

微信小程序在代码编写过程好像不支持原生table的使用&#xff0c;在开发过程中偶尔又得需要拿table来展示。 1.table效果展示 1.wxml <view class"table-container"><view class"table"><view class"table-row"><view cla…...

【NLP】25.python实现点积注意力,加性注意力,Decoder(解码器)与 Attention

1. 点积注意力&#xff08;Dot-Product Attention&#xff09; 点积注意力是最简单的注意力机制之一&#xff0c;其基本思想是通过计算查询&#xff08;query&#xff09;和键&#xff08;key&#xff09;之间的点积来得到相似度&#xff0c;进而为每个值&#xff08;value&am…...

基础贪心算法集合2(10题)

目录 1.单调递增的数字 2.坏了的计算器 3.合并区间 4.无重叠区间 5. 用最少数量的箭引爆气球 6.整数替换 解法1&#xff1a;模拟记忆化搜索 解法2位运算贪心 7.俄罗斯套娃信封问题 补充.堆箱子 8.可被3整除的最大和 9.距离相等的条形码 10.重构字符串 1.单调递增的数字…...

Oracle OCP知识点详解3:使用 vim 编辑文件

一、Vim 核心模式解析 1.1 模式切换图谱 graph LR A[普通模式] -->|i/I/a/A| B[插入模式] B -->|Esc| A A -->|v/V/Ctrlv| C[可视模式] A -->|: / ?| D[命令模式] C -->|Esc| A D -->|Enter| A 1.2 Oracle 场景高频模式组合 模式组合应用场景操作效率提…...

项目风险的早期识别与应对清单

项目风险的早期识别与应对策略的核心在于&#xff1a; 建立系统化的风险识别流程、评估风险的影响程度、制定详细的应对措施、持续监控与调整风险管理计划。 其中&#xff0c;建立系统化的风险识别流程是风险管理的第一步&#xff0c;也是最为关键的一环。通过构建一套有效的识…...

springboot数据动态脱敏

反射Jackson数据动态脱敏 我有两个字段&#xff0c;name和type&#xff0c;我想要在type为1对数据脱敏&#xff0c;而其他情况不脱敏&#xff1a; CustomSerializer注解 Target(ElementType.FIELD) //表示这个注解只能用在字段上 Retention(RetentionPolicy.RUNTIME) //注解…...

算法:定义一个数组的的陡峭值为:相邻两个元素之差的绝对值之和。

定义一个数组的的陡峭值为:相邻两个元素之差的绝对值之和。现在小红拿到了一个数组&#xff0c;她有多次询问&#xff0c;每次查询一段连续子数组的陡峭值。你能帮帮她吗? 连续子数组为从原数组中&#xff0c;连续的选择一段元素(可以全选、可以不选)得到的新数组。 输入描述 …...

【AI提示词】网络安全专家

提示说明 网络安全专家在数字时代扮演着至关重要的角色&#xff0c;他们通过专业的知识和技能保护网络系统免受攻击和破坏&#xff0c;确保数据的安全和隐私。 提示词 # 角色 网络安全专家## 性格类型指标 INTP&#xff08;内向直觉思维感知型&#xff09;## 背景 网络安全专…...

AI大模型原理可视化工具:深入浅出理解大语言模型的工作原理

AI大模型原理可视化工具&#xff1a;深入浅出理解大语言模型的工作原理 在人工智能快速发展的今天&#xff0c;大语言模型&#xff08;如GPT、BERT等&#xff09;已经成为改变世界的重要技术。但对于很多人来说&#xff0c;理解这些模型的工作原理仍然是一个挑战。为了帮助更多…...

解决无人机无人化自主巡检面对的新挑战-机载通信、控制及算力的AIBOX

解决无人机无人化自主巡检面对的新挑战-机载通信、控制及算力的AIBOX 之前的微文&#xff1a;基于无人机的无人化自主巡检-大疆机场3M4TD&#xff0c;介绍了机场3的无人机无人机巡检的特点以及局限性。此处从通信增强、飞行及位置服务增强、智慧飞行以及无人机编队几个方面阐述…...

供应商涨价,项目如何控制采购成本

优化供应商结构、严格控制交付流程、强化谈判策略、设置弹性预算、建立长远合作机制 来有效控制采购成本。其中&#xff0c;强化谈判策略 是最核心的一步&#xff1a;不仅要明确价格承受范围&#xff0c;还需根据对方供应链特点和市场行情&#xff0c;准备多套备选方案&#xf…...

newbee商城购物车模块mapper.xml

1.浏览代码 1&#xff09;表 自定义 DROP TABLE IF EXISTS tb_newbee_mall_shopping_cart_item; CREATE TABLE tb_newbee_mall_shopping_cart_item (cart_item_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 购物项主键id,user_id bigint(20) NOT NULL COMMENT 用户主键id…...

高级java每日一道面试题-2025年4月07日-微服务篇[Nacos篇]-如何监控Nacos的运行状态?

如果有遗漏,评论区告诉我进行补充 面试官: 如何监控Nacos的运行状态&#xff1f; 我回答: 监控Nacos运行状态的综合方案 在Java高级面试中&#xff0c;监控Nacos运行状态是一个重要的技术点&#xff0c;它直接关系到微服务架构的稳定性和性能。以下是一个综合的监控方案&am…...

开源技术如何助力中小企业实现财务管理自主化?

中小企业的数字化困境与开源机遇 国际数据公司&#xff08;IDC&#xff09;研究显示&#xff0c;全球67%的中小企业因高昂的软件成本和僵化的功能设计&#xff0c;未能有效推进数字化转型。传统商业软件常面临三大矛盾&#xff1a; 功能冗余与核心需求缺失&#xff1a;标准化系…...

3D-DIC技术:煤层开采瓦斯防治的精准监测解决方案

3D-DIC非接触式三维全场应变测量系统是基于数字图像相关算法&#xff08;DIC&#xff09;的一种光学测定应变、变形的方法。由CCD相机、光源、支架、数据采集器和DIC软件组成。 一、DIC技术瓦斯防治应用 新拓三维XTDIC三维全场应变测量系统&#xff0c;通过两个工业相机采集图…...

CS5346 - Annotation in Visualization (可视化中的注释)

文章目录 Annotation 的重要性Levels of Annotation &#xff08;注释的层级&#xff09;Headings and IntroductionHeadings&#xff08;标题&#xff09;陈述型&#xff08;Statement&#xff09;&#xff1a;突出结论或有趣发现疑问型&#xff08;Question&#xff09;&…...

VRoid-Blender-Unity个人工作流笔记

流程 VRoid 选配模型>减面、减材质>导出vrm Blender&#xff08;先有CATS、vrm插件&#xff09; 导入vrm>Fix model>修骨骼>导出fbx Unity 找回贴图、改着色器、调着色器参数…… VRoid 减面 以模型不出现明显棱角为准。脸好像减面100也问题不大。 下…...

【ROS2】行为树 BehaviorTree(三):异步操作

【ROS】郭老二博文之:ROS目录 1、简述 前面的例子中,使用过同步节点 SyncActionNode,当调用到该节点时,成功返回SUCCESS,失败返回FAILURE,并且线程会等待该节点执行完毕。 如果需要异步操作,比如节点执行需要很长时间,不能立刻返回结果,可以先去执行其它任务,等该…...

Uniapp:本地存储

目录 一、概述二、分类三、同步存储&#xff1a;setStorageSync3.1 方法3.2 案例3.2.1 存储3.2.2 获取3.2.3 获取storage3.2.4 删除3.2.5 清空 四、异步存储&#xff1a;setStorage4.1 方法4.2 案例4.2.1 存储数据4.2.2 获取数据4.2.3 获取storage详情4.2.4 删除4.2.5 清空 一、…...

3D版的VLA——从3D VLA、SpatialVLA到PointVLA(不动VLM,仅动作专家中加入3D数据)

前言 之前写这篇文章的时候&#xff0c;就想解读下3D VLA来着&#xff0c;但一直因为和团队并行开发具身项目&#xff0c;很多解读被各种延后 更是各种出差&#xff0c;比如从25年3月下旬至今&#xff0c;连续出差三轮&#xff0c;绕中国半圈&#xff0c;具身占八成 第一轮 …...

Linux/Unix 命令pstree

pstree 是一个用于以树状结构显示系统中进程关系的 Linux/Unix 命令。它可以直观地展示进程的父子关系&#xff0c;帮助用户理解进程之间的层次结构。 基本用法 pstree [选项] [PID或用户名]如果不带参数&#xff0c;pstree 会显示所有进程的树状结构。可以指定 PID 来查看某个…...

探索Linux/Unix 系统中进程与文件的深层关系

在 Linux 和 Unix 系统中&#xff0c;“一切皆文件” 的设计哲学贯穿始终。这种理念不仅简化了系统的操作接口&#xff0c;也赋予了用户和开发者极大的灵活性。文件、目录、设备、网络套接字&#xff0c;甚至进程本身&#xff0c;都可以通过文件系统的形式进行访问和操作。其中…...

AI:线性代数之矩阵

从0到1吃透线性代数矩阵:码农必修的数学武器库 ⚔️🔥 🧩 矩阵基础概念(程序员视角) 在人工智能时代,矩阵早已突破数学课本的边界,成为程序员手中的瑞士军刀🔪。TensorFlow底层用矩阵实现张量计算⚡,OpenCV依赖矩阵完成图像卷积🌌,Spark MLlib通过矩阵分解进行…...

object类

equals() 方法 equals() 方法的原始定义是比较两个对象的内存地址是否相同&#xff0c;但在实际使用中&#xff0c;很多类都会重写这个方法&#xff0c;使其用于比较对象的内容是否相同。例如 String 类就重写了 equals() 方法&#xff0c;用于比较字符串的内容。 String str…...

MySQL表的使用(4)

首先回顾一下之前所学的增删查改&#xff0c;这些覆盖了平时使用的80% 我们上节课中学习到了MySQL的约束 其中Primary key 是主键约束&#xff0c;我们今天要学习的是外键约束 插入一个表 外键约束 父表 子表 这条记录中classid为5时候&#xff0c;不能插入&#xff1b; 删除…...

国产海光 DCU 资源监控脚本 + Promethues+grafana 深度解析

在当今数字化时代,对于服务器资源的高效监控与管理愈发重要。特别是在使用国产海光 DCU 的场景下,如何精准掌握其资源使用情况,成为了众多技术人员关注的焦点。本文将详细介绍一款国产海光 DCU 资源监控脚本,以及它与 Prometheus 和 Grafana 的结合使用,助力大家实现对 DC…...

视觉slam框架从理论到实践-第一节绪论

从opencv的基础实现学习完毕后&#xff0c;接下来依照视觉slam框架从理论到实践&#xff08;第二版&#xff09;的路线进行学习&#xff0c;主要以学习笔记的形式进行要点记录。 目录 1.数据里程计 2.后端优化 3.回环检测 4.建图 在视觉SLAM 中整体作业流程可分为&#xff1…...

基于若依的ruoyi-vue-plus的nbmade-boot在线表单的设计(二)后端方面的设计

希望大家一起能参与我的新开源项目nbmade-boot: 宁波智能制造低代码实训平台 主要目标是类似设计jeecgboot那样的online表单功能,因为online本身没有开源这部分代码,而我设计这个是完全开源的,所以希望大家支持支持,开源不容易。 今天主要是讲后端部门。 1、FormControl.ja…...

mapbox V3 新特性,加载风粒子动画

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️raster-particle 栅格粒子样式图层 api…...

开发一个答题pk小程序的大致成本是多少

答题 PK 小程序通常指的是一种允许用户之间进行实时或异步答题竞赛的应用程序&#xff0c;可能结合PK答题、积分系统、排行榜等功能。 一、首先&#xff0c;确定答题 PK 小程序的基本功能模块。这可能包括用户注册登录、题库管理、题目类型&#xff08;单选、多选、判断等&am…...

深入探索如何压缩 WebAssembly

一、初始体积&#xff1a;默认 Release 构建 我们从最基础的构建开始&#xff0c;不开启调试符号&#xff0c;仅使用默认的 release 模式&#xff1a; $ wc -c pkg/wasm_game_of_life_bg.wasm 29410 pkg/wasm_game_of_life_bg.wasm这是我们优化的起点 —— 29,410 字节。 二…...

系统性能优化总结与思考-第一部分

1.C代码优化策略总结 编译器方面&#xff1a;用好的编译器并用好编译器&#xff08;支持C11的编译器&#xff0c;IntelC&#xff08;速度最快&#xff09;GNU的C编译器GCC/G&#xff08;非常符合标准&#xff09;&#xff0c;Visual C&#xff08;性能折中&#xff09;&#x…...

Qt6文档阅读笔记-Simple Http Server解析

此篇博文是利用Qt6如何创建一个简单的HTTP服务。 此例展示了如何使用QHttpServer类建立服务端。服务端通过QTcpServer的bind()函数监听tcp端口&#xff0c;并且使用route()函数增加不同URL的处理。 QSslConfiguration conf QSslConfiguration::defaultConfiguration();const a…...

深度解析Redis过期字段清理机制:从源码到集群化实践 (二)

本文紧跟 上一篇 深度解析Redis过期字段清理机制&#xff1a;从源码到集群化实践 &#xff08;一&#xff09; 可以从redis合集中查看 八、Redis内核机制深度解析 8.1 Lua脚本执行引擎原理 Lua脚本执行流程图技术方案 ​​执行全流程解析&#xff1a;​ #mermaid-svg-X51Gno…...

【密码学——基础理论与应用】李子臣编著 第六章 祖冲之序列密码 课后习题

免责声明 这里都是自己搓或者手写的。 里面不少题目感觉有问题或者我的理解有偏颇&#xff0c;请大佬批评指正&#xff01; 不带思考抄作业的请自动退出&#xff0c;我的并非全对&#xff0c;仅仅提供思维&#xff01; 题目 逐题解析 6.1 直接看表得 0x18 0xAD 0xF8 0x25 …...

LFM调制信号分类与检测识别

LFM调制信号分类与检测识别 LFM调制信号分类识别AlexNet网络识别InceptionV3、ResNet-18、ResNet-50网络识别 LFM调制信号检测识别 LFM调制信号分类识别 支持识别LFM信号、间歇采样干扰(ISRJ)、灵巧噪声干扰(SNJ)、扫频干扰(SJ)、瞄准干扰(AJ)、阻塞干扰(BJ)、密集假目标干扰(…...

mac中的zip文件压缩与压缩文件中指定目录删除

问题 在使用mac的图形界面压缩文件后&#xff0c;往往那个压缩文件中带有__MACOSX文件&#xff0c;但是&#xff0c;这个文件夹又是我们不需要的目录&#xff0c;所有&#xff0c;需要对mac图形化界面压缩后的文件目录进行删除&#xff0c;改如何做&#xff1f; 检查压缩文件…...

docker 多主机容器组网

一、服务器A 1、初始化Swarm集群&#xff08;管理节点&#xff09; docker swarm init --advertise-addr 主节点ip 2、获取工作节点​​加入Swarm集群所需的Token 和完整命令 docker swarm join-token worker 3、创建Overlay网络 docker network create -d overlay --subnet…...

MAC Mini M4 上测试Detectron2 图像识别库

断断续续地做图像识别的应用&#xff0c;使用过各种图像识别算法&#xff0c;一开始使用openCV 做教室学生计数的程序。以后又使用YOLO 做医学伤口检测程序。最近&#xff0c;开始使用meta 公司的Detectron2.打算做OCR 文档结构分析 Detectron2 的开发者是 Meta 的 Facebook AI…...

AETTA: Label-Free Accuracy Estimation for Test-Time Adaptation

1. Motivation: 利用TTA(test time adaptation)来将在训练数据上的原始预训练的模型适应到新的未标注的测试据,传统的很多方法都做了一些不现实的假设,比如需要借助标注的数据/重新训练模型,为了解决这个问题,本论文提出了AETTA的方法,不需要任何的标注,借助TTA来实现…...