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

GDAL OGR C++ API 学习之路 (5)OGRLayer篇 代码示例

GetStyleTable

virtual OGRStyleTable *GetStyleTable ()

返回图层样式表

返回:  指向不应由调用方修改或释放的样式表的指针

// 假设图层对象为 poLayer
OGRStyleTable* poStyleTable = poLayer->GetStyleTable();
if (poStyleTable != nullptr) {// 处理样式表信息// ...
} else {// 图层没有关联样式表// ...
}

SetStyleTableDirect

virtual void SetStyleTableDirect(OGRStyleTable *poStyleTable )

设置图层样式表

参数:

poStyleTable -- 指向要设置的样式表的指针

// 假设图层对象为 poLayer,样式表对象为 poStyleTable
poLayer->SetStyleTableDirect(poStyleTable);

StartTransaction

Virtual OGRErr StartTransaction()

对于支持事务的数据源,StartTransaction 会创建一个事务

返回:  OGRERR_NONE成功

// 假设图层对象为 poLayer
if (poLayer->StartTransaction() == OGRERR_NONE) {// 在事务中进行一系列操作// ...// 提交事务poLayer->CommitTransaction();
} else {// 处理事务启动失败的情况
}

在 OGR 中,图层可以支持事务,通过调用 StartTransaction() 可以在图层中开始一个事务。在事务中,可以进行一系列的图层操作,例如添加要素、修改要素、删除要素等。当所有的操作都执行完成后,可以调用 CommitTransaction() 来提交事务,表示所有操作都成功执行。如果在事务过程中出现了错误,可以调用 RollbackTransaction() 来回滚事务,表示撤销之前的所有操作

 

CommitTransaction

virtual OGRErr CommitTransaction()

对于支持事务的数据源,提交事务提交事务

返回:  OGRERR_NONE成功

RollbackTransaction

Virtual OGRErr RollbackTransaction()

对于支持事务的数据源,RollbackTransaction 会将数据源回滚到当前事务开始之前的状态

返回:  OGRERR_NONE成功

    // 获取第一个图层OGRLayer* poLayer = poDS->GetLayer(0);// 开始事务poDS->StartTransaction();// 创建新要素OGRFeature* poFeature = new OGRFeature(poLayer->GetLayerDefn());// 设置要素属性poFeature->SetField("name", "New Feature");poFeature->SetField("population", 10000);// 创建新几何图形并设置为要素的几何图形OGRPoint point(100, 200);poFeature->SetGeometry(&point);// 将新要素添加到图层中if (poLayer->CreateFeature(poFeature) != OGRERR_NONE) {printf("添加要素失败!\n");poDS->RollbackTransaction(); // 回滚事务,撤销之前的操作OGRDataSource::DestroyDataSource(poDS);delete poFeature;exit(1);}// 提交事务,保存更改poDS->CommitTransaction();​

GetFIDColumn

virtual const char *GetFIDColumn()

此方法返回用作 FID 列的基础数据库列的名称,如果不支持,则返回  ""

返回:  FID 列名称

    // 获取第一个图层OGRLayer* poLayer = poDS->GetLayer(0);// 获取用于唯一标识要素的字段的名称const char* fid_column = poLayer->GetFIDColumn();if (fid_column != nullptr) {printf("用于唯一标识要素的字段名称:%s\n", fid_column);} else {printf("图层中没有用于唯一标识要素的字段。\n");}

GetGeometryColumn

virtual const char *GetGeometryColumn()

此方法返回用作几何列的基础数据库列的名称,如果不支持,则返回 “”

对于具有多个几何字段的图层,此方法仅返回第一个几何列的名称

返回: 几何列名称

    // 获取第一个图层OGRLayer* poLayer = poDS->GetLayer(0);// 获取存储几何信息的字段的名称const char* geometry_column = poLayer->GetGeometryColumn();if (geometry_column != nullptr) {printf("存储几何信息的字段名称:%s\n", geometry_column);} else {printf("图层中没有存储几何信息的字段。\n");}

SetIgnoredFields

virtual OGRErr SetIgnoredFieldsconst char **papszFields)

设置从图层检索要素时可以省略的字段

参数:

papszFields -- 以 NULL 项结尾的字段名称数组。如果传递 NULL,则清除忽略的列表。

