• 【ArcGIS Pro二次开发】(64):多分式标注


    ArcGIS中有时会遇到需要二分式标注的情况,有时甚至是三分式、四分式。

    通过输入标注表达式,可以做出如下的效果,但是代码不短,每次都要输一遍也挺麻烦。

    网上也有一些分式标注的python工具,但不够直观,于是做了这个一键式的工具。


    一、要实现的功能

    如上图所示,在待处理的要素上右键单击,在弹出的右键列表中,点击【CC工具箱——多分式标注】按钮即可。

    有2种模式:

    1、简单的四分式,当然这里也包含了二分式、三分式,对应的地方不去选择字段即可。

    2、可添加前后缀的模式,考虑到有些场景需要添加固定标签或单位的情况。

    生成结果如下:


    二、实现流程

    工具流程其实就是把在ArcGIS Pro中进行标注的动作在SDK里再现一下。

    首先获取所选的要素类:

    1. // 获取工程默认文件夹位置
    2. var def_path = Project.Current.HomeFolderPath;
    3. // 获取当前地图
    4. var map = MapView.Active.Map;
    5. // 获取图层
    6. FeatureLayer featureLayer = MapView.Active.GetSelectedLayers().FirstOrDefault() as FeatureLayer;

    进一步获取要素类的标注:

    1. // 获取图层定义
    2. var lyrDefn = featureLayer.GetDefinition() as CIMFeatureLayer;
    3. // 获取标注
    4. var listLabelClasses = lyrDefn.LabelClasses.ToList();
    5. var theLabelClass = listLabelClasses.FirstOrDefault();

    最核心的一步,将标注的语言设置为python,然后输入表达式。

    这个表达式比较长,并且需要引入参数,所以写起来比较繁琐,而且难看。。

    1. // 设置标注语言为python
    2. theLabelClass.ExpressionEngine = LabelExpressionEngine.Python;
    3. // 设置标注内容
    4. string code = $"def FindLabel ([{up}],[{down}],[{left}],[{right}]):\r\n a=len({uf}+[{up}]+{ub})\r\n b=len({df}+[{down}]+{db})\r\n c=len({lf}+[{left}]+{lb})\r\n d=len({rf}+[{right}]+{rb})\r\n if a>b:\r\n s=a\r\n else:\r\n s=b\r\n p=\"\" +\"\" + {lf}+[{left}]+{lb} + \"\"+ {uf}+[{up}]+{ub}+\"\" + {rf}+[{right}]+{rb} + \"\"+ \"\"+'\\n'+\"\"+{lf}+[{left}]+{lb}+\"\" + '—'*s + \"\"+{rf}+[{right}]+{rb}+\"\"+'\\n'+\"\"+ \"\" +\"\" + {lf}+[{left}]+{lb} + \"\"+ {df}+[{down}]+{db}+\"\" + {rf}+[{right}]+{rb} + \"\"+ \"\"+\"\"\r\n return p";
    5. theLabelClass.Expression = code;

    最后应用设置,并打开标注显示。

    1. // 应用标注设置
    2. lyrDefn.LabelClasses[0] = theLabelClass; // 假设只有一个标注类别
    3. // 应用标注
    4. featureLayer.SetDefinition(lyrDefn);
    5. // 打开标注
    6. if (!featureLayer.IsLabelVisible) { featureLayer.SetLabelVisibility(true); }

    以上便完成工具的主要功能。


    三、工具文件分享

    我把工具都集合成工具箱,不再单独放单个工具,可以到这里下载完整工具箱,会不断更新:

    【ArcGIS Pro二次开发】:CC工具箱icon-default.png?t=N7T8https://blog.csdn.net/xcc34452366/article/details/131506345PS:可以直接点击...bin\Debug\net6.0-windows\下的.esriAddinX文件直接安装。

  • 相关阅读:
    Dapr 远程调试之 Nocalhost
    C++ 之 移动构造函数
    CCF编程能力等级认证(GESP)
    chatgpt赋能python:Python如何快速取出所有元素?
    NLTK进行文本清洗并进行词性标注
    零基础入门金融风控之贷款违约预测挑战赛——简单实现
    STM32 内部ADC方式_解释(AN2834)
    JTS:06 九交模型讲解
    学生HTML个人网页作业作品 基于HTML+CSS+JavaScript明星个人主页(15页)
    MySQL数据库之主从复制
  • 原文地址:https://blog.csdn.net/xcc34452366/article/details/132608110