鸿蒙开发设备管理:【@ohos.usb (USB管理)】
USB管理
本模块主要提供管理USB设备的相关功能,包括查询USB设备列表、批量数据传输、控制命令传输、权限控制等。
说明:
本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
导入模块
import usb from "@ohos.usb";
usb.getDevices
getDevices(): Array<Readonly>
获取USB设备列表。
系统能力: SystemCapability.USB.USBManager
返回值:
类型 | 说明 |
---|---|
Array<Readonly<[USBDevice]>> | 设备信息列表。 |
示例:
let devicesList = usb.getDevices();
console.log(`devicesList = ${JSON.stringify(devicesList)}`);
//devicesList 返回的数据结构
//此处提供一个简单的示例,如下
[{name: "1-1",serial: "",manufacturerName: "",productName: "",version: "",vendorId: 7531,productId: 2,clazz: 9,subclass: 0,protocol: 1,devAddress: 1,busNum: 1,configs: [{id: 1,attributes: 224,isRemoteWakeup: true,isSelfPowered: true,maxPower: 0,name: "1-1",interfaces: [{id: 0,protocol: 0,clazz: 9,subclass: 0,alternateSetting: 0,name: "1-1",endpoints: [{address: 129,attributes: 3,interval: 12,maxPacketSize: 4,direction: 128,number: 1,type: 3,interfaceId: 0,},],},],},],},
]
usb.connectDevice
connectDevice(device: USBDevice): Readonly
打开USB设备。
需要调用[usb.getDevices]获取设备信息以及device;再调用[usb.requestRight]获取设备请求权限。
系统能力: SystemCapability.USB.USBManager
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
device | [USBDevice] | 是 | USB设备信息。 |
返回值:
类型 | 说明 |
---|---|
Readonly<[USBDevicePipe]> | 指定的传输通道对象。 |
示例:
let devicepipe= usb.connectDevice(device);
console.log(`devicepipe = ${JSON.stringify(devicepipe)}`);
usb.hasRight
hasRight(deviceName: string): boolean
判断是否有权访问该设备。
系统能力: SystemCapability.USB.USBManager
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
deviceName | string | 是 | 设备名称。 |
返回值:
类型 | 说明 |
---|---|
boolean | true表示有访问设备的权限,false表示没有访问设备的权限。 |
示例:
let devicesName="1-1";
let bool = usb.hasRight(devicesName);
console.log(bool);
usb.requestRight
requestRight(deviceName: string): Promise
请求软件包的临时权限以访问设备。
系统能力: SystemCapability.USB.USBManager
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
deviceName | string | 是 | 设备名称。 |
返回值:
类型 | 说明 |
---|---|
Promise | 获取到true则表示软件包的临时权限已访问成功, 获取到false则表示软件包的临时权限已访问失败。 |
示例:
let devicesName="1-1";
usb.requestRight(devicesName).then((ret) => {console.log(`requestRight = ${JSON.stringify(ret)}`);
});
usb.claimInterface
claimInterface(pipe: USBDevicePipe, iface: USBInterface, force?: boolean): number
注册通信接口。
需要调用[usb.getDevices]获取设备信息以及interfaces;调用[usb.requestRight]获取设备请求权限;调用[usb.connectDevice]接口得到devicepipe作为参数。
系统能力: SystemCapability.USB.USBManager
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
pipe | [USBDevicePipe] | 是 | 用于确定总线号和设备地址。 |
iface | [USBInterface] | 是 | 用于确定需要获取接口的索引。 |
force | boolean | 否 | 可选参数,是否强制获取。默认值false ,表示不强制获取。 |
返回值:
类型 | 说明 |
---|---|
number | 注册通信接口成功返回0;注册通信接口失败返回其他错误码。 |
示例:
let ret = usb.claimInterface(devicepipe, interfaces);
console.log(`claimInterface = ${ret}`);
usb.releaseInterface
releaseInterface(pipe: USBDevicePipe, iface: USBInterface): number
释放注册过的通信接口。
需要调用[usb.claimInterface]先获取接口,才能使用此方法释放接口。
系统能力: SystemCapability.USB.USBManager
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
pipe | [USBDevicePipe] | 是 | 用于确定总线号和设备地址。 |
iface | [USBInterface] | 是 | 用于确定需要释放接口的索引。 |
返回值:
类型 | 说明 |
---|---|
number | 释放接口成功返回0;释放接口失败返回其他错误码。 |
示例:
let ret = usb.releaseInterface(devicepipe, interfaces);
console.log(`releaseInterface = ${ret}`);
usb.setConfiguration
setConfiguration(pipe: USBDevicePipe, config: USBConfig): number
设置设备配置。
需要调用[usb.getDevices]获取设备信息以及config;调用[usb.requestRight]获取设备请求权限;调用[usb.connectDevice]得到devicepipe作为参数。
系统能力: SystemCapability.USB.USBManager
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
pipe | [USBDevicePipe] | 是 | 用于确定总线号和设备地址。 |
config | [USBConfig] | 是 | 用于确定需要设置的配置。 |
返回值:
类型 | 说明 |
---|---|
number | 设置设备配置成功返回0;设置设备配置失败返回其他错误码。 |
示例:
let ret = usb.setConfiguration(devicepipe, config);
console.log(`setConfiguration = ${ret}`);
usb.setInterface
setInterface(pipe: USBDevicePipe, iface: USBInterface): number
设置设备接口。
需要调用[usb.getDevices]获取设备列表以及interfaces;调用[usb.requestRight]获取设备请求权限;调用[usb.connectDevice]得到devicepipe作为参数;调用[usb.claimInterface]注册通信接口。
系统能力: SystemCapability.USB.USBManager
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
pipe | [USBDevicePipe] | 是 | 用于确定总线号和设备地址。 |
iface | [USBInterface] | 是 | 用于确定需要设置的接口。 |
返回值:
类型 | 说明 |
---|---|
number | 设置设备接口成功返回0;设置设备接口失败返回其他错误码。 |
示例:
let ret = usb.setInterface(devicepipe, interfaces);
console.log(`setInterface = ${ret}`);
usb.getRawDescriptor
getRawDescriptor(pipe: USBDevicePipe): Uint8Array
获取原始的USB描述符。
需要调用[usb.getDevices]获取设备列表;调用[usb.requestRight]获取设备请求权限;调用[usb.connectDevice]接口得到devicepipe作为参数。
系统能力: SystemCapability.USB.USBManager
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
pipe | [USBDevicePipe] | 是 | 用于确定总线号和设备地址。 |
返回值:
类型 | 说明 |
---|---|
Uint8Array | 返回获取的原始数据;失败返回undefined。 |
示例:
let ret = usb.getRawDescriptor(devicepipe);
usb.getFileDescriptor
getFileDescriptor(pipe: USBDevicePipe): number
获取文件描述符。
需要调用[usb.getDevices]获取设备列表;调用[usb.requestRight]获取设备请求权限;调用[usb.connectDevice]接口得到devicepipe作为参数。
系统能力: SystemCapability.USB.USBManager
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
pipe | [USBDevicePipe] | 是 | 用于确定总线号和设备地址。 |
返回值:
类型 | 说明 |
---|---|
number | 返回设备对应的文件描述符;失败返回-1。 |
示例:
let ret = usb.getFileDescriptor(devicepipe);
usb.controlTransfer
controlTransfer(pipe: USBDevicePipe, contrlparam: USBControlParams, timeout?: number): Promise
控制传输。
需要调用[usb.getDevices]获取设备列表;调用[usb.requestRight]获取设备请求权限;调用[usb.connectDevice]接口得到devicepipe作为参数。
系统能力: SystemCapability.USB.USBManager
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
pipe | [USBDevicePipe] | 是 | 用于确定设备。 |
contrlparam | [USBControlParams] | 是 | 控制传输参数。 |
timeout | number | 否 | 超时时间,可选参数,默认为0不超时。 |
返回值:
类型 | 说明 |
---|---|
Promise | 获取传输或接收到的数据块大小, 获取到-1则表示异常。 |
示例:
usb.controlTransfer(devicepipe, USBControlParams).then((ret) => {console.log(`controlTransfer = ${JSON.stringify(ret)}`);
})
usb.bulkTransfer
bulkTransfer(pipe: USBDevicePipe, endpoint: USBEndpoint, buffer: Uint8Array, timeout?: number): Promise
批量传输。
需要调用[usb.getDevices]获取设备信息列表以及endpoint;再调用[usb.requestRight]获取设备请求权限;然后调用[usb.connectDevice]接口得到返回数据devicepipe之后,再次获取接口[usb.claimInterface];再调用usb.bulkTransfer接口。
系统能力: SystemCapability.USB.USBManager
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
pipe | [USBDevicePipe] | 是 | 用于确定设备。 |
endpoint | [USBEndpoint] | 是 | 用于确定传输的端口。 |
buffer | Uint8Array | 是 | 用于写入或读取的缓冲区。 |
timeout | number | 否 | 超时时间,可选参数,默认为0不超时。 |
返回值:
类型 | 说明 |
---|---|
Promise | 获取传输或接收到的数据块大小, 获取到-1则表示异常。 |
示例:
//usb.getDevices 接口返回数据集合,取其中一个设备对象,并获取权限 。
//把获取到的设备对象作为参数传入usb.connectDevice;当usb.connectDevice接口成功返回之后;
//才可以调用第三个接口usb.claimInterface.当usb.claimInterface 调用成功以后,再调用该接口。
usb.bulkTransfer(devicepipe, endpoint, buffer).then((ret) => {console.log(`bulkTransfer = ${JSON.stringify(ret)}`);
});
usb.closePipe
closePipe(pipe: USBDevicePipe): number
关闭设备消息控制通道。
需要调用[usb.getDevices]获取设备列表;调用[usb.requestRight]获取设备请求权限;调用[usb.connectDevice]得到devicepipe作为参数。
系统能力: SystemCapability.USB.USBManager
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
pipe | [USBDevicePipe] | 是 | 用于确定USB设备消息控制通道。 |
返回值:
类型 | 说明 |
---|---|
number | 关闭设备消息控制通道成功返回0;关闭设备消息控制通道失败返回其他错误码。 |
示例:
let ret = usb.closePipe(devicepipe);
console.log(`closePipe = ${ret}`);
USBEndpoint
通过USB发送和接收数据的端口。通过[USBInterface]获取。
系统能力:以下各项对应的系统能力均为 SystemCapability.USB.USBManager。
名称 | 参数类型 | 说明 |
---|---|---|
address | number | 端点地址。 |
attributes | number | 端点属性。 |
interval | number | 端点间隔。 |
maxPacketSize | number | 端点最大数据包大小。 |
direction | [USBRequestDirection] | 端点的方向。 |
number | number | 端点号。 |
type | number | 端点类型。 |
interfaceId | number | 端点所属的接口的唯一标识。 |
USBInterface
一个[USBConfig]中可以含有多个USBInterface,每个USBInterface提供一个功能。
系统能力:以下各项对应的系统能力均为 SystemCapability.USB.USBManager。
名称 | 参数类型 | 说明 |
---|---|---|
id | number | 接口的唯一标识。 |
protocol | number | 接口的协议。 |
clazz | number | 设备类型。 |
subClass | number | 设备子类。 |
alternateSetting | number | 在同一个接口中的多个描述符中进行切换设置。 |
name | string | 接口名称。 |
endpoints | Array<[USBEndpoint]> | 当前接口所包含的端点。 |
USBConfig
USB配置,一个[USBDevice]中可以含有多个配置。
系统能力:以下各项对应的系统能力均为 SystemCapability.USB.USBManager。
名称 | 参数类型 | 说明 |
---|---|---|
id | number | 配置的唯一标识。 |
attributes | number | 配置的属性。 |
maxPower | number | 最大功耗,以毫安为单位。 |
name | string | 配置的名称,可以为空。 |
isRemoteWakeup | boolean | 检查当前配置是否支持远程唤醒。 |
isSelfPowered | boolean | 检查当前配置是否支持独立电源。 |
interfaces | Array <[USBInterface]> | 配置支持的接口属性。 |
USBDevice
USB设备信息。
系统能力:以下各项对应的系统能力均为 SystemCapability.USB.USBManager。
名称 | 参数类型 | 说明 |
---|---|---|
busNum | number | 总线地址。 |
devAddress | number | 设备地址。 |
serial | string | 序列号。 |
name | string | 设备名字。 |
manufacturerName | string | 产商信息。 |
productName | string | 产品信息。 |
version | string | 版本。 |
vendorId | number | 厂商ID。 |
productId | number | 产品ID。 |
clazz | number | 设备类。 |
subClass | number | 设备子类。 |
protocol | number | 设备协议码。 |
configs | Array<[USBConfig]> | 设备配置描述符信息。 |
USBDevicePipe
USB设备消息传输通道,用于确定设备。
系统能力:以下各项对应的系统能力均为 SystemCapability.USB.USBManager。
名称 | 参数类型 | 说明 |
---|---|---|
busNum | number | 总线地址。 |
devAddress | number | 设备地址。 |
USBControlParams
控制传输参数。
系统能力:以下各项对应的系统能力均为 SystemCapability.USB.USBManager。
名称 | 参数类型 | 说明 |
---|---|---|
request | number | 请求类型。 |
target | [USBRequestTargetType] | 请求目标类型。 |
reqType | [USBControlRequestType] | 请求控制类型。 |
value | number | 请求参数。 |
index | number | 请求参数value对应的索引值。 |
data | Uint8Array | 用于写入或读取的缓冲区。 |
USBRequestTargetType
请求目标类型。
系统能力:以下各项对应的系统能力均为 SystemCapability.USB.USBManager。
名称 | 默认值 | 说明 |
---|---|---|
USB_REQUEST_TARGET_DEVICE | 0 | 设备。 |
USB_REQUEST_TARGET_INTERFACE | 1 | 接口。 |
USB_REQUEST_TARGET_ENDPOINT | 2 | 端点。 |
USB_REQUEST_TARGET_OTHER | 3 | 其他。 |
USBControlRequestType
控制请求类型。
系统能力:以下各项对应的系统能力均为 SystemCapability.USB.USBManager。
名称 | 默认值 | 说明 |
---|---|---|
USB_REQUEST_TYPE_STANDARD | 0 | 标准。 |
USB_REQUEST_TYPE_CLASS | 1 | 类。 |
USB_REQUEST_TYPE_VENDOR | 2 | 厂商。 |
USBRequestDirection
请求方向。
系统能力:以下各项对应的系统能力均为 SystemCapability.USB.USBManager。
名称 | 默认值 | 说明 |
---|---|---|
USB_REQUEST_DIR_TO_DEVICE | 0 | 写数据,主设备往从设备。 |
USB_REQUEST_DIR_FROM_DEVICE | 0x80 | 读数据,从设备往主设备。 |
相关文章:
鸿蒙开发设备管理:【@ohos.usb (USB管理)】
USB管理 本模块主要提供管理USB设备的相关功能,包括查询USB设备列表、批量数据传输、控制命令传输、权限控制等。 说明: 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import …...