返回:  OGRERR_NONE是否已解析所有字段名称(即使驱动程序不支持此方法)

   // 获取第一个图层OGRLayer* poLayer = poDS->GetLayer(0);// 定义要忽略的字段数组const char* papszFields[] = {"field1", "field2"};// 设置要忽略的字段OGRErr err = poLayer->SetIgnoredFields(papszFields);if (err != OGRERR_NONE) {// 处理设置忽略字段时发生的错误}// 其他处理代码...

 GetIgnoredFields可以拿到忽略字段列表

    // 获取当前设置的忽略字段列表char** papszIgnoredFields = poLayer->GetIgnoredFields();// 打印忽略字段列表for (int i = 0; papszIgnoredFields[i] != nullptr; i++) {printf("Ignored Field: %s\n", papszIgnoredFields[i]);}

GetGeometryTypes

virtual OGRGeometryTypeCounter *GetGeometryTypes(int iGeomField, int nFlagsGGT, int &nEntryCountOut, GDALProgressFunc pfnProgress, void *pProgressData)

获取在要素中找到的实际几何类型

参数:

  • iGeomField -- 几何字段索引。

  • nFlagsGGT -- 提示标志。0 或 OGR_GGT_COUNT_NOT_NEEDED、OGR_GGT_STOP_IF_MIXED、OGR_GGT_GEOMCOLLECTIONZ_TINZ的组合

  • nEntryCountOut -- [out] 返回数组中的条目数。

  • pfnProgress-- 取消回调。可能为空。

  • pProgressData -- 取消回调的用户数据。可能为空。

返回: 一个 nEntryCount 数组,如果出现错误,必须使用 CPLFree() 或 NULL 释放

Intersection

OGRErr Intersection(OGRLayer *pLayerMethod, OGRLayer *pLayerResult, char **papszOptions = nullptr, GDALProgressFunc pfnProgress = nullptr, void *pProgressArg = nullptr)

两层的交集

参数:

  • pLayerMethod -- 方法层。不应为 NULL。

  • pLayerResult -- 插入操作生成的要素的图层。不应为 NULL

  • papszOptions -- NULL 终止的选项列表(可能为 NULL)。

  • pfnProgress -- 一个与 GDALProgressFunc() 兼容的回调函数,用于报告进度或 NULL。

  • pProgressArg -- 要传递给 pfnProgress 的参数。可能为空。

返回:

如果出现错误或执行中断,则为错误代码,否则OGRERR_NONE

Union

OGRErr Union(OGRLayer *pLayerMethod, OGRLayer *pLayerResult, char **papszOptions = nullptr, GDALProgressFunc pfnProgress = nullptr, void *pProgressArg = nullptr)

两层并集

参数:

  • pLayerMethod -- 方法层。不应为 NULL。

  • pLayerResult -- 插入操作生成的要素的图层。不应为 NULL。

  • papszOptions -- NULL 终止的选项列表(可能为 NULL)。

  • pfnProgress -- 一个与 GDALProgressFunc() 兼容的回调函数,用于报告进度或 NULL。

  • pProgressArg -- 要传递给 pfnProgress 的参数。可能为空。

返回:

如果出现错误或执行中断,则为错误代码,否则OGRERR_NONE

// 获取输入图层和输出图层
OGRLayer* pLayer1 = poInputDS->GetLayer(0);
OGRLayer* pLayer2 = poInputDS->GetLayer(1);
OGRLayer* pLayerResult = poOutputDS->CreateLayer("SymDifference_Result", nullptr, wkbUnknown, nullptr);// 计算几何形状的对称差并将结果写入输出图层
OGRErr err = pLayer1->Union(pLayer2, pLayerResult, nullptr, nullptr, nullptr);// 保存并关闭结果图层
pLayerResult->SyncToDisk();

SymDifference

OGRErr SymDifference(OGRLayer *pLayerMethod, OGRLayer *pLayerResult, char **papszOptions, GDALProgressFunc pfnProgress, void *pProgressArg)

两层对称差异(交集取反)

