ArcGISPro关联表标注属性方法,主表要素类提取独立表字段标注

📅 2026/8/26 14:13:06
ArcGISPro关联表标注属性方法,主表要素类提取独立表字段标注
# # 函数定义ArcGIS Pro Python 标注表达式入口 # 参数带 [] 是 ArcGIS 特殊语法表示从当前要素图层传入对应字段的值 # 参数说明 # [ZDDM] - 宗地代码用于查询关联表并取后7位作为分子显示 # [YT] - 用途目前未使用但保留作为占位 # [QXDM] - 区县代码目前未使用但保留作为占位 # def FindLabel([ZDDM], [YT], [QXDM]): # 导入 arcpy 模块提供数据访问功能 import arcpy # # 第一部分查询关联表获取当前宗地对应的所有权利人名称 # # key1当前要素的宗地代码值用于匹配关联表中的 ZDDM 字段 # 注意[ZDDM] 是 ArcGIS 传入的字段值必须带 [] 才能正确取值 key1 [ZDDM] # key2关联表中用于匹配的关键字段名字符串不加 [] # 这是数据库中存储的字段名称需要用引号括起来 key2 ZDDM # L2关联表中要提取标注内容的字段名即权利人名称字段 L2 QLRMC # myDataTable关联表的完整路径指向你的地理数据库中的表 # r 表示原始字符串防止反斜杠被转义 myDataTable rE:\XXXXXXXXX.gdb\QDXX_QLR # 创建搜索游标从关联表中查询 [key2, L2] 两个字段 # cur 是一个可迭代对象每次迭代返回一行记录元组格式 cur arcpy.da.SearchCursor(myDataTable, [key2, L2]) # qlr_list用于收集所有匹配到的权利人名称 qlr_list [] # 遍历关联表中的每一行记录 for row in cur: # row[0] 是 key2 对应的值即关联表中的 ZDDM # row[1] 是 L2 对应的值即关联表中的 QLRMC # 比较当前要素的宗地代码和关联表中的宗地代码是否相等 # 使用 str() 转换为字符串比较避免数字/文本类型不一致的问题 if str(key1) str(row[0]): # 如果匹配将权利人名称添加到列表中 qlr_list.append(str(row[1])) # 将权利人列表拼接成一个字符串多个权利人之间用空格隔开 # 示例[张三, 李四] - 张三 李四 qlr_string .join(qlr_list) # 可选功能如果没有权利人显示无权利人 # 取消下面两行的注释即可启用 # if not qlr_string: # qlr_string 无权利人 # # 第二部分构造复杂标注堆叠标签 - Stacked Label # 使用 ArcGIS 的标注标签语法 PART 定义不同位置的内容 # 各部分位置top上、bottom下、left左、right右等 # # --- 分子top取宗地代码 [ZDDM] 的最后 7 位 --- # str([ZDDM]) 将宗地代码转为字符串 # [-7:] 是 Python 切片语法表示取字符串的最后 7 个字符 # 例如5325012026JC00001 - JC00001 top str([ZDDM])[-7:] # 左上角topleft和右上角topright留空 topleft topright # 左侧left留空 left # 右侧right留空 right # 分母bottom显示用途 [YT] # 原代码中 bottom 使用 [YT]这里保留原意 bottom [YT] # 左下角bottomleft和右下角bottomright留空 bottomleft bottomright # 浮动位置floating关联表中要提取标注内容的字段 floating qlr_string # --- 计算横线长度 --- # a分子top的字符长度 a len(top) # b分母bottom的字符长度 b len(bottom) # s取分子和分母中较长的长度 # 用于决定横线画多长确保横线能覆盖分子和分母 if a b: s a else: s b # --- 构造标注标签使用 ArcGIS 的格式化标签 --- # MMiddle中间的横线 # CHR spacing -20 表示字符间距压缩 20% # PART positionmiddle 表示横线放在中间位置 # - * int(s * 1.5) 生成 s*1.5 个连字符长度略大于最长的部分 M CHR spacing -20 PART positionmiddle - * int(s * 1.5) /PART /CHR # TpTop顶部分子 Tp PART positiontop top /PART # TopLTop Left左上角 TopL PART positiontopleft topleft /PART # TopRTop Right右上角 TopR PART positiontopright topright /PART # LtLeft左侧 Lt PART positionleft left /PART # RtRight右侧 Rt PART positionright right /PART # BmBottom底部分母 Bm PART positionbottom bottom /PART # BmLBottom Left左下角 BmL PART positionbottomleft bottomleft /PART # BmRBottom Right右下角 BmR PART positionbottomright bottomright /PART # FFloating浮动位置 # h_aligncenter 水平居中v_aligncenter 垂直居中 # x_offset0 y_offset30 偏移量相对中心偏移 30 个点 F PART positionfloating h_aligncenter v_aligncenter x_offset0 y_offset30 floating /PART # --- 将所有部分拼接起来作为最终的标注内容返回 --- # 注意各个 PART 的拼接顺序不影响显示位置位置由 position 属性决定 return M Tp TopL TopR Lt Rt Bm BmL BmR F