积跬步、至千里

测绘·建库·制图·数据分析

ArcGIS|照做就能做插件(二)做一个“前面加0”的工具-上

本文为本站站长张继文原创,首发在张继文个人网站(熠其华网),版权归张继文所有。

根据中华人民共和国版权法,任何未经许可传播及洗稿重制等行为将被起诉。

 

上一篇《ArcGIS|照做就能做插件(一)先从”把常用工具放到面板上”开始》 你应该已经会把工具箱(小红盒)里的工具做成一个按钮了。在那里你接触到了一段简单的代码,几乎不需要你改什么东西。这次我们略微复杂一点,做一个”批量前面加0″的工具。

放心,依然是手把手教你。

关注我的公众号的各位也许看到了预告,里面提到了一个函数:

CalculateField_management

有心的人可能会去搜索一下这个函数。况且,光看函数名就该知道这是什么,calculate=计算,Field=字段(在arcgis python里我们把它视为字段的意思,大家都这么认为。)——加在一起,就是字段计算器。

常用的字段计算方式是打开属性表,在要计算的字段上面右键——字段计算:

《ArcGIS|照做就能做插件(二)做一个“前面加0”的工具-上》

或者是这样的:

《ArcGIS|照做就能做插件(二)做一个“前面加0”的工具-上》

看到二者的区别了吗。后图有三个必填的输入项:输入表、字段名、表达式。这三个输入项在前图里你已经通过鼠标动作指定好了前两项,你只需要录入表达式就可以完成字段计算。

首先你要明确一点,需要鼠标来操作的好处是方便快捷,这个面对偶尔的计算是很方便,如果计算的流程很多,你要反复点鼠标——这样的方式让效率很低而且还累,这就是我们要学会用函数脚本的原因。

三个必填项我们叫做变量,也就是一次字段计算必须有三个变量。

存在变量的原因是你这次要操作表天,下次可能就是表地,这次你要操作的字段是BSM,下次可能就是字段BZ,程序不便写死在函数里。

定义变量的值就像你初中学的代数。

A=1

B=2

如果在程序代码中出现了 A+B,那么其代表的就是3 。前面的1和2可以是任何数,程序会弹出一个对话框,让你分别输入A和B的值,你输入多少,后面的A+B就是你输入数值的和。

明白了吧。

这太基础了,已经是大土话了,还不明白就放弃吧,你买了会员的话联系我我给你退。

言归正传,函数的用法:

CalculateField_management(表,字段,”表达式”,表达式语言,其它你暂时用不上的东西)

现在你打开你的arcmap,打开py窗口,在地理处理——python处:

《ArcGIS|照做就能做插件(二)做一个“前面加0”的工具-上》

你再找一个有数据的练习数据,加载到内容列表里并打开属性表:

《ArcGIS|照做就能做插件(二)做一个“前面加0”的工具-上》

我们这次要把字段BZ里面的数统一在前面加上0,使其变成000001——099999 。用”普通”的字段计算器该怎么做,你心里有没有数?没有数的话看我以前的文章:

《ArcGIS属性表里加000的步骤和用到的函数用法》

现在我们不手动算了,我们要把它写成代码,做成工具,这样以后再加0就不用点开字段计算器反复写表达式了,而且你还能把你做成的工具传给别人,呵,又一次可以zhuangbility的机会。

再加深一次印象:

CalculateField_management(表,字段,”表达式”,表达式语言,其它你暂时用不上的东西)

表=变量1

字段=变量2

表达式=变量3

表达式语言=变量4

其中变量1-2是真实变量,变量3-4是伪变量,对于函数来说他们都是真实变量,对于你,变量3,4这两个是可以写死在代码里,这个算是你的”核心算法”,怎么样,学成之后你也是一个掌握”算法”的男人了(误)。

现在回到arcmap界面,以我打开的属性表为例,在py窗口上录入这个函数:

《ArcGIS|照做就能做插件(二)做一个“前面加0”的工具-上》

看到没有,当你敲完第一个左括号之后,自动出来了一个zrz的东西,你应该知道这就是你加入到内容列表的那个图层,此时你敲一下方向键↓,然后在选中状态再敲一下tab键,它就自动上屏了。这个就是变量1:

