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()调用的覆盖来优化功能的存储。​

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();
  }
}

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ArcGIS Pro SDK是用于创建ArcGIS Pro加载项的开发工具包。您可以使用ArcGIS Pro SDK来扩展ArcGIS Pro的功能,添加自定义工具、面板、任务和其他功能。\[1\] 要安装ArcGIS Pro SDK 3.0,您需要使用Visual Studio 2022,并从Visual Studio Marketplace搜索并安装以下三个扩展:ArcGIS Pro SDK for .NET,ArcGIS Pro SDK for .NET(Utilities),ArcGIS Pro SDK for .NET(Migration)\[1\]。请注意,ArcGIS Pro SDK for .NET扩展只能集成到Visual Studio 2022中,建议使用版本17.2或更高版本\[2\]。 ArcGIS Pro SDK for .NET提供了三个不同的扩展名(.vsix文件):ArcGIS Pro SDK for .NET用于创建ArcGIS Pro加载项的工程和项模板的集合,ArcGIS Pro SDK for .NET(Utilities)用于帮助创建ArcGIS Pro加载项的实用程序的集合,ArcGIS Pro SDK for .NET(Migration)用于将ArcGIS Pro SDK 2.x扩展模块迁移到ArcGIS Pro SDK 3.0 for .NET\[3\]。 总结来说,ArcGIS Pro SDK是用于创建ArcGIS Pro加载项的开发工具包,您可以使用它来扩展ArcGIS Pro的功能。要安装ArcGIS Pro SDK 3.0,您需要使用Visual Studio 2022,并从Visual Studio Marketplace安装相应的扩展。 #### 引用[.reference_title] - *1* *2* *3* [VS2022中ArcGIS Pro SDK for .NET安装和卸载指南](https://blog.csdn.net/u012685544/article/details/126317090)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值