参数:

  • pLayerMethod -- 方法层。不应为 NULL。

  • pLayerResult -- 插入操作生成的要素的图层。不应为 NULL。

  • papszOptions -- NULL 终止的选项列表(可能为 NULL)。

  • pfnProgress -- 一个与 GDALProgressFunc() 兼容的回调函数,用于报告进度或 NULL。

  • pProgressArg -- 要传递给 pfnProgress 的参数。可能为空。

返回:

如果出现错误或执行中断,则为错误代码,否则OGRERR_NONE

// 获取输入图层和输出图层
OGRLayer* pLayer1 = poInputDS->GetLayer(0);
OGRLayer* pLayer2 = poInputDS->GetLayer(1);
OGRLayer* pLayerResult = poOutputDS->CreateLayer("SymDifference_Result", nullptr, wkbUnknown, nullptr);// 计算几何形状的对称差并将结果写入输出图层
OGRErr err = pLayer1->SymDifference(pLayer2, pLayerResult, nullptr, nullptr, nullptr);// 保存并关闭结果图层
pLayerResult->SyncToDisk();

Identity

OGRErr Identity(OGRLayer *pLayerMethod, OGRLayer *pLayerResult, char **papszOptions = nullptr, GDALProgressFunc pfnProgress = nullptr, void *pProgressArg = nullptr)

将此图层的特征与标识层中的特征标识

参数:

  • pLayerMethod -- 方法层。不应为 NULL。

  • pLayerResult -- 插入操作生成的要素的图层。不应为 NULL。

  • papszOptions -- NULL 终止的选项列表(可能为 NULL)。

  • pfnProgress -- 一个与 GDALProgressFunc() 兼容的回调函数,用于报告进度或 NULL。

  • pProgressArg -- 要传递给 pfnProgress 的参数。可能为空。

返回:

如果出现错误或执行中断,则为错误代码,否则OGRERR_NONE

// 获取输入图层和输出图层
OGRLayer* pLayer1 = poInputDS->GetLayer(0);
OGRLayer* pLayer2 = poInputDS->GetLayer(1);
OGRLayer* pLayerResult = poOutputDS->CreateLayer("Identity_Result", nullptr, wkbUnknown, nullptr);// 计算几何形状的恒等并将结果写入输出图层
OGRErr err = pLayer1->Identity(pLayer2, pLayerResult, nullptr, nullptr, nullptr);// 保存并关闭结果图层
pLayerResult->SyncToDisk();

Update

OGRErr Update(OGRLayer *pLayerMethod, OGRLayer *pLayerResult, char **papszOptions = nullptr, GDALProgressFunc pfnProgress = nullptr, void *pProgressArg = nullptr)

使用更新图层中的要素更新此图层

参数:

  • pLayerMethod -- 方法层。不应为 NULL。

  • pLayerResult -- 插入操作生成的要素的图层。不应为 NULL。

  • papszOptions -- NULL 终止的选项列表(可能为 NULL)。

  • pfnProgress -- 一个与 GDALProgressFunc() 兼容的回调函数,用于报告进度或 NULL。

  • pProgressArg -- 要传递给 pfnProgress 的参数。可能为空。

返回:

如果出现错误或执行中断,则为错误代码,否则OGRERR_NONE

// 获取输入图层和输出图层
OGRLayer* pLayer1 = poInputDS->GetLayer(0);
OGRLayer* pLayer2 = poInputDS->GetLayer(1);
OGRLayer* pLayerResult = poOutputDS->CreateLayer("SymDifference_Result", nullptr, wkbUnknown, nullptr);// 计算几何形状的对称差并将结果写入输出图层
OGRErr err = pLayer1->Update(pLayer2, pLayerResult, nullptr, nullptr, nullptr);// 保存并关闭结果图层
pLayerResult->SyncToDisk();

Clip

OGRErr Clip(OGRLayer *pLayerMethod, OGRLayer *pLayerResult, char **papszOptions = nullptr, GDALProgressFunc pfnProgress = nullptr, void *pProgressArg = nullptr)

裁剪方法图层未覆盖的区域

参数:

  • pLayerMethod -- 方法层。不应为 NULL。

  • pLayerResult -- 插入操作生成的要素的图层。不应为 NULL。

  • papszOptions -- NULL 终止的选项列表(可能为 NULL)。

  • pfnProgress -- 一个与 GDALProgressFunc() 兼容的回调函数,用于报告进度或 NULL。

  • pProgressArg -- 要传递给 pfnProgress 的参数。可能为空。

