查看原文
其他

ArcGIS中的Python入门知识点整理

小刘 GIS前沿 2022-12-04


关于Arcpy大家应该都比较熟悉,Python用的好,数据处理快又好!在ArcGIS中ArcPy是一个以成功的arcgisscripting模块为基础并继承了arcgisscripting功能进而构建而成的站点包。


目的是为以实用高效的方式通过Python执行地理数据分析、数据转换、数据管理和地图自动化创建基础。ArcPy提供了丰富纯正的Python体验,具有代码自动完成功能。今天我们就看看关于Arcpy相关处理的使用,通过一些简单代码与大家一起认识Arcpy。


一、使用什么编译器?


1.ArcGIS在安装的时候已经自动安装了相应版本的Python,直接在【开始】菜单中找得arcgis的安装路径,下来找到【IDLE(Python GUI)】这个图形用户界面双击即可,如下图所示:


 

这时候会弹出一个叫Python shell的窗口,shell其实是一个接受由键盘输入的命令,并将其传递给操作系统来执行的程序。这时候我们在这个窗口输入带啊吗是无效的,这个窗口其实是用来显示代码运行的结果或者错误提示信息,那么在那里输入代码呢?【File】-【New Window】即可。


 

这时候在新弹出的窗口【Untitled】就可以进行代码的书写啦,书写完毕后点击菜单栏上面的【Run】-【Run Model】就可以保存为.py文件后运行代码了。(不过貌似没有代码提示功能哦.....)


 

2.使用ArcMap桌面版里面的编辑器。首先打开ArcMap后,点击菜单栏上面的【Python】窗口,如下图所示:


 

在打开的界面中左键选择【Format】可以来设置窗体中的字体和文本颜色。窗体提供了黑白两个主题,我个人比较比较喜欢黑色哦。这个界面左边用来编写代码和显示运行结果以及错误信息,右边也可以提示错误信息,如下图所示:


 

3. 当然还可以使用第三方编译器,比如Pycharm,只要在设置中指定Python解释器为arcgis安装时附带的Python.exe就可以正常的导入相关包,开始享受舒适的编写环境了,运行代码不用打开GIS软件。



 

二、Arcpy具体怎么写?


直接上代码吧,里面有了很详细的注释啦,还不明白的可以留言哦。


1. 实现矢量裁剪效果:


如下图所示,蓝色的区域是【长沙市.shp】数据,黄色的是【长沙市建成区.shp】数据:


 

为了让【长沙市建成区.shp】来裁剪【长沙市.shp】,我输入了如下代码:


 

这段代码就是非常简单的使用了arcmap中的【裁剪】工具,如下图所示,工具打开需要3个必要参数。


 

打开下面的【工具帮助】也可以看到对【Clip_analysis】方法的语法解释以及一些简单的实现例子,使用其他函数方法时都可以这样参照学习了解,如下图所示:


 

运行这段代码的时候我是没有打开arcmap软件的,运行之后再打开看看,可以看到在D盘下面的【ArcpyBook】文件夹下面没有生成【clip.shp】文件,不急,右键【ArcpyBook】文件夹点击【刷新】,这时候子目录多了一个矢量数据【clip.shp】,将其拖入数据框中可以发现和【长沙市建成区.shp】一样。


 

2. 对之前生成的裁剪对象做缓冲区分析:


 

刷新后拖拽到数据框如下图所示:


 

3. 按位置选择要素(intersect):


按位置高亮选中前面生成的缓冲区范围内的公司点要素,并且在控制台输出被选中的点要素数量,【公司点.shp】数据如下图所示:


 

相关代码如下图所示:


 

针对方法【arcpy.MakeFeatureLayer_management(a,b)】我在这里多说一下,这个方法相当于将文件夹中的一份数据a临时复制到内容列表中命名为b,如果在第3方编译器中书写代码,这个是不会显示b到内容列表中,并且使用多次该方法,b的命名可以是一样的。但是如果采用前面说到的第2种方法进行书写代码,每一次调用该方法都要求这个b命名不一样,否则就会报错已存在该要素。


运行完代码后控制台输出了被选中的点要素数量,但是在arcmap这边却是没有被高亮选中,为此我们可以使用前面介绍的第2种方法进行代码的书写。


 

输出结果如下所示:


 

可以看到内容列表中多了一个【GSD】的临时数据,它和下面的【公司点.shp】存储路径是一模一样的。

 


由于Arcpy内容比较多,后面还会再单独出一篇文章讲讲其他内容哦。


源码如下:


# -*- coding:utf-8-*-# 告诉编辑器,我编码格式是utf-8import arcpyimport arcpy.mapping as mapping # 引用包,如果是arcmap内置编辑器则不用引用arcpy.env.workspace = "D:/ArcpyBook"# 确定工作空间,后续用到的数据都在当前文件夹的子目录下面in_fea = "长沙市.shp"clip_feature = "长沙市建成区.shp"# 由于确定了工作空间,为此可以直接引用图层数据名称Clip_out = "clip.shp"# 由于确定了工作空间,输出图层也是可以直接设置名称arcpy.Clip_analysis(in_fea, clip_feature, Clip_out)# 通过arcpy包的Clip_analysis方法进行裁剪处理,# 该方法包含3个必要参数(要裁剪的对象,用来裁剪的图层,输出的裁剪结果图层)

distance = "1000 meters" # 缓冲距离由数值和单位组成,中间使用空格隔开Buffer_out = "buffer.shp"# 由于确定了工作空间,输出图层也是可以直接设置名称arcpy.Buffer_analysis(Clip_out, Buffer_out, distance, "FULL", "ROUND", "ALL")# 通过arcpy包的Buffer_analysis方法进行缓冲区分析,该方法包含3个必要参数# (要生成缓冲区的对象,缓冲区结果输出图层,缓冲区距离,后面的是可选参数,用来设置缓冲区类型)

Points = "公司点.shp"arcpy.MakeFeatureLayer_management(Points, "GSD")# 使用了MakeFeatureLayer_management方法将公司点数据临时设置为加载到内容列表中的数据arcpy.SelectLayerByLocation_management("GSD", "intersect", Buffer_out)# 通过arcpy包的SelectLayerByLocation_management方法进行按位置选择,# 参数有(被选择的图层,空间关系类型,另一空间关系依赖图层)# 其中第一个参数必须为要素图层,不能直接使用绝对路径上的文件数据,否则会报错,# 为此前面专门使用了MakeFeatureLayer_management方法将数据保存为要素图层数据cnt1 = arcpy.GetCount_management("GSD")# GetCount_management方法:返回按位置选择中被高亮显示的图层要素数量print "位于缓冲区范围内的公司有:" + str(cnt1) + "个。"


- END -


ArcGIS Python开发进阶公开课讲解(PPT可下载)
还不了解WebGIS?看这篇
实操指南!ArcGIS制图成果一键转换迁移
ArcGIS | 使用 Python 处理错误
在线处理,在线制图!GIS云工作空间:搭建数字“办公室” 定义GIS工作新模式


戳原文,更有料!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存