ArcGIS字段计算器(一):如何快速的提取多个坐落单位名称(ZLDWMC)中的乡镇名称或村名

实践数据:XX县三调地类图斑DLTB数据

实践目的:快速提取出一个县甚至更大范围数据中的乡镇名称和村名

        本案例主要涉及字符串分割提取其中需要的字符串,面对这个案例,你可能会使用left()或者right()函数,left( [ZLDWMC] ,3)可以提取坐落单位名称的左边3个字,right( [ZLDWMC] ,3)可以提取坐落单位名称的右边3个字,但是我们不能保证所有的乡镇名称和村名都是3个字的,此处我总结出一个更全面一些的方法,利用“镇”或“乡”字进行字符串元素索引和切片来提取所需的信息。

分析数据,其中存在两种特殊情况

情况1:坐落单位名称不存在“乡”或“镇”,此处将返回坐落单位名称全称;

情况2:坐落单位名称存在多个“乡”或“镇”,此处将返回空,该情况存在极少数最终可手动赋值

1. 右击字段村名,使用字段计算器计算村名,解析程序选择Python,勾选显示代码块,编写逻辑代码:

#定义一个函数
def getValue(a):
    d={u"镇":0,u"乡":0} #给字符串计“镇”和“乡”的数量,初始为0个
    for ch in a: #遍历字符串的每一个字
        if ch in d:#如果其中有字是“镇”或“乡”则计数加一
            d[ch]+=1
    num=d[u"镇"]+d[u"乡"] #计算该字符串中镇和乡的总数量
    
    if num>1:  #如果镇和乡的总数量大于1,那么该为情况特殊情况2,返回空
        return ""
    else:  #否则
        if u"镇" in a:   #如果存在一个“镇”字 
            b=a.index(u"镇")  #获取“镇”字在字符串里的索引号
            return a[b+1:]  #切片,返回字符串a里“镇”字后面的所有字,即:村名
        elif u"乡" in a:   #如果存在一个“乡”字
            b=a.index(u"乡")  #获取“乡”字在字符串里的索引号
            return a[b+1:]  #切片,返回字符串a里“镇”字后面的所有字,即:村名
        else:  #否则字符串不存在“镇”或“乡”字,那么该为情况特殊情况1,返回字符串a的全称
             return a

2.代码编写完成将以下字段计算器表达式保存,可方便后续加载无限使用。字段计算器点击确定,完成村名的提取。

3. 提取乡镇名称同理

解析程序选择Python,勾选显示代码块,编写逻辑代码:

#定义一个函数
def getValue(a):
    d={u"镇":0,u"乡":0} #给字符串计“镇”和“乡”的数量,初始为0个
    for ch in a: #遍历字符串的每一个字
        if ch in d:#如果其中有字是“镇”或“乡”则计数加一
            d[ch]+=1
    num=d[u"镇"]+d[u"乡"] #计算该字符串中镇和乡的总数量
    
    if num>1:  #如果镇和乡的总数量大于1,那么该为情况特殊情况2,返回空
        return ""
    else:  #否则
        if u"镇" in a:   #如果存在一个“镇”字 
            b=a.index(u"镇")  #获取“镇”字在字符串里的索引号
            return a[:b+1]  #切片,返回字符串a里“镇”字前面的所有字,即:乡镇名称
        elif u"乡" in a:   #如果存在一个“乡”字
            b=a.index(u"乡")  #获取“乡”字在字符串里的索引号
            return a[:b+1]  #切片,返回字符串a里“镇”字前面的所有字,即:乡镇名称
        else:  #否则字符串不存在“镇”或“乡”字,那么该为情况特殊情况1,返回字符串a的全称
             return a

结果如下图所示: 

也许编写代码对于新手或生手会让人觉得复杂繁琐, 那么你可以下载我已保存好的字段计算器表达式,直接加载使用

 注:以上内容如若有误欢迎评论指正,谢谢!

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PpjBiubiubiu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值