在Arcmap中使用Python
ArcGIS中的Python简介:ArcGIS 8.X之前不能使用脚本语言,只能通过VB, C++的应用程序接口访问。ArcGIS 9.0/9.1版本开始引入Python,通过PythonCOM接口调用gp(GeoProcessing对象),这种方式类似于调用其它程序的脚本,必须通过导入Win32com包实现(单独安装),同时必须启动ArcMap等程序之后才能进行操作。如下: import win32com.client# 9.1以前老版本的访问方式gp = win32com.client.dispatch("esriGeoProcessing.GPDispatch.1")ArcGIS 9.2版本之后就抛弃了PythonCOM方式,采用C/C++扩展了一个一个Python对象(GP),该对象位于..\ArcGIS\BIN\arcgisscripting.dll,该对象直接引用了Python24.dll(位于C:\WINDOWS\system32),从名称可以看出全部使用小写名称也是C的风格。使用GP对象可以在不启动ArcGIS方式下直接处理数据,性能更加稳定。要在Python中直接使用gp对象,需要在PYTHONPATH变量中增加..\ArcGIS\BIN\目录,这样在Python脚本中就可以直接导入arcgisscripting对象了。如下: import arcgisscripting# 9.2以后新版本的调用方式gp = arcgisscripting.create()注意:9.1和9.2在python代码上的区别仅此两行而已!!但9.3之后增加了许多列表函数,需要改写程序。 import arcgisscripting# 9.3以后版本的调用方式gp = arcgisscripting.create(9.3)# 在9.3中使用create不添加版本号以9.2兼容方式运行import arcpy# 10.0以后的版本在ArcGIS的9.3版本中,gp对象增加了许多列表对象如:ListFields, ListFeatureClasses等,这样使得操作更加方便,避免频繁地遍历。ArcGIS 9.3版本脚本在F1帮助中键入“Geoprocessor object”,或打开“Geoprocessing -> Auto.. script -> Scripting object -> Geoprocessing object”。1、典型的Python导入模块介绍import sys# 导入标准模块用于获取用户数的参数,如sys.argv[1]import os# 导入标准模块用于获取工作路径,如os.pathimport arcgisscripting# 导入ArcGIS模块用于数据操作,如gp2、关于记录指针cursor和文件锁lock文件锁防止多个进程同时修改文件,文件锁有两种:共享锁shared和独占锁exclusive。共享锁用于同时浏览,如同时在ArcMap和ArcCat中打开并浏览同一个shp文件。独占锁用于文件编辑,如在ArcMap中编辑,此时文件以独占方式使用,此时不能再被其它程序编辑。因此,使用InsertCursor或UpdateCursor编辑文件后,必须释放资源,否则文件不能被再次编辑。在python中释放资源必须显式调用del,在vbs中必须显式调用set...Nothing。如下:rows = gp.InsertCursor("d:\\000.shp")# 插入模式访问row = rows.NewRow()……del row, rows# 必须释放资源脚本访问:1、创建gp对象后,可以先通过describe方法确定数据的描述信息,不同的数据类型描述信息是不同的。如shape文件的描述信息有:ShapeType(点,线,面等类型),FeatureType(注记、复杂边)等描述信息。import arcgisscriptinggp = arcgisscripting.create(9.3)srcName = r"d:\000.shp"desc = gp.Describe(srcName)if desc.ShapeType=="Polyline": pass如果数据类型为shape文件或table表,则可以不读取shp文件,直接通过描述信息访问字段Fields、索引Index信息。……desc = gp.Describe(srcName)flds = desc.Fieldsfor fld in flds: print(fld.Name)注:当然,字段、索引信息也可不通过desc,而通过ListFields, ListIndexes函数来访问flds = gp.ListFields(