返回:如果出现错误或执行中断,则为错误代码,否则OGRERR_NONE

// 获取输入图层和输出图层
OGRLayer* pLayer1 = poInputDS->GetLayer(0);
OGRLayer* pLayer2 = poInputDS->GetLayer(1);
OGRLayer* pLayerResult = poOutputDS->CreateLayer("SymDifference_Result", nullptr, wkbUnknown, nullptr);// 计算几何形状的对称差并将结果写入输出图层
OGRErr err = pLayer1->Clip(pLayer2, pLayerResult, nullptr, nullptr, nullptr);// 保存并关闭结果图层
pLayerResult->SyncToDisk();

Erase

OGRErr Erase(OGRLayer *pLayerMethod, OGRLayer *pLayerResult, char **papszOptions = nullptr, GDALProgressFunc pfnProgress = nullptr, void *pProgressArg = nullptr)

移除方法图层覆盖的区域

参数:

  • pLayerMethod -- 方法层。不应为 NULL。

  • pLayerResult -- 插入操作生成的要素的图层。不应为 NULL。

  • papszOptions -- NULL 终止的选项列表(可能为 NULL)。

  • pfnProgress -- 一个与 GDALProgressFunc() 兼容的回调函数,用于报告进度或 NULL。

  • pProgressArg -- 要传递给 pfnProgress 的参数。可能为空。

返回: 如果出现错误或执行中断,则为错误代码,否则OGRERR_NONE

// 获取输入图层和输出图层
OGRLayer* pLayer1 = poInputDS->GetLayer(0);
OGRLayer* pLayer2 = poInputDS->GetLayer(1);
OGRLayer* pLayerResult = poOutputDS->CreateLayer("SymDifference_Result", nullptr, wkbUnknown, nullptr);// 计算几何形状的对称差并将结果写入输出图层
OGRErr err = pLayer1->Erase(pLayer2, pLayerResult, nullptr, nullptr, nullptr);// 保存并关闭结果图层
pLayerResult->SyncToDisk();

Reference

int Reference()

递增图层引用计数

返回:递增后的引用计数

Dereference

int Dereference()

递减图层参考计数

返回:递减后的引用计数

ReorderField

OGRErr ReorderField(int iOldFieldPos, int iNewFieldPos)

对图层上的现有字段重新排序

参数:

  • iOldFieldPos -- 要移动的字段的先前位置。必须在 [0,GetFieldCount()-1] 范围内。

  • iNewFieldPos -- 要移动的字段的新位置。必须在 [0,GetFieldCount()-1] 范围内。

返回:  OGRERR_NONE成功

// 获取输入图层
OGRLayer* pLayer = poInputDS->GetLayer(0);// 获取字段总数
int fieldCount = pLayer->GetLayerDefn()->GetFieldCount();// 假设我们要将第1个字段移动到第3个位置
int oldFieldPos = 0; // 第1个字段的位置(索引从0开始)
int newFieldPos = 2; // 新的位置(索引从0开始)if (oldFieldPos < 0 || oldFieldPos >= fieldCount || newFieldPos < 0 || newFieldPos >= fieldCount) {// 检查字段位置是否有效// 可以根据需要添加其他错误处理逻辑return OGRERR_FAILURE;
}// 重新排列字段
OGRErr err = pLayer->ReorderField(oldFieldPos, newFieldPos);
if (err != OGRERR_NONE) {// 重新排列失败,可以根据需要添加错误处理逻辑return err;
}// 保存并关闭数据源
pLayer->SyncToDisk();

相关文章:

GDAL OGR C++ API 学习之路 (5)OGRLayer篇 代码示例

GetStyleTable virtual OGRStyleTable *GetStyleTable () 返回图层样式表 返回: 指向不应由调用方修改或释放的样式表的指针 // 假设图层对象为 poLayer OGRStyleTable* poStyleTable poLayer->GetStyleTable(); if (poStyleTable ! nullptr) {// 处理样式表信息// ..…...

NIDEC COMPONENTS尼得科科宝滑动型DIP开关各系列介绍

