学习资源: 《面向ArcGIS的Python脚本编程》
英文版更详细 Python Scripting for ArcGIS
练习数据和资源 Esri官方资源
书一共分为四部分,第一部分是Python和地理处理的相关概念(第一章到第四章),第二部分是编写地理处理脚本(第五章到第九章),第三部分是执行地理处理任务(第十章到第十二章),最后一部分是 创建并使用脚本工具(十三到十四章)。核心主要是第二部分。
Part 2 Writing Scripts
Chapter 5 Geoprocessing using Python
引用工具函数的两种方法(推荐第一种)
跳过可选参数的三种方法
设置工作空间和环境
>>> from arcpy import env
>>> env.workspace = "C:/EsriPress/Python/Data/Exercise05"
>>> env.overwriteOutput = True
>>> env.outputCoordinateSystem = spatial_ref
坐标系类(SpatialReference类)
需要实例化之后使用
>>> prjFile = "C:/EsriPress/Python/Data/Exercise05/facilities.prj"
>>> spatial_ref = arcpy.SpatialReference(prjFile)
>>> arcpy.DefineProjection_management("hospitals", spatial_ref)
The result is <Result 'hospitals'>.
>>> print spatial_ref.name
The result is
NAD_1983_StatePlane_Texas_Central_FIPS_4203_Feet
显示工具的提示信息
arcpy.Clip_analysis("parks.shp", "zip.shp", "Results/parks_Clip.shp")
print arcpy.GetMessages()
# 输出所有的提示信息
msgCount = arcpy.GetMessageCount()
print arcpy.GetMessage(msgCount-1)
# 输出指定的提示信息
Chapter 6 Exploring spatial data
使用工具前判断文件是否存在(arcpy.exists)
python自带的函数os.path.exist函数主要是判断文件是否存在,也就是必须要写出完整文件的后缀名,而Arcpy中的exists函数则是可以对不同类别的要素进行判断是否存在。
import arcpy
from arcpy import env
env.workspace = "C:/EsriPress/Python/Data/Exercise06"
if arcpy.Exists("cities.shp"):
arcpy.CopyFeatures_management("cities.shp", "results/cities_copy.shp")
判断数据类型(Describe)
type = arcpy.Describe("cities.shp").shapeType
if type == "Polygon":
# 需要使用的函数
else:
print "The feature are not polygons"
数据库中的数据类型非常重要,因为数据库中的户数据元素没有文件扩展名。
文件地理数据库后缀名 .gdb
个人地理数据库后缀名.mdb
企业地理数据库后缀名.sde
>>>import arcpy
>>>element = "C:/Data/study.gdb/final"
>>>desc = arcpy.Describe(element)
>>> arcpy.Describe(element).datasetType
u'FeatureClass'
>>> arcpy.Describe(element).ShapeType
u'Point'
Describe函数返回一个具有很多属性的Describe对象,包含文件路径、目录、路径、文件名称等属性。
>>> mylayer = arcpy.Describe("cities")
>>> mylayer.dataType
#Running the code returns u'FeatureLayer'.
>>> mylayer.shapeType
The result is u'Point'.
----------
>>> mylayer.spatialReference.name
The result is u'GCS_North_American_1983'.
>>> mylayer.spatialReference.type
The result is u'Geographic'.
>>> mylayer.spatialReference.domain
The result is u'-400 -400 400 400'.
列表批处理
import arcpy
from arcpy import env
env.workspace = "C:/Data"
# 列出目录下所有文件名
fclist = arcpy.ListFeatureClasses( )
print fclist
# [u'floodzone.shp', u'roads.shp', u'streams.shp', u'wetlands.shp', u'zipcodes.shp']
# 列出以w开头的文件名
fclist = arcpy.L