前面讲了那么多地理处理的方式,而且在ESRI的发展技术上来说,也一直推崇地理处理,特别是在9.2的体系框架里边,更是把地理处理作为一种核心的技术来推广。那么究竟在9.2的体系当中,地理处理发生了什么变化呢?
在ArcGIS9.2与以前版本地理处理方面的最大的一个区别地方在于,它把地理处理纳入到了桌面,ArcGIS Engine,ArcGIS Server中。也就是说,我们可以在ArcGIS Engine当中使用地理处理工具,我们同样的也可以在同样基础的AO体系结构ArcGIS Server中来使用地理处理。从这方面体现ArcGIS结构一体化,功能一体化的强大优势。下面我们分别来看看,Engine和Server中如何共享地理处理。
ArcGIS Engine地理处理
第一节 ArcGIS Engine地理处理
在ArcGIS中,地理处理可以通过脚本语言如Python,JScript来运行工具,同样的也可以通过系统语言,如C++,Java, DOTNET等来执行。在9.2的ArcObjects对象模型图中提供了Geoprocessor对象模型。这里主要用来调用ESRI地理处理对象库,包括了许多IGeoProcessor接口和GeoProcessor的对象类。如图6-1
使用地理处理器--Geoprocessor(或则叫地理处理引擎)
地理处理工具可以通过地理处理器来运行。地理处理器类是简化执行地理处理工具的主要类。可以通过地理处理器的接口IGeoProcessor来访问可以执行工具的属性和方法,设置全局环境,检查结果信息。GeoProcessor类是在ArcGIS中执行任何地理处理工具的简单访问节点,包括扩展模块。我们可以在开发帮助系统中查看这样的例子代码“How to Execute Geoprocessing Tools”。
那么地理处理的功能实际上我们可以通过ArcGIS Engine来调用ArcObjects对象库的相应接口来实现,为什么又需要地理处理器呢?这个问题我们通过看下面的这个例子就可以得出结论了。
这里我们举个例子,我们要创建一个Shape文件,那么看看用地理处理器和用ArcObject各对应的代码。在Model Builder处理过程如图6-2,对应代码如表1所示.
从表1上面我们不难看到同样是调用一个功能,用地理处理器实现起来是多么的容易呀!
对于ArcGIS Engine调用地理处理的语法,和ArcObjects的一样,从上面的例子代码中就可以看出来,因此在Engine帮助指南中有比较详细的接口说明。另外在http://edndoc.esri.com/arcobjects/9.2/welcome.htm上面有许多VB,VC++,Java等的地理处理使用说明,可以为我们提供在线学习帮助。
ts代码(38行)
- Public Sub CreateShapefile()
- Const strFolder As String = "D:/DATA"
- Const strName As String = "MyShapeFile" ' Dont include .shp extension
- Const strShapeFieldName As String = "Shape"
- ' Open the folder to contain the shapefile as a workspace
- Dim pFWS As IFeatureWorkspace
- Dim pWorkspaceFactory As IWorkspaceFactory
- Set pWorkspaceFactory = New ShapefileWorkspaceFactory
- Set pFWS = pWorkspaceFactory.OpenFromFile(strFolder, 0)
- ' Set up a simple fields collection
- Dim pFields As IFields
- Dim pFieldsEdit As IFieldsEdit
- Set pFields = New esriGeoDatabase.Fields
- Set pFieldsEdit = pFields
- Dim pField As IField
- Dim pFieldEdit As IFieldEdit
- ' Make the shape field
- ' it will need a geometry definition, with a spatial reference
- Set pField = New esriGeoDatabase.Field
- Set pFieldEdit = pField
- pFieldEdit.Name = strShapeFieldName
- pFieldEdit.Type = esriFieldTypeGeometry
- Dim pGeomDef As IGeometryDef
- Dim pGeomDefEdit As IGeometryDefEdit
- Set pGeomDef = New GeometryDef
- Set pGeomDefEdit = pGeomDef
- With pGeomDefEdit
- .GeometryType = esriGeometryPolygon
- Set .SpatialReference = New UnknownCoordinateSystem
- End With
- Set pFieldEdit.GeometryDef = pGeomDef
- pFieldsEdit.AddField pField
- ' Add another miscellaneous text field
- Set pField = New esriGeoDatabase.Field
- Set pFieldEdit = pField
- With pFieldEdit
- .Length = 30
- .Name = "MiscText"
- .Type = esriFieldTypeString
- End With
- pFieldsEdit.AddField pField
- ' Create the shapefile
- ' (some parameters apply to geodatabase options and can be defaulted as Nothing)
- Dim pFeatClass As IFeatureClass
- Set pFeatClass = pFWS.CreateFeatureClass(strName, pFields, Nothing, _
- Nothing, esriFTSimple, strShapeFieldName, "")
- End Sub
地理处理代码(4行)
- Dim GP as Object
- Set GP = CreateObject(“esriGeoprocessing.GPDispatch”)
- GP.CreateFeatureClass "D:/DATA",”MyShapefile.shp”, “polygon”
- GP.AddField “MiscText”, “Text”, 30
(1)、文件方式共享
在ArcGIS Desktop当中,工具可以独立运行,可以把多个处理工具与数据结合在Model Builder中,这些工具都可以保存在.tbx文件中,这样可以通过邮件,光盘,或其它存储介质为别人提供共享。使用起来很简单,只需要在ArcToolbox中把这个工具箱加进来就可以用了。
(2)、数据库共享
在ArcGIS Server 9.2的产品级别中,提供了两种技术,一种是数据库管理技术,就是9.2以前级别产品的ArcSDE产品技术。在ArcSDE的Geodatabase里,可以支持对Toolbox的保存,我们可以把工具箱的工具或Model Builder保存在ArcSDE数据库当中,这样其他人只要通过连接SDE的数据库就可以访问这些地理处理工具。并且象在ArcToolbox中一样,运行该工具或模型。如图6-3所示
对于地理处理工具的入库方法与操作ArcToolbox中一样,通过创建新的工具,或添加新的工具,在系统工具中选择需要保存在数据库的工具,就完成了入库的工作。
(3)、Web Service共享
ArcGIS Server 9.2的功能强大,可以发布多种服务,其中一种就是地理处理服务。你可以把toolbox通过ArcGIS Server象发布数据服务一样发布出去,这就称为地理处理服务。通过发布ArcGIS服务,任何人只要可以访问Internet和ESRI产品,就可以使用该服务。服务在服务器上执行,使用服务器计算机的资源,让客户端运行该服务,并显示结果。另外,ArcGIS Server可能有一些或安装了全部的ArcGIS的扩展产品(如空间分析或网络分析),而客户端如果需要运行这些功能,也不需要在他们的本机上安装这些扩展。

