在ArcGIS上使⽤python(arcpy包)的⼊门教程
1.why arcpy?
如果简单将arcgis理解成绘图与分析两⼤功能的话(由于本⼈对arcgis使⽤⼗分局限,该分类仅为个⼈使⽤范畴内的⼀个总结),arcpy包在arcgis的分析功能上有很⼤的帮助。其主要功能是利⽤代码⾏取代传统的⼿动点击。其应⽤在解决以下⼏⼤场景下的问题中⼗分有效:
操作步骤较多,并且希望⾃⼰的操作之后可以被重复实现。
操作步骤选项繁复,难以绝对保证每个步骤选项设置⽆误。
论⽂发表需要提交各数据处理过程的代码,但是在arcGIS上的点击操作⽆法给出代码。
简单的操作但是需要重复多次,极其费时(最重要的功能)
2.如何使⽤arcpy?
arcpy和python的各种包其实本质上⽆太多区别。理论上如果将该包安装⾄pip内,可以同常⽤的python包⼀样进⾏调⽤。但是在实际操作中经过笔者尝试,并不能利⽤pip或conda进⾏arcpy包的安装,只能在
ArcMap环境中的python窗⼝进⾏运⾏。(理论上似乎可以⼿动将arcGIS环境下的python中的arcpy复制到常⽤python环境中,这样就可以完全脱离ArcMap进⾏地理计算了,不过可能存在版权问题)。
Arcgis中的python窗⼝如图,点击上⽅⼯具栏的python即可出现下⽅窗⼝。ArcMap中内置版本是python2.7,部分语法跟我们常⽤的python3有些区别,容易出现⼀些编码⽅⾯的问题。在Arcgis pro中内置python版本似乎是python3,不过笔者没有具体使⽤过。
3.arcpy的具体功能
下⾯利⽤⼏个代码实例介绍⼀下arcpy的具体应⽤
(1)利⽤arcpy替代⼿动调⽤ArctoolBox
引⼊包(个⼈习惯,似乎不引也可以…)python中文文档
import arcpy
设置⼯作路径(也可以不⽤设置,后期利⽤绝对路径进⾏引⽤)
将地铁线路设置⼀万⽶的缓冲区(若不设置⼯作路径则函数中使⽤绝对路径)
arcpy.Buffer_analysis("地铁数据.shp","buffer_10000M","10000 METERS")
将住宅⽤地数据合并⾄商服⽤地数据中
arcpy.Append_management(["住宅⽤地_clip"],"商服⽤地_clip")
以上展⽰了简单的制作缓冲区,数据合并功能。实际上任何Arctoolbox内的⼯具均对应有python函数。具体的函数可以在ArcMap查询即可。官⽹上⼀般附带sample,上⼿难度很低。
(2)利⽤arcpy替代⼿动修改属性表
游标是⼀种可迭代对象,通过创建⼀个指针对象调⽤指针的next⽅法。通过不断循环调⽤next来实现对属性表内每个条属性的访问。游标总共有以下三类:
函数游标对象
SearchCursor()查游标,只能读不能写
InsertCursor()插⼊游标,只能写,创建新的⾏
UpdateCursor更新游标,只能写,修改当前⾏或者删除当前⾏
下⽂仅就更新游标对其基本功能做⼀个展⽰,关于三个游标更多内容(⽐如调取各⾏的地理信息等)同样可以参考(这个好像没有中⽂版的)。
以下是⽹络上⼀个利⽤游标进⾏属性表拆分的case,出处于注释所⽰。源代码中存在缺少注释以及代码缩进问题,本⼈进⾏了部分修改。#code source: wwwblogs/yzhyingcool/ QQ:975601416
# in_feature:待拆分要素类
# out_folderpath:输出路径,注意最后加“/”以与字段名拼接出输出⽂件路径
# split_field:拆分标准字段
import arcpy
in_feature="C:/Users/yang/Desktop/中国⾏政区⽮量图/省级⾏政区域.shp"
out_folderpath="C:/Users/yang/Desktop/1/"
#这个split_field⽐较关键,是指你所想研究的in_feature这样⼀个shp中具体对哪些字段进⾏研究。⽐如本代码中只想对shp⾥的Name字段进⾏研究。
split_field="NAME"
field_data_list=[]
#利⽤SearchCursor()⽣成可迭代对象cursor
with arcpy.da.SearchCursor(in_feature,split_field)as cursor:
#利⽤for循环进⾏遍历,row代表是当前⾏
for row in cursor:
#row[0]存储的是row中第⼀个字段的信息。这个“第⼀”指的是你在split_field中所有字段中的排序。由于本代码中只引⼊了NAME⼀个字段,所有通过row[0]进⾏调⽤
if row[0]not in field_data_list:
field_data_list.append(row[0])
#通过上述游标操作将⾏的信息保存在了field_data_list中,在配合arcpy中的select_analysis函数完成属性表的拆分功能。
for select_data in field_data_list:
arcpy.Select_analysis(in_feature,\
out_folderpath+select_data+'.shp',\
split_field+"="+"'"+select_data+"'")
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论