全国高分辨率土地利用数据服务 土地利用数据服务 土地覆盖数据服务 坡度数据服务 土壤侵蚀数据服务 全国各省市DEM数据服务 耕地资源空间分布数据服务 草地资源空间分布数据服务 林地资源空间分布数据服务 水域资源空间分布数据服务 建设用地空间分布数据服务 地形、地貌、土壤数据服务 分坡度耕地数据服务 全国大宗农作物种植范围空间分布数据服务
多种卫星遥感数据反演植被覆盖度数据服务 地表反照率数据服务 比辐射率数据服务 地表温度数据服务 地表蒸腾与蒸散数据服务 归一化植被指数数据服务 叶面积指数数据服务 净初级生产力数据服务 净生态系统生产力数据服务 生态系统总初级生产力数据服务 生态系统类型分布数据服务 土壤类型质地养分数据服务 生态系统空间分布数据服务 增强型植被指数数据服务
多年平均气温空间分布数据服务 多年平均降水量空间分布数据服务 湿润指数数据服务 大于0℃积温空间分布数据服务 光合有效辐射分量数据服务 显热/潜热信息数据服务 波文比信息数据服务 地表净辐射通量数据服务 光合有效辐射数据服务 温度带分区数据服务 山区小气候因子精细数据服务
全国夜间灯光指数数据服务 全国GDP公里格网数据服务 全国建筑物总面积公里格网数据服务 全国人口密度数据服务 全国县级医院分布数据服务 人口调查空间分布数据服务 收入统计空间分布数据服务 矿山面积统计及分布数据服务 载畜量及空间分布数据服务 农作物种植面积统计数据服务 农田分类面积统计数据服务 农作物长势遥感监测数据服务 医疗资源统计数据服务 教育资源统计数据服务 行政辖区信息数据服务
Landsat 8 高分二号 高分一号 SPOT-6卫星影像 法国Pleiades高分卫星 资源三号卫星 风云3号 中巴资源卫星 NOAA/AVHRR MODIS Landsat TM 环境小卫星 Landsat MSS 天绘一号卫星影像
ESRI软件中的脚本语言一直使用两种模式。第一种为AML宏语言,该模型显示了PrimOS系统特性。输出为文件格式,数据处理基于目录和文件系统,代码是线性的。
ESRI软件中的脚本语言一直使用两种模式。第一种为AML宏语言,该模型显示了PrimOS系统特性。输出为文件格式,数据处理基于目录和文件系统,代码是线性的。
第二个模式是AVENUE语言,继承了Smalltalk的特性。对象响应是调用方法名称,处理事物不必是线性的,有时会引起I/O冲突,集成啦其他语言的混合包。两种语言都有各自的弊端。
随着ArcGIS 8的出现,基于地理视图的脚本语言开始引入,基于接口的编程要求用户使用“真正的”编程语言,如,C++,VB,访问ArcGIS 8的功能。没有脚本语言自动完成该系列任务。这用户必须写可执行程序,在复杂的接口树和对象里找到需要的工具,并汇编成DLLs动态库和类型库来使用自定义功能。
ArcGIS 9版本的面世,ESRI再次提供了访问该软件的新的脚本语言。ESRI意识到,许多用户并不想或不必是个开发者,但还想使用工具解决他们遇到的问题。这些工具包括,友好一致的界面,脚本对象,用于自定义功能所必须的细致入微的编程工具。
满足这些需要,ESRI提供了多种脚本语言-使用ArcObjects-开始空间处理框架。Python,ESRI支持的脚本语言之一,是一种开源的,编译性的,动态类型的,面相对象的脚本语言之一。Python包含在ArcGIS 9中,典型的安装与其他组件一起安装。本篇文章总体介绍如何利用Python的资源帮助大家的GIS编程以及集成ESRI工具。
1 Python简介
Python第一次公开发行是1991年,作者是CWI(阿姆斯特丹国家数学和计算机科学研究所)的研究员Guido van Rossum。名字来源于Guido喜欢的喜剧连续剧“Monty Python”,python继承了许多其他语言的特征,如ABC,Modula,LISP,以及Haskel,这些包括很高级的特征,如元类(metaclass),生成器,列表综合(list comprehension)。但更多的程序员需要的仅仅是python的基本类型,如,列表,字典,字符串。
虽然,已经有13年的发展,目前的版本是2.3。这反映了Guido慈善的独裁者设计哲学,以及开发组的精益求精。他们努力增加新的内容,并保持向后的兼容性,当必要时,重新设计在以前发现有问题的地方。
2 python设计
Python语言被设计成易于使用,易于学习的动态脚本语言,这意味着用户不需要编译,交互式的方式可以让用户学习到许多执行层次。
Python的设计哲学,Tim Peter在The Zen of Python描述的最清晰,python程序员遵照这些哲学指导他们学习这门语言,帮助他们编写代码,以保持python的一贯风格。
3 Python与GIS
Python提供了很多可能:与GIS系统集成、跨平台、容易与其他语言混合使用(C,C++,FORTRAN,Java)。这意味着,python在多语言开发的系统里是最容易成功的。因为各语言的设计,大规模应用的开发也是容易的。许多处理分析GIS数据的包和工具已经被开发出来。基本功能包括,操作shapefile,grid图像,以及更复杂的格式,如arcsde、web服务、数据库等。
矢量格式
一个调用开源库shapelib(shapelib.maptools.org)的python包—pyshapelib--,可以处理shapefile文件。可以从www.hobu.biz/software/pyshapelib上下载。该包提供了访问shape的单个坐标点,访问DBF文件,以及简单的shape索引,如何操作shapefile原始的几何形状,或者通过DBF文件获取专门的记录。
另个调用开源库的包为OGR(gdal.maptools.org/ogr/),可以用来处理多种矢量格式,包括MapInfo,ArcInfo coverage,PostGIS,Oracle Spatial,TIGER,SDTS,OPeNDAP,DGN(Microstation DGN)格式。OGR是空间数据提取库(GDAL)的一部分,可以下载GDAL整个包(hobu.stat.iastate.edu/gdal-1.2.0win32.exe)。
使用python处理GRID数据
GDAL可以处理arcinfo grid数据,还支持许多栅格数据,包括JPEG2000,BSP,USGS DEM,军事高程数据,ECW(经增强压缩小波处理的数据),GRASS(地理资源分析支持系统数据格式),TIFF/GeoTIFF,NetCDF(网络通用数据格式),ERDAS *.img,SDTS(空间数据转换标准数据)等。该包的window版本可以从hobu.stat.iastate.edu/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――用于数据投影,可以从Hobu GIS咨询网下载((hobu.biz/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(hobu.stat.iastate.edu/pysde)用来调用ESRI SDE C API函数。几乎所有的SDE C API都能调用,pySDE是个开源代码,但需要一个SDE C API的许可,笔者开发pySDE的目的在于需要用脚本调用ARCSDE引擎,依赖脚本在UNIX平台上处理数据,而不需要ARCGIS。PySDE有个专门的几何代数引擎用于管理脚本(删除一个表,清除日志文件,复制数据),以及许多数据操作脚本。PySDE的另外一个优点在于python交互界面的直接性,可以实时看到命令的结果。当搜索复杂的层次时非常节省时间。
当操作复杂的结构时,该工具能节省大量时间,如调用SDE C API。
web GIS与python
Python非常适合web开发,比java,.NET更节省时间。有许多python资源可以用作web开发,如zope(www.zope.org),一个应用web服务器;mapsever(mapserver.gis.umn.edu),一个地图显示服务器,twisted(twistedmatrix.com/products/download),一个网络协议层,其他web开发的GIS通用开源工具描述如下:
web服务器
Web服务使用简单对象访问协议(SOAP),XML远端程序调用(RPC),以及REST客户端在现今都很盛行。WEB服务器容许你编码一个XML结构的请求到服务器,并将结果以XML格式传回。该构架允许你更容易的在系统中分离数据存储和管理比例从应用端。Python提供许多web服务的工具,XML-RPC构建在语言中,许多SOAP,和REST代码库可以使用。
pyTerra
一个很有用的WEB服务器是TerraService SOAP API,笔者开发一个软件包pyTerra(hobu.stat.iastate.edu/pyTerra),可以容易的访问Microsoft TerraServer,例如,如果你想查询一个专门经纬度的数字正射四角照片的日期,一个方法是使用FGDC的元数据,使用ArcCatalog读取,当使用该方法时,比较呆板,不使用,如果你要查询1万到1万五个点的图像日期。使用程序是唯一可行的办法。
幸运的是,TerraServer存储图像的获取时期到图像数据中,可以使用pyTerra调用WEB API可以快速的访问这些信息。例如下面的例子,获取TerraServer.上DRG地图或DOQ日期。
>>> from pyTS import TerraImage
>>> from pyTS import pyTerra
>>> apt = TerraImage.point(42.00, -93.00)
>>> drg = pyTerra.GetAreaFromPt(apt, ‘Topo’,’Scale64m’, 1,1)
>>> doq = pyTerra.GetAreaFromPt(apt, ‘Photo’,’Scale64m’,1, 1)
>>> drg.Center.TileMeta.Capture
‘1976-07-01T00:00:00.0000000-07:00’
>>> doq.Center.TileMeta.Capture
‘1994-04-18T00:00:00.0000000-07:00’
从python的交互式窗口,可以看到DRG以及DOQ数据的日期是在1976-1994,这些字符可以转换成日期格式并存入数据库中,日期信息可以被捕捉,并写到图像上,使用PIL包,python可以容易的与web结合,pyTerra工具可以完成你大部分的工作。
结论
Python可以为你的GIS工具箱提供你一个完全工具集,在ArcGis中,新技术是无止境的,如web服务已经广泛的被Python支持。网上有许多python脚本资源,与该文件一起的资源可以在笔者的网站(hobu.biz/software/python_guide_esri/.)上获取。