【办公自动化】如何建一个让效率飞升的GIS脚本工具箱?

刚发了【办公自动化】基于Arcpy建立GIS三调转换工具箱,23万图斑shp文件分分钟转换完成 ,来聊聊这个GIS工具箱是怎么制作的。

1、准备python文件

首先得有一个写好的python代码文件,俗称脚本文件。
ArcGIS自10.0以来抛弃了VBA,配上了高端大气的python(是2.7没有3.x版本好用),用起来Python确实比VBA好用多了,强烈推荐AutoCAD和Office也更新一下!​

代码需要保存成一个py文件
看看代码:

#!/usr/bin/env python
# coding:utf-8
# 工具箱发布公众号:规划酱
# 有使用问题请至公众号反应

import arcpy

ly_name = arcpy.GetParameterAsText(0)   #arcpy函数,获取GIS工具的参数,获取图层
bz_name = arcpy.GetParameterAsText(1)   #arcpy函数,获取GIS工具的参数,获取用地标准的名称

arcpy.AddMessage(u'> 添加字段 ..')      # arcpy函数,发送一个信息,提示进度
arcpy.AddField_management(ly_name,'layer',"TEXT")    #arcpy函数,在shp文件的属性表里增加三个字段
arcpy.AddField_management(ly_name,'ydbm',"TEXT")
arcpy.AddField_management(ly_name,'ydmc',"TEXT")

#这里选择标准,用地标准采用字典形式,结构是{‘三调编码’:[‘用地编码’,‘用地名称’]},
#字典是通过代码在GIS中读取Excel对照表生成的,汉字在GIS里显示为Unicode代码
if bz_name == u'国家标准':  
    dzb_table = {u'0810A': [u'1103', u'\u5e7f\u573a\u7528\u5730'], ...} #字典有60个key太长了省略了

elif bz_name == u'江苏村庄标准':
    dzb_table = {u'0810A': [u'1303', u'\u5e7f\u573a\u7528\u5730'],...}       

elif bz_name ==  u'南京村庄标准':
    dzb_table = {u'0810A': [u'1203', u'\u5e7f\u573a\u7528\u5730'],...}


n = 0.0     #python 2.7 要浮点运算得有小数
getcount = arcpy.GetCount_management(ly_name)   #arcpy函数,获得属性表的统计数
count = int(getcount.getOutput(0))              #arcpy函数,把属性表的列长度输出

arcpy.AddMessage(u'> 转换'+ ly_name + u'数据 ..')  #提示转换开始
       
table1 = arcpy.UpdateCursor(ly_name)  #arcpy函数,获取并编辑属性表,函数会占用shp文件
for row in table1:                    #标准格式,遍历表
    sd = row.DLBM
    if 'K' in sd:                    #把带K的三调编码中的K去掉
        sd = sd[:-1]

    row.layer = dzb_table[sd][0]+dzb_table[sd][1]      #编码+名称
    row.ydbm = dzb_table[sd][0]                        #用地编码
    row.ydmc = dzb_table[sd][1]                        #用地名称
    table1.updateRow(row) 

    n += 1                      
    if n/int(count/100) % 10 == 0:        #把数量换算成百分比,每10%显示一次
        arcpy.AddMessage('> '+str(int(n/int(count/100)))+'% ..')
        
arcpy.AddMessage('== ' +str(count)+u'个用地转换完成 ==')  #提示完成

2、GIS中工具箱设置:

  • 在工具箱中,右击我的工具箱 > 新建 > Python工具箱 / 工具箱(貌似没有区别)

在这里插入图片描述

  • 给工具箱命名,然后右击工具箱 > 添加 > 脚本

在这里插入图片描述

  • 弹出添加脚本提示框,输入名称、标签,建议勾选相对路径,点下一步
    在这里插入图片描述

  • 选择脚本文件,就是准备好的Python文件(.py文件)
    在这里插入图片描述

  • 设置需要输入的要素,第一个是 选择图层,数据类型选 要素图层,第二个是选择标准,数据类型选字符串,然后在下方过滤器中选值列表,可以自行编制下拉菜单内容,默认可以设置默认值。
    在这里插入图片描述
    在这里插入图片描述

  • 双击打开就成了工具面板,第一个是选择图层,在GIS中选择要素图层,第二个是自己编的字符串,用来选择采用标准。这两个输入框与代码中开头的要素获取代码是对应的。
    在这里插入图片描述

  • 右击脚本工具> 项目描述 中进行项目描述编辑,显示在右侧帮助内容。
    在这里插入图片描述

3、工具箱发布

  • 右击脚本工具 >导入脚本,这样脚本就存入工具箱内部了,只能通过编辑菜单修改(文本编辑器)
  • 右击工具箱> 另存为… 选择工具箱版本,选择存储位置,至此工具箱就生成了!

4、GIS中代码生成对照表

上面代码中每个用地标准都采用了一个字典来进行储存,里面全是Unicode编码,看着很复杂,怎么来的呢?

  • 将对照表Excel放入GIS文件目录(GIS需保存一个.xls的老版本),将Excel的第一个table拖入图层中,我这里取名dzb,GIS自动加了个$,表中为了方便读取,把表头改成了英文xx_cord和xx_name。
    在这里插入图片描述

  • 打开GIS中的python窗口,工具箱后一个按钮。
    在这里插入图片描述

  • 输入以下代码:

import arcpy
nj_tb = {}    #建立三个用地标准的字典
gb_tb ={}
js_tb = {}
table = arcpy.SearchCursor('dzb$')   #读取这个excel表,表名字自己改
for row in table:
    nj_tb[row.sd_cord] = [row.nj_cord,row.nj_name]    #写入字典数据
    js_tb[row.sd_cord] = [row.js_cord,row.js_name]
    gb_tb[row.sd_cord] = [row.gb_cord,row.gb_name]
print('nanjin:', nj_tb)  #显示结果
print('jiangsu:', js_tb)
print('guobiao:', gb_tb)
  • 结果就出来了,确实很长,大括号{ }里的就是每个用地标准:

在这里插入图片描述

需要GIS工具箱的同学,
关注公众号回复“工具箱”,自动发送链接

相关链接:【GIS实操】如何建一个让效率飞升的GIS工具箱?

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

规划酱

谢谢鼓励!一起自动化!

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

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

打赏作者

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

抵扣说明:

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

余额充值