前面讲了那么多地理处理的方式,而且在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
复制代码
二节 ArcGIS Server地理处理
(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。
第三部分: 在本地测试模型 上面是讲如何准备模型。在发布模型以前,我们需要测试模型,因为输入的数据类型为Feature Set,一个要素集需要交互放置要素位置,因此你需要在有地图的应用当中执行模型,如ArcMap。
打开ArcMap ,添加MyServerTools 到工具箱中。 添加地理处理操作结果到显示中。 打开Buffer Points 工具。对话框显示如图6-12
提供一个或多个点来缓冲,以及缓冲距离。 点击OK。 工具执行以后,在ArcMap的内容表中将添加一个新的图层。你不能够控制这个图层的名,因为工具的输出已经被管理了,因此名称由ArcGIS选择。但是你可以在ArcMAP中重新命名这个图层。 输出被用默认的多变形符号绘制,你可以通过编辑缓冲点模型对填充的样式作修改。 设置访问工具箱为了发布My Server Tools工具箱到ArcGIS server, 你需要为ArcGIS Server设置访问包含这个工具箱的路径(E:/GPServerExample)。具体设置可以参考桌面帮助指南的"Giving ArcGIS Server access to folders"部分。 发布工具箱在ArcGIS中,个别工具是不能发布的,只有工具箱才能够发布到ArcGIS Server上。 在上面的步骤中,你创建和测试了一个缓冲点模型。 并且访问到这个文件夹如图6-13所示。
这个文件夹是通过UNC pathnames, //cogitator/GPServerExample来访问。要知道,目前对于要发布的工具来说有两个路径名称: E:/GPServerExample/MyServerTools [url=file:////cogitator/GPServerExample/MyServerTools]//cogitator/GPServerExample/MyServerTools[/url]
你可以在ArcToolbox中发布工具箱或在ArcCatalog中右击工具箱,选择Publish to ArcGIS Server来发布。 注: 当你发布的时候,你需要确认你发布的toolbox是用它的UNC路径名,而不是本地名,象下面所描述的一样。 在ArcCatalog中发布浏览到[url=file:////cogitator/GPServerExample]//cogitator/GPServerExample[/url] 右击MyServerTools,如图6-14所示:
注: 不要浏览到E:/GPServerExample然后在这里发布。如果你这样发布的话,那么ArcGIS Server将在本机上查找E:/GPServerExample而不是在你的机器上查找。 在ArcToolbox中发布在上面的步骤中我们使用UNC路径名在ArcCatalog中发布,实际上我们还可以把工具添加到ArcToolbox中,再发布: l右击My ServerTools,选择Remove
l右击ArcToolbox,选择Add Toolbox,浏览到//cogitator/GPServerExample ,添加MyServerTools. 一旦你用UNC路径名添加了工具箱,你就可以直接在ArcToolBox中通过鼠标右键直接发布这个工具箱了。 发布向导当完成上面步骤,开始发布工具箱时候,我们就可以通过发布的向导完成地理处理服务的发布。 这里不再详细说明向导的细节。 Server如何访问你的工具箱? 当你发布完了工具箱,ArcGIS Server将读工具箱的内容,并把工具箱的位置和工具的个别参数等信息内容保存。它并不把工具箱拷贝到服务器。当你停止,重启服务的时候,ArcGIS Server 重读工具箱,并且刷新这些信息。因此如果你修改了模型,你必须停止,并重启这个服务。 测试服务在上面的步骤中,服务名为DocExampleTools。添加这个ArcGIS服务,你只要在ArcToolbox中象添加其他工具箱一样的方法,添加这个服务就可以了。完成了添加服务以后,你也可以象其它工具一样来使用这个服务的工具。 在ArcMap,ArcCatalog中可以使用ArcGIS的地理处理服务,我们也可以在ArcGIS Explorer中来使用这个服务,如图6-15中Tasks所示。
具体ArcGIS Explorer如何使用地理处理服务,请参考ArcGIS Explorer的使用帮助。
|