今天AMEYA360对尼得科科宝电子滑动型DIP开关各系列参数进行详细介绍&#xff0c;方便大家选择适合自己的型号。 系列一、滑动型DIP开关 CVS 针脚数&#xff1a;1, 2, 3, 4, 8 安装类型&#xff1a;表面贴装&#xff0c;通孔 可水洗&#xff1a;无 端子类型&#xff1a;PC引脚(只…...

一起学算法(滑动窗口篇)

前言&#xff1a; 对于滑动窗口&#xff0c;有长度固定的窗口&#xff0c;也有长度可变的窗口&#xff0c;一般是基于数组进行求解&#xff0c;对于一个数组中两个相邻的窗口&#xff0c;势必会有一大部分重叠&#xff0c;这部分重叠的内容是不需要重复计算的&#xff0c;所以我…...

HTML <q> 标签

实例 标记短的引用: <q>Here is a short quotation here is a short quotation</q>浏览器支持 元素ChromeIEFirefoxSafariOpera<q>YesYesYesYesYes所有浏览器都支持 <q> 标签。 定义和用法 <q> 标签定义短的引用。 浏览器经常在引用的内容…...

机器学习02-再识K邻近算法(自定义数据集训练及测试)

定义&#xff1a; 如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别&#xff0c;则该样本也属于这个类别。简单的说就是根据你的“邻居”来推断出你的类别。 用个成语就是物以类聚 思想&#xff1a; 如果一个样本在特征空间中的K个最…...

github使用笔记及git协作常用命令

1.Github有一个主库,每个人自己也有一个库,称为分支。 2.Github的协作流程:先从主库fork出自己的分支, 然后进行代码的修改等操作, 操作完之后从本地库上推到自己的服务器分支,然后 服务器分支Pull Request到 主库。 3.本地仓库由git维护的三棵“树"组成:第1个…...

iOS - Apple开发者账户添加新测试设备

获取UUID 首先将设备连接XCode&#xff0c;打开Window -> Devices and Simulators&#xff0c;通过下方位置查看 之后登录(苹果开发者网站)[https://developer.apple.com/account/] &#xff0c;点击设备 点击加号添加新设备 填写信息之后点击Continue&#xff0c;并一路继续…...

vue 前端 邮箱、密码、手机号码等输入验证规则

最近在写前端表单验证的时候&#xff0c;发现一篇文章质量很好&#xff0c;所以写下这篇文章记录 原文章链接&#xff1a;vue 邮箱、密码、手机号码等输入验证规则 1.手机号 const checkPhone (rule, value, callback) > {const phoneReg /^1[34578]\d{9}$$/;if (!value…...

如何看待前端已死这个问题(大学生篇)

小编刚大学毕业&#xff0c;还记得是大三的时候选择的前端开发方向&#xff0c;那个时候行情其实并没有这么差&#xff0c;最近互联网上讨论这一个很火的话题&#xff0c;叫前端已死。那么我就说说我的看法吧&#xff0c;虽然可能比起行业的大佬会比较短浅&#xff0c;但我想就…...

揭开高级产品经理思维的秘密

我经常被问到产品经理如何晋升到更高级别。事实上&#xff0c;获得晋升往往是一场复杂的游戏。是的&#xff0c;你的技能和成就很重要&#xff0c;但其他因素也很重要&#xff0c;比如你的经理对人才培养的关心程度、你的同事有多优秀、任期有多长、公司的政治氛围如何等等。 所…...

Java 学习路线图

以下是 Java 学习路线图的大致概述&#xff1a; Java 基础语法和面向对象编程&#xff08;OOP&#xff09;&#xff1a;包括数据类型、控制流、数组、类和对象、继承、多态、抽象类和接口等。 Java 集合框架&#xff1a;包括集合和 Map 等常用数据结构的使用和操作。 Java I/…...

在springboot项目中使用策略工厂模式

在springboot项目中使用策略工厂模式 策略接口类 package cn.test.ext;public interface ITestStrategy {void execTestMethod(); }策略实现类 package cn.test.ext.beanlife;import cn.test.ext.ITestStrategy; import cn.test.ext.MyStrategyFactory; import lombok.exter…...

mysql综合练习语法总结

