在Arcmap中使用Python.docx_第1页
在Arcmap中使用Python.docx_第2页
在Arcmap中使用Python.docx_第3页
在Arcmap中使用Python.docx_第4页
在Arcmap中使用Python.docx_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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),该对象位于.ArcGISBINarcgisscripting.dll,该对象直接引用了Python24.dll(位于C:WINDOWSsystem32),从名称可以看出全部使用小写名称也是C的风格。使用GP对象可以在不启动ArcGIS方式下直接处理数据,性能更加稳定。要在Python中直接使用gp对象,需要在PYTHONPATH变量中增加.ArcGISBIN目录,这样在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.argv1import 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 = rd:000.shpdesc = 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(srcName)for fld in flds: print(fld.Name)通过描述信息,也可直接访问坐标系(空间参考)信息。desc = gp.Describe(srcName)sr = desc.SpatialReferenceprint sr.Name, srType2、创建gp对象之后,即可进行数据读写,数据读写必须通过Cursor对象实现。Cursor访问有三种模式:Insert(增加要素),Update(编辑或删除要素),Search(要素检索)。rows = gp.InsertCursor(srcName)# 插入模式访问row = rows.NewRow()rows = gp.UpdateCursor(srcName)# 更新模式访问row = rows.Next()通过检索模式访问,可以通过SQL遍历满足条件的记录rows = gp.SearchCursor(srcName, ID = 0)# 检索模式访问rows = gp.SearchCursor(srcName, TH = H50G)# 检索模式访问row = rows.Next()while(row): print row.FID# 直接用字段名称 row = rows.Next()3、在设置访问模式之后,就可以对要素的插入、更新、删除等操作插入操作:rows = gp.InsertCursor(srcName)# 插入不需要进行Next()操作row = rows.NewRow()row.RowID = 1row.Distance = 100rows.InsertRow(row)更新操作:rows = gp.UpdateCursor(srcName)row = rows.Next()while(row): row.Distance = row.RowID * 25 rows.UpdateRow(row) row = rows.Next()删除操作:rows = gp.UpdateCursor(srcName)row = rows.Next()while(row): if row.Distance = 10: rows.DeleteRow(row) row = rows.Next()4、设置访问模式后,可以访问单个要素的属性,如length, area, centroid等rows = gp.UpdateCursor(srcName)row = rows.Next()while(row): fea = row.Shape# 也可以通过 fea = row.GetValue(Shape) 访问 print fea.Area# 获取其他字段数值也是利用该函数,如 row.GetValue(图号) row = rows.Next()5、读写具体的点、线、面对象读取单点对象:while(row): fea = row.Shape pnt = fea.GetPart()# 单点的 GetPart() 获取一个点,相当于GetPart(0) print(pnt.x, pnt.y) row = rows.Next()读取多点对象:while(row): fea = row.Shape i, pn = 0, fea.PartCount# 获取组成的个数 while(ipn): pnt = fea.GetPart(i)# 多点必须通过GetPart(i)遍历所有部分 print(pnt.x, pnt.y) i += 1 row = rows.Next()读取线、面对象:while(row): fea = row.Shape i, pn = 0, fea.PartCount# 获取组成个数 print(本要素有%d个部分%pn) while(i Options GeoProcessing 中选择“Add result of geoprocessing operations to the display”即可。7、 如何读写点对象while row:# 遍历所有要素 fea = row.GetValue(Shape)# 获取要素的几何属性 pnt = fea.GetPart()# 点对象只有1个对象,GetPart相当于取该点 print pnt.x, pnt.y# 获取点对象的属性 row = rows.Next()# Next 下一个要素8、 如何读写线对象线对象可能包括几个线段(part),每个线段中可能包含多个点(point),wh

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论