我们知道ArcGIS 以强大的空间分析而获得GISER的口碑(不仅仅如此),在桌面软件中已经有了800多个空间分析工具,并且这些空间分析工具可以根据我们的业务需要而组合使用,使得我们在工作中能够流程化的处理问题,为我们的工作带来了方便。
ArcGIS Server作为一个企业级的GIS平台,能够将我们的GIS资源作为服务发布出去,供客户端使用,在ArcGIS Server中有一种服务类型我们称之为地处理服务或者GP服务,该服务简单的说就是可以在Web端使用ArcGIS 提供的空间分析,而这些分析的能力是和桌面中的一样的。使用GP可以让我们用很少的代码就可以完成一个复杂的 *** 作。
在Web使用这些GP工具和桌面端使用这些工具,在功能上是一样的,但是在数据类型上就有限制了,比如我们在桌面端可以将要素类作为参数,但是Web端就不行,所以在10或者之前的版本中,我们发布的GP服务不能正常运行很多是因为参数类型导致,在这里我将这些参数类型对比下:
输入参数数据类型 | 在 ArcGIS Desktop 客户端上是否受支持? | 在 ArcGIS Explorer 客户端上是否受支持? | 在 Web 应用程序客户端上是否受支持? |
---|---|---|---|
要素集 | 是 | 是 | 是 |
记录集 | 是 | 是 | 是 |
要素类 | 否(但可通过要素集数据类型间接支持要素类输入。) | @H_404_143@否 | 否 |
表 | 否(但可通过记录集数据类型间接支持表输入。) | 否 | 否 |
栅格 | 是 | 否 | 否 |
标准类型(如长整型、双精度型、布尔型、日期型和字符串型)和线性单位(如“1000 米”) | 是 | 是 | 是 |
文件(如 .zip 或 .xml 文件) | 是 | 是 | 是 |
图层(任何类型的图层;如,要素图层、栅格图层和网络分析图层) | 仅支持在结果地图服务或源地图文档中找到的图层 | 仅支持在结果地图服务或源地图文档中找到的图层 | 仅支持在结果地图服务或源地图文档中找到的图层 |
输出参数:
在 ArcGIS Desktop 客户端上是否受支持? | 在 ArcGIS Explorer 客户端上是否受支持? | 在 Web 应用程序客户端上是否受支持? | |
---|---|---|---|
要素类 | 是 | 是 | 是 |
要素图层 | 是 | 是 | 是 |
栅格 | 是 | 否;只能使用结果地图服务显示 | 否;只能使用结果地图服务显示 |
栅格图层 | 是 | 否 | 否 |
地理数据集(除要素类或栅格外) | 否;只能使用结果地图服务显示 | 否;只能使用结果地图服务显示 | @H_566_404@否;只能使用结果地图服务显示 |
表 | 是 | 否(含有表数据类型作为输出参数的服务不会显示在可用任务列表中。) | 是 |
标准类型(如长整型、双精度型、布尔型、日期型和字符串型)和线性单位(如“1000 米”) | 是(在结果 窗口的服务结果中查看) | 是(在“任务结果”窗口中查看) | 是 |
文件 | 是 | 是 | 是 |
在10.1中发布GP服务已经不能像以前那样,建立一个模型然后右键share,地理处理服务的发布将由运行成功的地理处理工具结果产生。
创建一个地理处理的模型(计算缓冲区分析),模型如下图:
填写模型参数,细心的读者会发现这里有所变化(发现了没?):
模型运行结果:
填写工具的描述信息,如果不填写,那么发布服务的时候也会出错:
发布服务,在运行后的模型中,右键:
填写一些描述信息,如下,然后发布:
发布成功后会在Manager中看到。
在Silverlight中使用该服务,核心代码如下:
private voID _map_MouseClick(object sender,Map.MouseEventArgs e) { Featureset pFeature = new Featureset(); Graphic pGraphic = new Graphic(); pGraphic.Geometry = e.MapPoint; pFeature.Features.Add(pGraphic); pGraphicslayer2.Graphics.Add(pGraphic); List<GPParameter> parameters = new List<GPParameter>(); parameters.Add(new GPFeatureRecordSetLayer("input_Features",e.MapPoint)); parameters.Add(new GPDouble("distance__value_or_fIEld_",1000)); tStart2 = new TimeSpan(DateTime.Now.Ticks); pTask2.ExecuteAsync(parameters); } pTask2 = new Geoprocessor(); initGP(pTask2,"http://localhost:6080/arcgis/rest/services/MyBuff/GPServer/MyBuff"); voID initGP(Geoprocessor pGpro,string pUrl) { pGpro.Url = pUrl; pGpro.ExecuteCompleted += new System.EventHandler<GPExecuteCompleteEventArgs>(pTask_ExecuteCompleted); pGpro.Failed += new System.EventHandler<TaskFailedEventArgs>(pTask_Failed); // pGpro.OutputSpatialReference = MyMap2.SpatialReference; } voID pTask_Failed(object sender,TaskFailedEventArgs e) { return; } voID pTask_ExecuteCompleted(object sender,GPExecuteCompleteEventArgs e) { foreach (GPParameter gpParameter in e.Results.OutParameters) { if (gpParameter is GPFeatureRecordSetLayer) { GPFeatureRecordSetLayer gpLayer = gpParameter as GPFeatureRecordSetLayer; foreach (Graphic graphic in gpLayer.Featureset.Features) { graphic.Symbol = Layout.Resources["ResultsFillSymbol"] as Symbol; pGraphicslayer2.Graphics.Add(graphic); } } } }
运行结果:
总结:ArcGIS 10.1中GP的发布方式发生了变化,但是这种变化给我们带来了方便,我们可以将任何一个运行成功的工具进行发布,这样可以避免我们在输入和输出参数的时候发生困扰,只有GP运行成功才能发布,这也为我们模型的准确性做了保证。
总结以上是内存溢出为你收集整理的ArcGIS 10.1 让GP服务变得更简单全部内容,希望文章能够帮你解决ArcGIS 10.1 让GP服务变得更简单所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)