下面这个例子是告诉你如何一步一步的通过创建和发布一个简单的模型到ArcGIS Server上。模型让用户交互的输入一个点,并且对这个点进行缓冲分析。这个模型你唯一需要处理的数据是一个点要素。
这个例子分三个步骤:
l在你的电脑环境下创建和测试模型
l让ArcGIS Server能够访问到包含你的工具箱和模型所在的文件夹
l把toolbox发布为ArcGIS地理处理服务
这个例子假设系统配置如图6-4所描述的。计算机名为[url=file://cogitator/]//cogitator[/url]是你的桌面计算机。你将在这台机器上创建toolbox和模型工具,并共享文件夹。ArcGIS Server所在服务器名为[url=file://lab13/]//lab13[/url],可以通过局域网访问。你不需要拷贝任何的工具箱或数据到服务器上。需要的时候,服务器可以访问你的计算机。
这个系统的配置经过特殊的选择,因为它需要服务器([url=file:lab13]//lab13[/url])可以访问局域网上其它计算机([url=file:cogitator]//cogitator[/url])的资源,并演示如何创建授权的账户。
创建模型
第一部分:创建一个文件夹和工具箱
在ArcCatalog中,创建一个名为GPServerExamp0le的文件夹。无所谓你创建在什么位置。我们这里假设,创建的路径在E:/GPServerExample.
在E:/GPServerExample下创建一个名为MyServerTools新的工具箱,并把label标示为My Server Tools。
打开ArcMap, 显示ArcToolbox窗口,并添加E:/GPServerExample/MyServerTools到 ArcToolbox窗口中。 (ArcToolbox将显示工具箱的label“ My Server Tools”,如图6-5所示。)


在My Server Tools内,创建一个新的名位BufferPoints的模型,并设置label为”Buffer Points”。
添加Buffer 工具到模型中。重命名输出名为”Buffered points”,并设置为模型参数,如图6-6所示。
3.在模型空白处鼠标右击,弹出菜单选择创建一个新的变量,选择数据类型为Feature Set,如图6-7所示
4.重命名刚创建的变量为“Points to buffer”,并用连接工具把它与buffer工具连接在一起,并设置为模型参数,如图6-8所示。
5.“Points to buffer”变量需要知道要创建什么样的要素类,并且绘制它们。你可以通过鼠标右击这个变量,选择属性,来设置这样的信息。点击数据类型选项,在“Import schema and symbology from”中,指到任意的点要素类或图层。(这个例子中使用点要素。实际上,缓冲功能接受任意类型的要素类,所以你可以选择任意类型)如图6-9所示。
6.创建一个数据类型为Linear Unit的新变量。重命名这个变量为“Buffer distance”,并连接到Buffer中的Distance[Value或Field]参数,设置这个变量为参数(Parameter),如图6-10所示。
7.右击输出变量“Buffered points”,点管理,如图6-11所示。管理输出意思是当ArcGIS Server运行模型的时候,可以指定输出的位置。因此建议所有通过Server发布的模型都应该设置管理输出,tool layers除外(使用tool layer可以参考Example map service with geoprocessing)。管理输出将写到ArcGIS Server自动所创建的scratch workspace中。
8.最后保存模型,并退出ModelBuilder。





