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

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

本题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 思路&#xff1a; 根据题意&#xff0c;这是一道很裸的背包问题&#xff0c;其中这里是返回 背包方案数 的。 我们可以直接推出公式 &#xff1a; dp [ j ] dp[ j - coins[ i ] ] 在我之前…...

el-dialog嵌套使用,只显示遮罩层的问题

直接上解决方法 <!-- 错误写法 --><el-dialog><el-dialog></el-dialog></el-dialog><!-- 正确写法 --><el-dialog></el-dialog><el-dialog></el-dialog>我是不建议嵌套使用的&#xff0c;平级也能调用&#xff0c…...

响应式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加密解密工具类库

前言 在我们日常开发工作中&#xff0c;为了数据安全问题对数据加密、解密是必不可少的。加密方式有很多种如常见的AES&#xff0c;RSA&#xff0c;MD5&#xff0c;SAH1&#xff0c;SAH256&#xff0c;DES等&#xff0c;这时候假如我们有一个封装的对应加密解密工具类可以直接…...

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系统 开发语言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&#xff08;或8.0&#xf…...

修改SSH默认端口,使SSH连接更安全

以CentOS7.9为例&#xff1a; 1、修改配置文件 vi /etc/ssh/sshd_config 2、远程电脑可连接&#xff0c;暂时将SELinux关闭 # 查询状态 getenforce # 关闭 setenforce 0 # 开启 setenforce 1 3、SELinux设置&#xff08;如果启用&#xff09;&#xff0c;semanage管理工具安…...

React16源码: React中调度之requestWork的源码实现

requestWork 1 &#xff09;概述 在 scheduleWork 中&#xff0c;找到了创建更新的fiber对应的root节点然后对它进行了一些操作之后&#xff0c;调用了 requestWork&#xff0c;开始请求工作在 requestWork 里面它会做哪些东西呢&#xff1f; 首先我们要把这个root节点加入到调…...

【白话机器学习的数学】读书笔记(3)学习分类(感知机、逻辑回归)

三、学习分类 1.分类的目的 找到一条线把白点和黑点分开。这条直线是使权重向量成为法线向量的直线。(解释见下图) 直线的表达式为&#xff1a; ω ⋅ x ∑ i 1 n ω i ⋅ x i 0 \omegax \sum_{i1}^n\omega_i x_i 0 ω⋅xi1∑n​ωi​⋅xi​0 ω \omega ω是权重向量权…...

书生·浦语大模型实战营-学习笔记3

目录 (3)基于 InternLM 和 LangChain 搭建你的知识库1. 大模型开发范式&#xff08;RAG、Fine-tune&#xff09;RAG微调 &#xff08;传统自然语言处理的方法&#xff09; 2. LangChain简介&#xff08;RAG开发框架&#xff09;3. 构建向量数据库4. 搭建知识库助手5. Web Demo部…...

MySQL下对[库]的操作

目录 创建数据库 创建一个数据库案例&#xff1a; 字符集和校验规则&#xff1a; 默认字符集&#xff1a; 默认校验规则&#xff1a; 查看数据库支持的字符集&#xff1a; 查看数据库支持的字符集校验规则&#xff1a; 校验规则对数据库的影响&#xff1a; 操作数据…...

Django(七)

1.靓号管理 1.1 表结构 根据表结构的需求&#xff0c;在models.py中创建类&#xff08;由类生成数据库中的表&#xff09;。 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 接口 实现定时任务

在这篇文章中&#xff0c;我们将了解 .NET 8 中为托管服务引入的一些新生命周期事件。请注意&#xff0c;这篇文章与 .NET 8 相关&#xff0c;在撰写本文时&#xff0c;.NET 8 目前处于预览状态。在 11 月 .NET 8 最终版本发布之前&#xff0c;类型和实现可能会发生变化。要继续…...

Redis--Geo指令的语法和使用场景举例(附近的人功能)

文章目录 前言Geo介绍Geo指令使用使用场景&#xff1a;附近的人参考文献 前言 Redis除了常见的五种数据类型之外&#xff0c;其实还有一些少见的数据结构&#xff0c;如Geo&#xff0c;HyperLogLog等。虽然它们少见&#xff0c;但是作用却不容小觑。本文将介绍Geo指令的语法和…...

127.0.0.1和0.0.0.0的区别

在网络开发中&#xff0c;经常会涉及到两个特殊的IP地址&#xff1a;127.0.0.1和0.0.0.0。这两者之间有一些关键的区别&#xff0c;本文将深入介绍它们的作用和用途。 127.0.0.1 127.0.0.1 是本地回环地址&#xff0c;通常称为 “localhost”。作用是让网络应用程序能够与本地…...

SpringBoot ES 聚合后多字段加减乘除

SpringBoot ES 聚合后多字段加减乘除 在SpringData Elasticsearch中&#xff0c;聚合统计的原理主要依赖于Elasticsearch本身的聚合框架。Elasticsearch提供了强大的聚合功能&#xff0c;使得你可以对文档进行各种计算和统计&#xff0c;从而得到有关数据集的有用信息。 Elast…...

React16源码: React中requestCurrentTime和expirationTime的源码实现补充

requestCurrentTime 1 &#xff09;概述 关于 currentTime&#xff0c;在计算 expirationTime 和其他的一些地方都会用到 从它的名义上来讲&#xff0c;应等于performance.now() 或者 Date.now() 就是指定的当前时间在react整体设计当中&#xff0c;它是有一些特定的用处和一些…...

【论文阅读】Deep Graph Contrastive Representation Learning

目录 0、基本信息1、研究动机2、创新点3、方法论3.1、整体框架及算法流程3.2、Corruption函数的具体实现3.2.1、删除边&#xff08;RE&#xff09;3.2.2、特征掩盖&#xff08;MF&#xff09; 3.3、[编码器](https://blog.csdn.net/qq_44426403/article/details/135443921)的设…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献&#xff1a; stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下&#xff0c;文章也主…...