mysql综合练习 用于 小白练手的主要用于以后语法忘了回来看 题目 # 1、创建数据库test01_library # 2、创建表 books&#xff0c;表结构如下&#xff1a;# 3、向books表中插入记录 # 1&#xff09;不指定字段名称&#xff0c;插入第一条记录 # 2&#xff09;指定所有字段名…...

统计神经网络参数量、MAC、FLOPs等信息

0、基础提示 1、FLOPS是用来衡量硬件算力的指标&#xff0c;FLOPs用来衡量模型复杂度。 2、MAC 一般为 FLOPs的2倍 3、并非FLOPs越小在硬件上就一定运行更快&#xff0c;还与模型占用的内存&#xff0c;带宽&#xff0c;等有关 1、FLOPs计算 神经网络参数量。用于衡量模型大…...

【多模态】21、BARON | 通过引入大量 regions 来提升模型开放词汇目标检测能力(CVPR2021)

文章目录 一、背景二、方法2.1 主要过程2.2 Forming Bag of Regions2.3 Representing Bag of Regions2.4 Aligning bag of regions 三、效果 论文&#xff1a;Aligning Bag of Regions for Open-Vocabulary Object Detection 代码&#xff1a;https://github.com/wusize/ovdet…...

Ansible 自动化运维

目录 ansible 环境安装部署ansible 命令行模块inventory 主机清单 Ansible是一个基于Python开发的配置管理和应用部署工具&#xff0c;现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点&#xff0c;Pubbet和Saltstack能实现的功能&#xff0c;Ansible基本上都可…...

指纹浏览器能为TikTok运营提供哪些便利?

TikTok是一个非常垂直的平台&#xff0c;每个账号的内容都应尽可能保持垂直&#xff0c;这样平台才会给予更多的流量。有运营经验的TikTok用户一般会经营多个账号&#xff0c;从而获取更多的收益。指纹浏览器作为一种新型浏览器&#xff0c;它的优势不可否认。那么指纹浏览器能…...

关于远程直接内存访问技术 RDMA 的高性能架构设计介绍 | 龙蜥技术

编者按&#xff1a;传统以太网方案存在系统调用消耗大量时间、增加数据传输延时、对 CPU 造成很重的负担三个缺点&#xff0c;而 RDMA 技术可以解决以上三个缺点。那 RDMA 究竟是什么&#xff1f;它的方案的设计思路是什么&#xff1f;今天&#xff0c;浪潮信息驱动工程师刘伟带…...

【Boost搜索引擎项目】

文章目录 一、项目流程二、项目展示 一、项目流程 1.编写数据去标签模块–parser.cc 将去标签之后干净文档以title\3content\3url\ntitle\3content\3url\n格式放入同一文件中。 2.建立索引模块–index.hpp 读取处理好的行文本文件进行分词、权重计算等操作&#xff0c;在内存中…...

JVM入门篇-JVM的概念与学习路线

JVM入门篇-JVM的概念与学习路线 什么是 JVM 定义 Java Virtual Machine - java 程序的运行环境&#xff08;java 二进制字节码的运行环境&#xff09; 好处 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收功能数组下标越界检查多态 比较 jvm jre jdk 常…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

云原生周刊:k0s 成为 CNCF 沙箱项目

开源项目推荐 HAMi HAMi&#xff08;原名 k8s‑vGPU‑scheduler&#xff09;是一款 CNCF Sandbox 级别的开源 K8s 中间件&#xff0c;通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度&#xff0c;为容器提供统一接口&#xff0c;实现细粒度资源配额…...

​​企业大模型服务合规指南:深度解析备案与登记制度​​

伴随AI技术的爆炸式发展&#xff0c;尤其是大模型&#xff08;LLM&#xff09;在各行各业的深度应用和整合&#xff0c;企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者&#xff0c;还是积极拥抱AI转型的传统企业&#xff0c;在面向公众…...

[特殊字符] 手撸 Redis 互斥锁那些坑

&#x1f4d6; 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作&#xff0c;想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁&#xff0c;也顺便跟 Redisson 的 RLock 机制对比了下&#xff0c;记录一波&#xff0c;别踩我踩过…...

相关类相关的可视化图像总结

目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系&#xff0c;可直观判断线性相关、非线性相关或无相关关系&#xff0c;点的分布密…...