Silverlight 调用GP服务的总结
废话少说,直接说怎么实现吧。这里我们的目标是学会使用ArcGIS Server发布GP服务,并在客户端访问,这里我们发布一个绘制等值线的GP服务,和一个绘制等直面的GP服务(确切的说是插值的格栅图像)。下面就来看一下过程:
这里我把过程分为两个阶段:
第一篇是搭建GIS服务的过程。
第二篇是创建Silverlight应用,调用GP服务
第三篇是关于GP服务结果的获取应注意问题。
第一篇: 搭建GP服务
在开始之前想说的话:以下是本人在摸索GP服务时的一点总结,因为很多人问到,所以在此小小的总结一下。由于时间仓促,所以不是很详细,看不明白的可以留言,能解答的一定帮忙解答,如果有什么不对的也希望指出,相互学习,大家共同进步。
下面正式开始GP服务的内容:
主要从以下几个步骤来说,
1 .准备数据,建立GP服务的文件夹结构。具体怎么做后面会讲到。
2. 在MoudelBuilder中建立绘制等值线的GP模型,以及等直面的模型(插值模型)。
3. 针对于插值,由于结果是格栅图像,因此在客户端无法直接获取,这里还需要制作插值服务的地图文档,也就是说我们需要将GP服务发布成结果地图服务。发布GP服务的过程后面也会讲到。
4. 在发布完GP服务之后,我们最好需要测试一下,看看在ArcMap中验证是否成功。
以上是发布GP服务的简略过程,下面详细说明:
1. 准备数据
由于我们是想根据输入的点要素,然后进行等值线绘制以及插值等。所以我们需要设定输入要素的参数,比如说我们这里的点代表某一污染物的检测点,并有一个浓度属性,我们想根据这个浓度属性来绘制等值线,那么我们需要在GP输入参数中定义这个属性,也就是说在输入的点要素类中定义这个浓度属性。
这里我们在ArcMap中新建一个要素类 PollutionPoints,并添加一个浓度属性:PollutionC,该要素可以不包含任何的点,它只是提供我们GP服务输入参数的一个模版。
首先我们建立好一个GP服务的文件夹,以及地理数据库,用来存放我们模型数据。结构如下图所示:
我们来建立如上PolutionPoints要输类,右键Schema地理数据,选择新建,要素类。
点击下一步,选择坐标系,这里我们选择WebMecator坐标系(由于在之后Silverlight中采用的底图是WebMecator的,因此选择该坐标系,当然根据你自己的需要你可以选择其他的)。
接着点击下一步,一直到要素字段设置界面,这里我们自己添加一个字段:PolutionC,表示浓度值,类型为双精度。
字段设置好之后点击完成,这样我们的输入要输就构建好了。
2. 在ModelBuilder中建立模型,关于建模的知识,可以参考:http://help.arcgis.com/zh-cn/arcgisdesktop/10.0/help/index.html#//002w00000001000000
以下是绘制等值线的模型:
说明:
- 这里采用的是样条函数法进行插值,因为样条函数可以得到比较光滑的曲线
- 这里增加了要素转面,目的是去除没有闭合线要素,这里得到是一圈一圈的等值线。
- 以上进行了平滑操作,经过测试发现,效果不是很明显,当然如果你采用的是其他的插值比如克里金插值,那么还是会有效果的。
建模需要注意的问题:
a . 设定环境的工作空间,指定当前的工作空间为之前我们建立的Scratch文件夹。点击ArcMap 地理处理——环境
b. 设置模型中每一个工具输出参数的位置,并用 %scratchworkspace%\输出文件名 这样的格式。需要注意的是对于输出结果是要素类,输出文件名需要加上 .shp后缀 ,例如Contour.shp。
c. 设定模型参数,这里需要注意的是并不是所有的参数类型都可以作为GP服务的输入或者输出参数,以上模型中带有P表示的说明是模型参数。具体可参考:
http://help.arcgis.com/zh-cn/arcgisdesktop/10.0/help/index.html#/na/002v00000004000000/
这里我么将PollutionPoints要素类作为模型参数,但是需要注意的地方是,我们需要在输入模型参数中将其改为要素集,因为GP服务的输入参数不支持要素类。
d. 设置需要根据那一个属性值来插值,并进行等值线绘制。
关于等直面的模型比较简单:
这里没有做什么修改,最后输出就是一个矩形的格栅图像,如果想得到非矩形(例如和等值线一致,即椭圆形,或者和地图一致,需要进一步操作,用掩膜工具提取即可,这里不做演示)。
GP服务的模型设置好了,我们建模就告一段落了。接下来说一下如何发布GP服务。
3. 发布GP服务
模型建立好了之后我们需要发布我们的模型,也就是GP服务。关于等值线的模型,我们右键点击我们建立的绘制等值线的工具箱直接发布即可,而绘制等值面的要复杂一些,我们需要将其发布成结果地图服务。下面来说一下如何发布结果地图服务:
I. 和绘制等值线的过程一样,需要建立如上的等直面模型,以及相应的文件夹结构,设置环境工作空间,以及模型参数。
II. 新建一个地图文档,该地图文档将在之后被发布。
III.运行我们的等值面模型,绘制生成栅格的数据图像
这里我们使用一个图层作为要素来源,也可以自己手动添加,并输入PolutionC的值。得到栅格数据图像。
说明:默认生成的栅格图像是以 以分类 来显示的,有可能得到的图像不好看,这里我们右键TOC中生成右键新生成的栅格图层(即运行模型得到的结果):RasterData,
点击属性,选择符号系统。更改渲染的样式,这里我们可以选择拉伸方式,以便得到平滑渐变的渲染效果:
模型运行成功之后,我们需要手动的将绘制等值面的模型拖到TOC中,这时会自动的生成上一次运行模型时生成的结果,同样默认生成的栅格不是很好看,需要我们自己手动设置其符号系统。
最后TOC中的面板如下所示:
提醒:这里需要注意到图层的值,例如上述的值是 -0.115785 到66.2464,那么该工具就只能渲染该范围内的属性值,如果要素的浓度属性值大于66.2464,则按照最大值的颜色渲染,同样小于-0.115785时,则按照最小值的颜色渲染。
以上过程都成功之后,我们保存地图文档,接着就可以发布该地图文档了。
右键我们刚才保存的地图文档——发布到ArcGIS Server.接着如下图所示:
这里会默认选中Geoprocessing.表示地图文档包含了一个工具图层。点击下一步,完成发布。这样一个结果地图服务就算发布完毕。
一般来说,以上过程成功之后,我么的GIS服务是不会出现什么问题的,但也有可能因为我们各自计算机的配置原因,无法使用GIS服务,所以我们最好在ArcMap中验证一下是否成功,具体的做法是:
点击我们工具箱——右键ArcToolBox——添加工具箱,接着如下图所示,浏览到GIS服务器,打开之后,会发现我们刚才发布的GP服务:一个绘制等值线的工具箱,和一个绘制等直面的工具箱。
点击打开,就会添加到我们ArcMap的工具箱中。然后就像运行我们自带的工具箱一样,运行即可。如果得到正确的结果,说GP服务发布成功,如果有问题,则按照以上说明需要检查。在此不再讲述。
到此为止关于GP服务的搭建过程已经完毕。
下一篇将讲述如何使用Silverlight 调用这里的等值线服务和插值服务。
(版权所有,转载请标明出处)