ARCGIS与PYTHON
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
arcgis与python(zz)
ESRI软件中的脚本语言一直使用两种模式。
第一种为AML宏语言,该模型显示了PrimOS系统特性。输出为文件格式,数据处理基于目录和文件系统,代码是线性的。
第二个模式是AVENUE语言,继承了Smalltalk的特性。对象响应是调用方法名称,处理事物不必是线性的,有时会引起I/O冲突,集成啦其他语言的混合包。两种语言都有各自的弊端。
随着ArcGIS8的出现,基于地理视图的脚本语言开始引入,基于接口的编程要求用户使用“真正的”编程语言,如,C++,VB,访问ArcGIS8的功能。没有脚本语言自动完成该系列任务。这用户必须写可执行程序,在复杂的接口树和对象里找到需要的工具,并汇编成DLLs动态库和类型库来使用自定义功能。
ArcGIS9版本的面世,ESRI再次提供了访问该软件的新的脚本语言。ESRI意识到,许多用户并不想或不必是个开发者,但还想使用工具解决他们遇到的问题。这些工具包括,友好一致的界面,脚本对象,用于自定义功能所必须的细致入微的编程工具。
满足这些需要,ESRI提供了多种脚本语言-使用ArcObjects-开始空间处理框架。Python,ESRI支持的脚本语言之一,是一种开源的,编译性的,动态类型的,面相对象的脚本语言之一。Python包含在ArcGIS9中,典型的安装与其他组件一起安装。本篇文章总体介绍如何利用P ython的资源帮助大家的GIS编程以及集成ESRI工具。
1Python简介
Python第一次公开发行是1991年,作者是CWI(阿姆斯特丹国家数学和计算机科学研究所)的研究员Guido van Rossum。名字来源于Guido喜欢的喜剧连续剧“Monty Pytho n”,python继承了许多其他语言的特征,如ABC,Modula,LISP,以及Haskel,这些包括很高级的特征,如元类(metaclass),生成器,列表综合(list comprehension)。但更多的程序员需要的仅仅是python的基本类型,如,列表,字典,字符串。
虽然,已经有13年的发展,目前的版本是2.3。这反映了Guido慈善的独裁者设计哲学,以及开发组的精益求精。他们努力增加新的内容,并保持向后的兼容性,当必要时,重新设计在以前发现有问题的地方。
2python设计
Python语言被设计成易于使用,易于学习的动态脚本语言,这意味着用户不需要编译,交互式的方式可以让用户学习到许多执行层次。
Python的设计哲学,Tim Peter在The Zen of Python描述的最清晰,python程序员遵照这些哲学指导他们学习这门语言,帮助他们编写代码,以保持python的一贯风格。
3Python与GIS
Python提供了很多可能:与GIS系统集成、跨平台、容易与其他语言混合使用(C,C+ +,FORTRAN,Java)。这意味着,python在多语言开发的系统里是最容易成功的。因为各语言的设计,大规模应用的开发也是容易的。许多处理分析GIS数据的包和工具已经被开发出来。基本功能包括,操作shapefile,grid图像,以及更复杂的格式,如arcsde、web服务、数据库等。
矢量格式
一个调用开源库shapelib()的python包—pyshapelib--,可以处理shapefile文件。可以从/software/pyshapelib上下载。该包提供了访问shape的单个坐标点,访问DBF文件,以及简单的shape索引,如何操作shapefile原始的几何形状,或者通过DBF文件获取专门的记录。
另个调用开源库的包为OGR(/ogr/),可以用来处理多种矢量格式,包括MapInfo,ArcInfo coverage,PostGIS,Oracle Spatial,TIGER,SDTS,OPeND AP,DGN(Microstation DGN)格式。OGR是空间数据提取库(GDAL)的一部分,可以下载GDAL整个包(/gdal-1.2.0win32.exe)。
使用python处理GRID数据
GDAL可以处理arcinfo grid数据,还支持许多栅格数据,包括JPEG2000,BSP,US GS DEM,军事高程数据,ECW(经增强压缩小波处理的数据),GRASS(地理资源分析支持系统数据格式),TIFF/GeoTIFF,NetCDF(网络通用数据格式),ERDAS*.img,SDT S(空间数据转换标准数据)等。该包的window版本可以从/gdal-1.
2.0win32.exe网址下载。许多其他格式这里就不一一列出。
GDAL合成了Numeric包,可以灵活的处理各种格式的图形代数操作来满足你的需要。例如,可以写个程序驻留在一个WEB服务器上,下载OGC的数据,使用一些代数处理数据,发布图像道WEB浏览器。一旦你有能力从数据显示脱离出来到数据处理时,处理能力会大大提高。
如,你想发现一个GRID的所有行,列单元的平均值,数据格式是arcinfo二进制格式的整数。使用python的交互界面,首先输入GDAL库,然后定位arcinfo GRID(.adf)数据文件位置,用引号引上。将GRID的内容传到Numeric矩阵,使用Numeric包的方法处理,下面为该过程的python代码:
>>>import gdal
>>>gd=gdal.gdal.Open(r’E:\gis\US_Elevation\usdem_2k\w001001.adf’) >>>.=gd.ReadAsArray()
>>>avg=Numeric.average(Numeric.ravel(array))
>>>avg
-0.0071967281963325313
投影
开源代码库Proj.4的python封装包――py-projection――用于数据投影,可以从Ho bu GIS咨询网下载((/index_html/software/pyprojection/)。虽然该代码使用欧洲石油调查组织的代码系统,但用户可以定义自己的投影,使用原始参数简单的定义当前的投影,x,y坐标,调用一个方法变换到需要的投影,见下面代码。
import Projection
albers=[“proj=aea”,
“ellps=GRS80”,
“datum=NAD83”,
“lat_1=29.5”,
“lat_2=45.5”,
“lat_0=23.0”,
“lon_0=-96.0”,
“x_0=0.0”,
“y_0=0.0”]
p2=Projection.Projection(albers)
print‘----------Albers--------------‘
print‘Location:-93.00W,42.00N’
print“Forward:“,p2.Forward(-93.00,42.00)
print“Inverse:“,p2.Inverse(0.0,0.0)
访问ArcSDE的脚本
笔者开发了一个python包pySDE(/pysde)用来调用ESRI SDE C API函数。几乎所有的SDE C API都能调用,pySDE是个开源代码,但需要一个S DE C API的许可,笔者开发pySDE的目的在于需要用脚本调用ARCSDE引擎,依赖脚本在UNIX平台上处理数据,而不需要ARCGIS。PySDE有个专门的几何代数引擎用于管理脚本(删除一个表,清除日志文件,复制数据),以及许多数据操作脚本。PySDE的另外一个优点在于python交互界面的直接性,可以实时看到命令的结果。当搜索复杂的层次时非常节省时间。
当操作复杂的结构时,该工具能节省大量时间,如调用SDE C API。
web GIS与python
Python非常适合web开发,比java,.NET更节省时间。有许多python资源可以用作web开发,如zope(),一个应用web服务器;mapsever(mapserver. ),一个地图显示服务器,twisted(/products/downloa