ARCGIS PRO SDK Annotation 概念及操作
使用Annotation的API功能。Annotation 的API功能位于ArcGIS.Core.dll中。Annotation API通常与地理数据库、地图创作和编辑结合使用。ArcGIS.Core.dll
ArcGIS.Core.Data.map API中的几乎所有方法都应该在MCT上调用。
一、Annotation featureclass
1、从GeodatabaseGeodatabase数据库获取
1)、通过要素类名称
using (AnnotationFeatureClass annoFeatureClass =geodatabase.OpenDataset<AnnotationFeatureClass>("AnnotationFeatureClassName"))
{
}
2)通过注记要素类的ID
using (AnnotationFeatureClass annoFeatureClass = geodatabase.OpenDataset<AnnotationFeatureClass>("1"))
{
}
2、从地图加载图层获取
1)、通过AnnotationLayer获取
ArcGIS.Desktop.Mapping.Layer selectedLayer = MapView.Active.GetSelectedLayers().FirstOrDefault();
if (selectedLayer is ArcGIS.Desktop.Mapping.AnnotationLayer)
{using (Table table = (selectedLayer as AnnotationLayer).GetTable()){if (table is AnnotationFeatureClass){AnnotationFeatureClass annoFeatureClass = table as AnnotationFeatureClass;}}
}
2)、通过AnnotationFeature获取
ArcGIS.Desktop.Editing.Events.RowChangedEvent.Subscribe(args =>
{Row row = args.Row;if (row is AnnotationFeature){using (AnnotationFeatureClass annoFeatureClass = row.GetTable() as AnnotationFeatureClass){}}
}
二、以表形式打开
AnnotationFeatureClass
using (Table table = geodatabase.OpenDataset<Table>("FeatureClassName"))
{
}
三、将AnnotationFeatureClass作为要素类打开
using (FeatureClass featureClass = geodatabase.OpenDataset<FeatureClass>("FeatureClassName"))
{
}
四、注记要素类定义
1、从地理数据库中打开注释要素类定义。Definition对象包含有关DataSet的元数据信息,通常在预期不会打开DataSet时使用。
AnnotationFeatureClassDefinition definition = geodatabase.GetDefinition<AnnotationFeatureClassDefinition>("AnnotationFeatureClassName");
2、从数据集中打开AnnotationFeatureClassDefinition。当数据集已打开并且引用可访问时使用此选项。
ArcGIS.Desktop.Mapping.Layer selectedLayer = MapView.Active.GetSelectedLayers().FirstOrDefault();
if (selectedLayer is ArcGIS.Desktop.Mapping.AnnotationLayer)
{using (AnnotationFeatureClass annoFC = (selectedLayer as AnnotationLayer).GetTable() as AnnotationFeatureClass){AnnotationFeatureClassDefinition definition = annoFC.GetDefinition();}
}
五、遍历Annotation feature
使用注记要素类时,通过查询返回的要素属于AnnotationFeature类型。AnnotationFeature使用特定于注释的功能扩展了Feature的功能。首先,它提供了对注释功能中的CIMTextGraphic的访问。CIMTextGraphic是使用注释时修改的主要对象。此外,AnnotationFeature还为AnnotationClassID、LinkedFeatureID和注记状态提供了方便的set和get方法。在使用Feature对象时,通过AnnotationFeature更新这些属性比通过查找其字段索引更简单。如果注记要素类是使用基于GlobalID的关系类建立的,则LinkedFeatureID将为System.GUID类型,否则它将是一个长型。
与常规功能不同,AnnotationFeature的形状不会通过GetShape和SetShape进行常规更新。相反,当更新批注的CIMTextGraphic时,AnnotationFeature管理形状。该形状被设置为CIMTextGraphic的边界多边形。
在处理注释时需要记住的另一个概念是模式。默认情况下,使用一系列字段创建注记要素类,这些字段包含有关要素及其符号化的描述性信息。虽然这些字段是为新要素类创建的,但并非所有字段都是必需的。在ArcGIS Pro中,确保注记方案中存在的唯一字段是AnnotationClassID、SymbolID、Element、FeatureID或FeatureGlobalID(如果使用GlobalID关系)、ZOrder和Status以及系统OBJECTID和Shape字段。存储文本格式属性的所有其他字段(如文本字符串、字体名称、垂直对齐、水平对齐等)都是可选的。不能保证它们(在物理架构中)存在。此外,ArcGIS Pro注记模型不再具有粗体和斜体字段。它们已被替换为FontStyle字段。当批注描述字段存在时,它们与AnnotationFeature的CIMTextGraphic的内容保持同步。更新CIMTextGraphic将更新与该属性对应的行中的一个字段。同样,更新字段值也会更新CIMTextGraphic。如果在一个操作中同时更新字段和CIMTextGraphic,并且它们发生冲突,则CIMTextGraphic将优先。如果您正在编写创建或修改注释特征的工具,则必须考虑这些更改和重要概念。
在AnnotationFeatureClass上打开光标并更新AnnotationFeature的CIMTextGraphic如下所示。请注意,此示例更改文本符号高度和正在引用的符号集合中的符号。
QueryFilter qf = new QueryFilter();
qf.WhereClause = "OBJECTID < 100";
//Note: this is a non-recycling cursor off the Table, ~not~ the layer
using (RowCursor rowCursor = featureClass.Search(qf, false))
{geodatabase.ApplyEdits(() =>{while (rowCursor.MoveNext()){using (AnnotationFeature annoFeat = rowCursor.Current as AnnotationFeature){CIMTextGraphic textGraphic = annoFeat.GetGraphic() as CIMTextGraphic;CIMSymbolReference symbolRef = textGraphic.Symbol;symbolRef.SymbolName = "1"; //change the symbol being referred to by the CIMTextGraphicCIMTextSymbol textSymbol = symbolRef.Symbol as CIMTextSymbol;textSymbol.Height = 6; //change the height of the text.annoFeat.SetGraphic(textGraphic);annoFeat.Store();}}});
}
六、创建Annotation feature
下面演示了如何使用RowBuffer并在AnnotationFeatureClass中创建新的AnnotationFeature。将创建CIMTextGraphic,并指定Position、Text字符串和CIMTextSymbol属性。符号集合中的文本符号由ID引用。符号集合的符号ID是一个整数,但SymbolName属性是一个字符串,因此必须将其设置为字符串。AnnotationFeature将通过对Store()调用的覆盖来优化功能的存储。
static void InsertAnno(string textString, MapPoint mapPoint, int symbolID, AnnotationFeatureClass featureClass)
{var annoFCDef = featureClass.GetDefinition();var symCol = annoFCDef.GetSymbolCollection();//从符号集合中获取文本符号var symbolIdentifier = (from s in symCol where s.ID == symbolID select s).FirstOrDefault();var txtSymbol = symbolIdentifier.Symbol;//创建行缓冲区using (RowBuffer rowBuffer = featureClass.CreateRowBuffer()){Feature feature = featureClass.CreateRow(rowBuffer) as Feature;AnnotationFeature annoFeat = feature as AnnotationFeature;annoFeat.SetStatus(AnnotationStatus.Placed);annoFeat.SetAnnotationClassID(0);//设置文本和图形CIMTextGraphic cimTextGraphic = new CIMTextGraphic();cimTextGraphic.Text = textString;cimTextGraphic.Shape = mapPoint;//使用符号ID和文本符号设置符号引用var symbolRef = new CIMSymbolReference();symbolRef.SymbolName = symbolID.ToString();symbolRef.Symbol = txtSymbol;//在图形上设置符号引用,将其推回到特征中,然后存储。cimTextGraphic.Symbol = symbolRef;annoFeat.SetGraphic(cimTextGraphic);feature.Store();}
}
相关文章:
ARCGIS PRO SDK Annotation 概念及操作
使用Annotation的API功能。Annotation 的API功能位于ArcGIS.Core.dll中。Annotation API通常与地理数据库、地图创作和编辑结合使用。ArcGIS.Core.dll ArcGIS.Core.Data.map API中的几乎所有方法都应该在MCT上调用。 一、Annotation featureclass 1、从GeodatabaseGeodatabase数…...
dp专题13 零钱兑换II
本题链接:. - 力扣(LeetCode) 题目: 思路: 根据题意,这是一道很裸的背包问题,其中这里是返回 背包方案数 的。 我们可以直接推出公式 : dp [ j ] dp[ j - coins[ i ] ] 在我之前…...
el-dialog嵌套使用,只显示遮罩层的问题
直接上解决方法 <!-- 错误写法 --><el-dialog><el-dialog></el-dialog></el-dialog><!-- 正确写法 --><el-dialog></el-dialog><el-dialog></el-dialog>我是不建议嵌套使用的,平级也能调用,…...
响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例3-5 CSS3 动画
代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>CSS3 动画</title> <style> .img {width: 150px; } keyframes rotate { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg);} } img…...
一款实用的.NET Core加密解密工具类库
前言 在我们日常开发工作中,为了数据安全问题对数据加密、解密是必不可少的。加密方式有很多种如常见的AES,RSA,MD5,SAH1,SAH256,DES等,这时候假如我们有一个封装的对应加密解密工具类可以直接…...
C/C++内存布局
1. C 结构体的内存布局 以一个例子来看struct的内存结构 #define NP_FUNC_WRAPPER __attribute__((optimize(0)))struct StructBody {int first_int_placeholder;int second_int_placeholder;double third_double_placeholder; };class ClassBody {public:int first_int_place…...
springboot(ssm母婴全程服务管理系统 母婴用品服务商城Java系统
springboot(ssm母婴全程服务管理系统 母婴用品服务商城Java系统 开发语言:Java 框架:ssm/springboot vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.7(或8.0…...
修改SSH默认端口,使SSH连接更安全
以CentOS7.9为例: 1、修改配置文件 vi /etc/ssh/sshd_config 2、远程电脑可连接,暂时将SELinux关闭 # 查询状态 getenforce # 关闭 setenforce 0 # 开启 setenforce 1 3、SELinux设置(如果启用),semanage管理工具安…...
React16源码: React中调度之requestWork的源码实现
requestWork 1 )概述 在 scheduleWork 中,找到了创建更新的fiber对应的root节点然后对它进行了一些操作之后,调用了 requestWork,开始请求工作在 requestWork 里面它会做哪些东西呢? 首先我们要把这个root节点加入到调…...
【白话机器学习的数学】读书笔记(3)学习分类(感知机、逻辑回归)
三、学习分类 1.分类的目的 找到一条线把白点和黑点分开。这条直线是使权重向量成为法线向量的直线。(解释见下图) 直线的表达式为: ω ⋅ x ∑ i 1 n ω i ⋅ x i 0 \omegax \sum_{i1}^n\omega_i x_i 0 ω⋅xi1∑nωi⋅xi0 ω \omega ω是权重向量权…...
书生·浦语大模型实战营-学习笔记3
目录 (3)基于 InternLM 和 LangChain 搭建你的知识库1. 大模型开发范式(RAG、Fine-tune)RAG微调 (传统自然语言处理的方法) 2. LangChain简介(RAG开发框架)3. 构建向量数据库4. 搭建知识库助手5. Web Demo部…...
MySQL下对[库]的操作
目录 创建数据库 创建一个数据库案例: 字符集和校验规则: 默认字符集: 默认校验规则: 查看数据库支持的字符集: 查看数据库支持的字符集校验规则: 校验规则对数据库的影响: 操作数据…...
Django(七)
1.靓号管理 1.1 表结构 根据表结构的需求,在models.py中创建类(由类生成数据库中的表)。 class PrettyNum(models.Model):""" 靓号表 """mobile models.CharField(verbose_name"手机号", max_len…...
AT24C02读写操作 一
//AT24C02初始化 void AT24C02_Init(void) { IIC_Init(); } //AT24C02的字节写入 写一个字节 void AT24C02_WordWrite(uint8_Address,uint8_t Data) { //1。主机发送开始信号 IIC_StartSignal(); //2.主机发送器件地址 写操作 IIC_SentBytes(0xA0); //3.主机等侍从机应…...
.NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
在这篇文章中,我们将了解 .NET 8 中为托管服务引入的一些新生命周期事件。请注意,这篇文章与 .NET 8 相关,在撰写本文时,.NET 8 目前处于预览状态。在 11 月 .NET 8 最终版本发布之前,类型和实现可能会发生变化。要继续…...
Redis--Geo指令的语法和使用场景举例(附近的人功能)
文章目录 前言Geo介绍Geo指令使用使用场景:附近的人参考文献 前言 Redis除了常见的五种数据类型之外,其实还有一些少见的数据结构,如Geo,HyperLogLog等。虽然它们少见,但是作用却不容小觑。本文将介绍Geo指令的语法和…...
127.0.0.1和0.0.0.0的区别
在网络开发中,经常会涉及到两个特殊的IP地址:127.0.0.1和0.0.0.0。这两者之间有一些关键的区别,本文将深入介绍它们的作用和用途。 127.0.0.1 127.0.0.1 是本地回环地址,通常称为 “localhost”。作用是让网络应用程序能够与本地…...
SpringBoot ES 聚合后多字段加减乘除
SpringBoot ES 聚合后多字段加减乘除 在SpringData Elasticsearch中,聚合统计的原理主要依赖于Elasticsearch本身的聚合框架。Elasticsearch提供了强大的聚合功能,使得你可以对文档进行各种计算和统计,从而得到有关数据集的有用信息。 Elast…...
React16源码: React中requestCurrentTime和expirationTime的源码实现补充
requestCurrentTime 1 )概述 关于 currentTime,在计算 expirationTime 和其他的一些地方都会用到 从它的名义上来讲,应等于performance.now() 或者 Date.now() 就是指定的当前时间在react整体设计当中,它是有一些特定的用处和一些…...
【论文阅读】Deep Graph Contrastive Representation Learning
目录 0、基本信息1、研究动机2、创新点3、方法论3.1、整体框架及算法流程3.2、Corruption函数的具体实现3.2.1、删除边(RE)3.2.2、特征掩盖(MF) 3.3、[编码器](https://blog.csdn.net/qq_44426403/article/details/135443921)的设…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
