ArcGIS中的Python入门知识点整理
关于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-8
import arcpy
import 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 -