Golang | Leetcode Golang题解之第204题计数质数
题目: 题解: func countPrimes(n int) int {primes : []int{}isPrime : make([]bool, n)for i : range isPrime {isPrime[i] true}for i : 2; i < n; i {if isPrime[i] {primes append(primes, i)}for _, p : range primes {if i*p > n {break}…...

ELK日志系统和Filebeat采集器的学习总结
ELK是ElasticSerach、Logstash、Kina Logstash负责采集数据,Logstash有三个插件,input、filter、output,filter插件作用是对采集的数据进行处理,过滤的,因此filter插件可以选,可以不用配置。 ElasticSear…...
QML-Grid和OpacityMask
一个格子条,点击缩短 import QtQuick 2.0 import QtQuick.Window 2.12 import QtQuick.Controls 2.5 //导入 import QtGraphicalEffects 1.12Window {id:windowwidth: 600height: 500color: "white"visible: trueGrid {visible: falseid:gridwidth:405he…...

MySQL的并发控制、事务、日志
目录 一.并发控制 1.锁机制 2.加锁与释放锁 二.事务(transactions) 1.事物的概念 2.ACID特性 3.事务隔离级别 三.日志 1.事务日志 2.错误日志 3.通用日志 4.慢查询日志 5.二进制日志 备份 一.并发控制 在 MySQL 中,并发控制是确…...

CNN文献综述
卷积神经网络(Convolutional Neural Networks,简称CNN)是深度学习领域中的一种重要模型,主要用于图像识别和计算机视觉任务。其设计灵感来自于生物学中视觉皮层的工作原理,能够高效地处理图像和语音等数据。 基本原理…...

python语句前面有一个$是什么意思
“$”是汇编语言中的一个预定义符号,等价于当前正汇编到的段的当前偏移值。例如:指令“jmp $3”中的“$”表示当前这条指令在代码段中的偏移量。 代表当前指令的地址,如: data segment str1 db a,b,c,d leng equ $-str 就是当前地…...

wsl安装Linux系统到指定位置
默认情况下,wsl安装的系统,会安装到系统C盘,长期下去,很容易把C盘的空间消耗完,从而影响系统的正常运行,所以我建议是将wsl所有的系统都安装到其它磁盘中,便于维护。 1、导出镜像 通过wsl -l -v 查看当前已安装的系统版本。 导出到当前目录位置,也可以指定目录位置。 w…...
[笔记] 高等数学在各工程门类的典型应用场景
1.应用场景 1.微积分似乎是在解算椭圆方程中引入的?但是这个数学工具第一次应用于现实的工程问题是什么时候?什么场景?什么问题? 微积分的发展确实与椭圆方程有关,但它最初的应用场景远不止于此。 微积分首次被应用…...
刀片服务器和机架式服务器有何区别
刀片服务器和机架式服务器有何区别 一、物理设计: 刀片服务器:刀片服务器是一种相对较轻薄的服务器设计,其物理形状类似于刀片,通常插入到专用的刀片机箱中。每个刀片通常包含一个或多个服务器节点,共享一些基本的资源…...

SQLyog脚本无限试用重置脚本
文章目录 引言脚本(win)必要操作、说明 引言 SQLyog 需要po jie,但是网上的没看到很好使的,直接下的官方。能处理14天试用也是很ok的。 脚本(win) echo offREM SQLyog注册表key,可能跟你的不一样,如果不一样,请替换…...
代码随想录训练营第二十九天 134加油站 135分发糖果 860柠檬水找零 406根据身高重建队列
第一题: 原题链接:134. 加油站 - 力扣(LeetCode) 思路: 需要三个变量,一个变量start记录结果也就是出发的第一个加油站,一个变量curSum来记录此时加油耗油后剩余的油量,如果发现c…...
智能生产管理系统设计
智能生产管理系统的设计旨在提升制造业的效率、灵活性和响应速度,通过集成先进的信息技术(如物联网IoT、大数据分析、人工智能AI、云计算等)实现生产过程的智能化。以下是一些关键设计要素和步骤,用于构建一个高效的智能生产管理系…...

满足GMSL静电防护要求的方案
什么是GMSL?它是做什么用的?它有什么优点?设计GMSL防静电有啥难度? 带着这些疑问我们先了解下什么是GMSL。 一.简述 GMSL GMSL(Gigabit Multimedia Serial Link)即千兆多媒体串行链路…...

【Odoo开源ERP】别把ERP与进销存软件混为一谈
导读:企业使用ERP软件能够实现管理升级,多方信息集成,按照既定策略逻辑运算,生成计划建议,减少人力成本,提高准确率的同时提高经营能力。 ERP,是MRP II的下一代软件,除了MRP II已有的…...
八、浏览器同源策略
上一篇👉: 浏览器垃圾回收机制 文章目录 浏览器同源策略1.同源策略的定义2.同源策略的作用3.同源策略的限制范围4.解决跨域方案汇总1.CORS(跨源资源共享)2.JSONP3.postMessage 跨域4.Nginx代理跨域5.Node.js中间件代理跨域6.document.domain…...

重载赋值运算符
c编译器可能会给类添加四个函数 1默认构造函数 2默认析构函数 3默认拷贝构造函数,对成员变量进行浅拷贝。 4默认赋值函数,队成员变量进行浅拷贝。 #include<iostream> using namespace std; class CGirl { public:int m_bh;string m_name;voi…...

数字信号处理及MATLAB仿真(2)——离散系统
上回书说到如何来编写一些简单的离散时间序列,今天咱们就来谈谈一些关于常系数差分方程的操作吧。 说到这里咱们对于常系数差分方程可能最关心的就是怎么去求解了。 其中最关键的部分就是filter函数,可以用来计算系统在输入信号为x的输出信号y。大家学过…...
大模型思维链(Chain-of-Thought)技术原理
大模型思维链(Chain-of-Thought)技术原理 NLP中 大语言模型LLM中的思维链 Chain-of-Thought(CoT) GoT_cot思维链-CSDN博客 https://zhuanlan.zhihu.com/p/680618940 https://zhuanlan.zhihu.com/p/661475269...

gda动态调试-cnblog
忽的发现gda有动态调试功能 动态监听返回值 框柱指定方法,选择调试方法,gda会自动监听函数的返回值,例如 自定义frida脚本 gda会自动生成hook该函数的frida脚本...

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

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...