暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

私人定制工具 ——设计Python工具箱

虾神说D 2016-06-07
367

吴道长python定制第二篇,这一篇是纯纯的干货啊。虾神对于吴道长这种能够把ArcGIS的工具箱定制运用到如此炉火纯青境界的人,那是表示灰常的佩服,高手在民间啊。


声明:本文版权属于虎纠吴道长。


干活前先给祖师爷和教主拜一拜,弟子诚心诚意求祖师爷石化bug和客户!!
 

    之前写过一篇相当猥琐的ArcGIS工具的科普文,全篇除了猥琐还有干货嘛?很明显并没有。大虾说,我公众号给你发!我看事不怕事大!嘿嘿,你以后被请去喝茶不要怪我哦。然后就有下面一段对话:
 
文章最后有个Python工具箱,我懒得写就是一笔带过哟。本想着改改再发,大虾果断就发了,相当鸡贼的大虾(虾神自白:怪我咯。。。),so今天不得不再写一篇专门说Python工具箱的科普进行还债。


先说一下背景,我要做对一个shp面进行拐点简化,我司系统加载超过5000个节点的shp面十分卡,老汉推车的卡,所以我们需要简化,再说一下ArcGIS的简化面的工具,相当有尿性工具。一个‘简化容差’用一次就说没就没,TMB还是一个必选项,没有他你就没法进行操作,绝逼大BUG。还有就是简化面这个工具,我只能到一个容差内进行简化,但是不知道这次能简化到几个点?所以我的就得不断地试,然后TM还不让我第二次操作,典型又要驴拉磨又要不吃草。最后整得,还是写一个工具自己玩吧,


简单做了一个while循环的算法进行拐点简化,当时我就想封装在工具箱.tbx里面,后来为了写科普,干脆封装在Python工具箱.pyt里面。
Python 工具箱.pyt 就是一个简单的文本,就是一个对象,当然结构很简单,简单得能让你能花一样钱,就能你玩不一样的大保健,老板我要来一个钟,爽死你so easy 好吧。
先来瞅瞅,我想要在我的工具箱窗口实现什么装逼玩意,然后对照工具箱模板,看看我怎么设置的:
 
这是整体界面,右边是功能帮助文档,不会编辑的自己百度噻,左边就是参数输入,包括 输出路径,输入要素,控制拐点数目(可选),还有一个下拉框 拐点,里面涉及到一些拐点的操作:
1. 参数的输入路径肯定要有;
2. 某些参数不是必选的,要设置成‘可选’,比如控制拐点数目;
3. 某些参数要有默认值
4 拐点这个下来框;
5 只有激活‘是否要拐点’才能启动‘是否要排头’
 
6 当某个参数输入一个不合理值时候,窗口自动报警;
 
7 最后运算过程中,消息会给你来个提示消息。
 
好了,有了需求,就得看看怎么去做了,先看Python工具箱模型,注释就编注了各个函数的功能呢。
 
def __init__(self)和def execute(self, parameters, messages)这两个就不用介绍了,一个是给你的工具取名,一个是填充的算法程序的地方。

getParameterInfo(self)这个函数中,主要用到Parameter这个类,这边我们就能把需求1~4,做下来,首先 Parameter 基本规则中:
 
就把 这个工具外部名称,内部函数名称,数据类型等等设置好,比如我的设置,我用中文名作为外部名称,这个会出现在操作窗口上,我用英文名做内部函数名,这玩意是和我算法程序是呼应了的。
提示一下: parameterType 有三个选项 : Required,Optional,Derived,翻译一下就是 必选,可选和派生,这下你就知道需求2怎么做了呗。
Parameter 有一个属性叫 Value ,用在设置某些参数的默认值,当然帮助文档说可以在环境中设置,相当麻烦和扯淡。
 
Parameter 还有一个属性叫category,这玩意就是实现你的下拉框的。我把两个布尔型参数,集结到拐点这个下拉框,知道为了啥不?就为了装逼,没有半毛钱实际作用。
 
updateParameters(self, parameters) 是一个神奇的函数,因为这玩意我才选择用Python工具箱而不是普通工具箱,这能做到就是敌不动我不动,敌动我才动的功能,
if A老子不动:
     B老子也不动
else:
     B老子跟着动
return  A : 妈的,动一次打一次,动一次打一次,动次打次

具体代码如下:
 
很简单的设计,就能做到需求5。还有一个报警提示,则是updateMessages(self, parameters)上撸的,当然能也是很简单,自己感受一下个feel:
 
最后那个排列起来很整齐and很爽的消息提示在那设置呢?在execute(self, parameters, messages),其实我就加了一句话:
 
Python工具箱其实很简单,但是的的确确可以做出很理想的功能。
数据员本身在GIS界是一种最低等的生物,哪有人开发人员高大上,在数据上的成就和开发人员比肩,我倒是觉得Python是不错的选择,当然这个还得是ArcGIS这个平台和Python的契合度相当好,毕竟我不是正统的计算机出身,我现在能做的就是ArcGIS平台做一点小工具的开发,所以说,哪天ArcGIS被淘汰了,我基本就是失业了。

大学答辩:
老师:这是你自己写的论文嘛?
学生:必须的。
老师:你确定?
学生:嗯嗯。
老师:这个数据哪里来的?
学生:不知道,,,,,,,
老师:那这个数据又是哪里来的?
学生:你猜猜?
滚!!!
最后结果:优秀作文。


文章转载自虾神说D,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论