在实际工作中,需要将Mapgis图件转换为Arcgis,其中注释通常转换为点的Shp文件,并将注释内容当作属性赋予点。Mapgis与Arcgis上下标标注格式有着较大差别,结合实际工作编写了一个Python函数,利用Arcgis字段计算器将Mapgis上下标标注转换为Arcgis标注格式。
上下标标注格式的区别
-
Mapgis的上下标:
- 上标:在需要上标的字符前添加"#-"
- 下标:在需要上标的字符前添加"#-"
- 恢复正常格式:在字符前添加"#="
例如:"J3γH2"表示为"J#-3#=γ#-H#+2"
-
Arcgis的上下标:
- 上标:在需要上标的字符两侧添加"<sub>...</sub>"
- 下标:在需要上标的字符两侧添加"<sup>...</sup>"
例如:"J3γH2"表示为"J<sub>3</sub>γ<sub>H</sub><sup>2</sup>"
转换思路
以J#-3#=γ#-H#+2 (J3γH2)为例:
-
将字符串按#号切片,并把每个片段存入列表中;
-
由于字符串不能直接修改,还需要将切片的每一个字符串转换成单字符列表;
-
判断列表中第一个元素:
- 如果第一个字符为"-",则将其替换为"<sub>",并在其末尾添加"</sub>";
- 如果第一个字符为"+",则将其替换为"<sup>",并在其末尾添加"</sup>";
- 如果第一个字符为"=",则将其设为空。
-
组合单字符列表,再组合切片列表,得到转换结果。
代码实现
def dh_trans(dh):
result_list = []
for i in dh.split(\'#\'): #按#号切片
#将字符串转换为单字符列表
ilst = []
for j in i:
ilst.append(j)
#判断首个字符
if ilst[0] == \'-\':
ilst[0] = \'<sub>\'
ilst.append(\'</sub>\')
elif ilst[0] == \'+\':
ilst[0] = \'<sup>\'
ilst.append(\'</sup>\')
elif ilst[0] == \'=\':
ilst[0] = \'\'
#组合单字符列表
result_list.append(\'\'.join(ilst))
#组合切片列表
result = \'\'.join(result_list)
return result
Arcgis中实操
软件版本:Arcgis 10.8
原数据与图面标注
属性表编辑
- 新建用于Arcgis标注的文本型字段("DZDH_Arc");
- 对新建字段打开 字段计算器;
- 字段计算器中,解析程序选择 Python,勾选 显示代码块;
- 在 预逻辑脚本代码 中输入以上Python代码,在下方输入框中填写
dh_trans(!DZDH_Map!),DZDH_Map 为原Mapgis标注字段; - 点击确定并等待计算完成。
转换结果与新字段图面标注
本文章代码为本人编写,欢迎大家留言交流!