ARCGIS PRO SDK Annotation 概念及操作

这篇具有很好参考价值的文章主要介绍了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 CIMTextGraphic
        CIMTextSymbol 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()调用的覆盖来优化功能的存储。​文章来源地址https://www.toymoban.com/news/detail-798067.html

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 概念及操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ArcGIS Pro字段操作代码汇总

    属性表是GIS数据的重要组成部分,有了属性表才可以进行分析和分类配色等操作,这里为大家介绍一下ArcGIS Pro中字段操作的相关代码,希望能对你有所帮助。 打开属性表,点击按属性选择,如下图所示。 点击按属性选择 在显示的按属性选择对话框内,根据要求进行选择,如

    2024年02月13日
    浏览(37)
  • 深度学习训练文件批量制作——arcgis pro软件(傻瓜式操作)

            想要批量制作深度学习训练文件(特别是遥感文件)在网上找了很久的代码或者方法,发现不怎么适用,或者是说太过复杂了(电脑环境、包的版本等一系列问题,博主的环境可以用,到我电脑上我就一堆版本问题,又不好去改代码),于是找了很久发现arcgis pro这个

    2024年02月06日
    浏览(39)
  • 【ArcGIS Pro二次开发】(50):布局(Layout)的基本操作

    ArcGIS Pro SDK中的布局(Layout)是用于创建和编辑打印布局的一组功能。 Layout是打印布局的容器,它可以包含多个元素,例如地图框、文本框、图例、比例尺等。 Layout中包含多种元素,比较重要的有:地图(MapFrameElement)、文本(TextElement)、图片(PictureElement)、图例(LegendElement)等。

    2024年02月16日
    浏览(48)
  • ArcGIS Pro基础:【划分】工具实现等比例、等面积、等宽度划分图形操作

    本次介绍【划分】工具的使用,如下所示,为该工具所处位置。使用该工具可以实现对某个图斑的等比例面积划分、相等面积划分和相等宽度划分。 【等比例面积】:其操作如下所示,其中: 1表示先选中待处理的图斑,2表示选择下拉选项,3表示找到划分工具,并点击,4表

    2024年02月13日
    浏览(50)
  • ArcGIS Enterprise + ArcGIS Pro 常用服务类型发布

    门户连接 首先Pro需要先连接portal 添加portal门户地址,注意只到WA一级地址,并登录: 登录完成后,右键,设置为活动门户: 关联数据文件夹: 拖拽数据到地图视图窗口加载数据: 右键图层发布web layer: 这里为发布简述,采用复制发布的形式,选择Map Image 形式: 然后点击

    2024年02月10日
    浏览(41)
  • ArcGIS和ArcGIS Pro快速加载ArcGIS历史影像World Imagery Wayback

    ArcGIS在线历史影像网站 World Imagery Wayback(网址:https://livingatlas.arcgis.com/wayback/)提供了数期历史影像在线浏览服务,之前不少自媒体作者在文中宣称其能代表Google Earth历史影像。 (1)同一级别下的版本覆盖面 以下述区域为例,自2014年2月20日至2022年5月18日期间,最高分辨率

    2024年04月12日
    浏览(44)
  • 如何将ArcGIS工程文件迁移到ArcGIS Pro内

    当你刚接触ArcGIS Pro的时候,尝试新建一个工程文件会发现工程文件的后缀已经改变,那么以前在ArcGIS内辛苦制作的工程文件是否就不能在ArcGIS Pro内使用了,答案是否定的,对此Esri也给出了解决方案,这里为大家介绍一下迁移的方法。 在菜单栏上选择插入,点击导入地图,如

    2024年01月23日
    浏览(52)
  • Arcgis Pro地理配准

    目录 一、目的 二、配准 1、找到配准工具 2、添加控制点 3、选择控制点 4、添加更多控制点 5、配准完成、保存 三、附录 1、查看控制点或删除控制点 2、效果不好怎么办 下面我们将两张地图进行配准,其中一张有地理位置,而另外一张没有地理位置。 1、找到配准工具 首先

    2024年04月12日
    浏览(36)
  • ArcGIS Pro用户界面

    目录 1 功能区 1.1 快速访问工具栏 1.2 自定义快速访问工具栏 1.3  自定义功能区选项  1.3.1 添加组和命令  1.3.2 添加新选项卡 2 视图 3  用户界面排列 ​编辑 4  窗格 4.1  内容窗格  4.2 目录窗格 4.3 目录视图(类似ArcCatalog) 4.4 浏览对话框(以添加数据为例)   组成 描述 ①

    2024年02月07日
    浏览(43)
  • ArcGIS Pro 如何新建布局

    你是否已经习惯了在ArcGIS中数据视图和布局视图之间来回切换,到了ArcGIS Pro中却找不到二者之间切换的按钮,即使新建布局后却发现地图怎么却是一片空白。 这一切的一切都是因为ArcGIS Pro的功能框架完全不同,这里为大家介绍一下在ArcGIS Pro怎么新建布局,希望能对你有所帮

    2024年01月18日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包