《ArcGIS|照做就能做插件(二)做一个“前面加0”的工具-上》

根据格式,你要继续录入变量2,变量1录入完了之后你要用逗号结束:

《ArcGIS|照做就能做插件(二)做一个“前面加0”的工具-上》

变量2也自动出来了,你知道这就是你这个表里所有的字段的名字,用同样的方法上屏,然后用逗号结束:

《ArcGIS|照做就能做插件(二)做一个“前面加0”的工具-上》

此时进入到变量3的领域范围,变量3是你的表达式,再复习一下前面加0的表达式怎么写:

STRING(6-LEN([字段名]),”0″)&[字段名]

把这表达式录在上面,两头用引号圈上:

《ArcGIS|照做就能做插件(二)做一个“前面加0”的工具-上》

按一下F2,你看到右侧有个错误提示:

《ArcGIS|照做就能做插件(二)做一个“前面加0”的工具-上》

语法错误。原来是因为表达式两头已经用引号圈上了,表达式里面还有带引号”0″这句,所以我们因该把内部的引号用转义符、也就是斜线给标上:

《ArcGIS|照做就能做插件(二)做一个“前面加0”的工具-上》

表达式录完了,逗号结束,你会看到表达式语言的提示,我们的表达式是VB,所以我们选VB,括号结束:

《ArcGIS|照做就能做插件(二)做一个“前面加0”的工具-上》

再按一下F2,右侧提示没有错误:

《ArcGIS|照做就能做插件(二)做一个“前面加0”的工具-上》

使劲儿敲一下回车:

《ArcGIS|照做就能做插件(二)做一个“前面加0”的工具-上》

运行成功。回头看你的属性表,字段BZ没啥变化,不用担心,重新打开或者排个序就刷新了:

《ArcGIS|照做就能做插件(二)做一个“前面加0”的工具-上》

在上面的操作中,你把变量123都写死在代码里了。这次我们把变量1,2单独提出来独自定义,变量3是表达式做为核心算法继续写死在代码里。

把之前的数据恢复到没计算的状态:

《ArcGIS|照做就能做插件(二)做一个“前面加0”的工具-上》

在py窗口,你定义变量1变量2分别为你的图层和要计算的字段:

《ArcGIS|照做就能做插件(二)做一个“前面加0”的工具-上》

为了让你看得方便,变量名我用的汉语拼音。

现在重新把字段计算的函数敲进去,但是区别在于,需要用到变量12的时候都用上你定义好的那两个变量:

《ArcGIS|照做就能做插件(二)做一个“前面加0”的工具-上》

当你心满意足地按下回车后:

《ArcGIS|照做就能做插件(二)做一个“前面加0”的工具-上》

呵,我故意让你出的错,还记得前面要用到转义符斜线的原因吗?因为表达式本体是要用引号圈上的,记住,你不能在引号里直接用变量。这个理论可以单独开一节课了,还是收费的那种,网上那些付费教程都这么干。反正你就先记着这一点,以后你就慢慢知道了。

用print打印一下你的变量:

《ArcGIS|照做就能做插件(二)做一个“前面加0”的工具-上》

都是bianliang1,两次的结果不一样,区别就在于第二条加了引号。你加了引号,那表示引号里面写的啥,机器就认为是啥,而不是它背后所代表的啥。

我们应该这么写:

《ArcGIS|照做就能做插件(二)做一个“前面加0”的工具-上》

你看到表达式里用到变量2的地方我都改成了{0},然后在尾部加了一句 .format(bianliang2)

按了回车之后你发现没有出错,运行成功了。

format()的用法也是一个基础的python知识,但是也足够单独开一节课了,反正网上的付费视频教程都是这么干的。不过你暂时可以不用特意记住它,先出成果日后再说。

到此,核心的代码你应该大致掌握了,接下来就是把代码单独打包成一个工具以方便你日后的使用和zhuangbility。我在下篇文章会介绍到它,也不难。

微信扫码关注公众号,回复“邀请码”获取用来注册的信息。部分文章加密需要登陆的是本站原创文章,不同于网络上其它教程,请珍惜劳动成果。
点赞