人生苦短系列2——来自ArcGIS Python的拯救
上一篇,我们为0基础患者介绍了Python
学完之后,M姐感觉自己能立刻参加考试
当然,有小盆友好奇M姐为什么要发这种技术文章
第一个原因,是有小盆友点播了这个内容
第二个,是个很重要的原因,我是Python的受益者
这个故事说起来太长,所以请允许我在文末娓娓道来一下哈
喜欢看八卦的同学一定不能错过
言归正传,回来我们学习Python的正课上来
ArcGIS中用使用Python
从ArcGIS 8开始,Esri把Python当做了ArcGIS的官方脚本语言。而到了10.1之后,VB变成了可选模块,Python成为了唯一默认支持的脚本语言。过去有种说法,GIS用户,业余和专业的分水岭在于使用ArcGIS软件的时候,会不会用toolbox进行分析;后来的说法变成了非专业GIS人员只会用软件,专业GIS人员会在GIS软件上面用脚本。
ArcGIS中的Python有三种使用方式,最核心的一种方式就是ArcPy(ArcGIS for Python),它Python的一个站点包,专门用于调用ArcGIS的核心功能进行分析和处理的。
第二种叫做Python Addin,可以用来对ArcMap做嵌入式开发;
第三个是一个开源站点包,叫ArcGIS Python API,这个工具主要用来对于ArcGIS Server 、Portal和Online等基于在线的服务进行应用的。
实际上脚本随着ArcGIS体系一路行来的。这是ArcGIS在脚本方面的最早的历程,从VB,到VB+ArcGIS script到ArcPy,不断的发生着进化,到10.1之后,VB已经被逐步废弃掉,所有的脚本支持都全面转向Python。
ArcPy是一个非常强大的站点包,它有许多的功能,大家可以看一下,我们把它分成三个方面来说:
1、使用方法上,它可以有如下使用方法,比如使用脚本、独立窗口、modelBuilder Toolbox等等。
2、在ArcGIS的产品中,桌面端、server端、Engine端都自带有ArcPy。
3、他的应用包括可以做地理数据分析、数据管理、数据转换、制图自动化等等。
那么ArcGIS当中哪些产品包含了Python呢?也就是我要用ArcPy,我需要安装哪个产品。其实,以上四个产品都带有ArcPy的包。其中所谓的ArcGIS三大件(桌面、Server、Engine)老版本用的是Python2.7.x,而ArcGIS Pro自带的是Python3.5以上版本(最新的ArcGIS Pro里面,已经升级到了3.6.x了),当然,目前server的自带版本也在转向Python3.x 。所以如果你想使用Python3版本,两个渠道,10.7以上的server或者ArcGIS Pro。(M姐补刀一句,我们竞赛的小盆友们早就用上10.7和ArcGIS Pro了)
ArcPy有这样一系列的功能,包括:地理数据分析、数据转换、数据管理,地图自动化,具体的我就不多说了。
ArcPy的主要功能之一就是进行数据处理,而处理矢量数据的话,在空间上,主要是通过读写Geometry来实现的。而Geometry又分成点、线、面三种类别,不过有点不太一样的是,Point是所有Geometry的基类,点要素(PointGeometry)也是由Point对象所构成的。
Geometry实际上是所谓的几何属性,由一系列的坐标点所构成,比如点是两个坐标(x,y)组成的一组数值,线是若干个点组成的,面是若干个首尾相连的点组成的。所有的几何信息都存在Geometry里面。在ArcPy里面,Geometry有这些属性和方法,大家在实际编程中可以去试用一下。
Geometry对象有一系列的OGC规范的操作和属性,在ArcPy里面可以直接使用。有了这些方法,一般的矢量处理和计算就没有太大问题了。
ArcPy还可以处理栅格。栅格数据是什么,我们就不多做解释了,一般说来,栅格都存储为图片结构,所以它没有明确的属性信息。
ArcPy处理栅格数据的办法不像处理矢量数据,矢量数据可以当成一个表来读,但是会把栅格数据读成一个矩阵,这个矩阵处理完了之后,再通过NumPyArrayToRaster来把矩阵转化成raster。
把矩阵转换成栅格数据,有三个核心参数。一个在左下角的坐标,再就是每个栅格的高度和宽度:X_cell_size和Y_cell_size,只要这三个参数正确,就可以很容易的把矩阵变成栅格了。
下面看个示例,用ArcPy做山体阴影渲染和三维地形图
以上是读取栅格的示例,那么读取矢量的呢,是通过ArcPy的DA的那个包(DataAccess)来进行读取。
那么ArcGIS除了在脚本里面运用,还可以在哪些地方运用。可以直接在ArcMap的工具里面使用Python,下面看一个示例:
ArcGIS里的每个工具在Python里面都是一个方法,在toolbox里输入的任何都是参数,在脚本里面都有相应的接收方式,脚本方式可以不打开任何界面完成操作,Python实际上并没有实现这些分析,它只是通过调用底层的AO来进行实现的。
同时你可以写自己的工具,写自己的工具只需要掌握输入和输出就可以了,ArcGIS里面通过get获取输入的参数,通过set获取输出的参数,通过工具创建非常容易。(下面看一个示例)
(这张片子没讲啥,但是视频示例里似乎有)
(虾神很懒,这张没讲,但是视频示例里似乎有)
本单元结束
好了,今天的正经内容就先到这里
下面是关于“M姐是Python受益者”这个八卦事件的详细始末
很多老师同学应该都知道我们针对在校师生有个ArcGIS Pro的试用申请地址
(因为仅限在校师生使用,所以地址就不公布了,基本上竞赛学生和高校老师都知道的。不知道的同学先面壁)
老师同学们可以登录我们的在线试用中心去自主申请许可,并申请延期
实际上这个技术背后,是Enterprise,是portal在管理许可
所以,M姐是这个portal的管理员之一
我们暑期和日常会搞一些教师培训
会一次性生成很多的临时用户
在培训结束后再通过本管理员删除这些临时用户
但是删除的过程中,我感觉有些不太友好
所以就咨询了Enterprise的售后技术支持
虽然在他们的指导下我的工作效率大大提升
但还是没达到我幻想的那种一键over式
于是售后的两位帅哥建议我写Python代码实现
但是大家都知道,M姐是个技术白痴啊
就在这个关键时刻,虾神过来拯救我了
他原话是这么说的:我试试吧,30分钟以后联系!
5分钟以后,他说,搞好了,来试试吧
What?不是30分钟吗?5分钟就搞定了?
所以你看,Python就是这么强大
当然,学完了虾神的Python0基础入门课程之后,我也勇敢的自我尝试了一下
当然,这个中间要略过一段对话
虾神建议我把脚本文件放在桌面上,被我严肃地鄙视了一番
他说我是女生里的奇葩
这个回头我觉得有必要仔细掰扯掰扯
在桌面上存放文件是不是一个好习惯
最终在虾神的指导下我学会了:
1)打开Jupyter notebook
2)逐行执行代码:ctrl+回车(代码行前面有个方括号[] 里面空白表示没执行,*表示正在执行中,数字表示执行完成)
3)推荐使用chrome浏览器
有没有很拽很成功的感觉?
好的,今天的给自己脸上贴金活动又取得圆满成功
下篇的Python高级应用进阶对我来说有点难,感觉自己可能会放弃
要不你们点播点别的吧