arcgis server 9.3.1 rest开发学习(三)
Posted: July 21st, 2010 | Author: laomi | Filed under: 开发日志 | Tags: arcgis, 空间数据挖掘, geoprocessing | No Comments »arcgis server geoprocessing中简单的介绍了一下geoprocessing service中的一些相关的概念,接下来主要是按照自己以前的经验编写两个例子,一个是buffer的例子,另外一个是计算点密度分析的。在这里主要是借助ModelBuilder和geoprocesssing来完成,最后自己的例子主要是采用javascript rest开发。
首先使用的是arcgis的modelbuilder创建一个model,关于model的创建方法以及相关的资料,可以访问以下资源:
- an overview of geoprocessing:http://webhelp.esri.com/arcgisdesktop/9.3/index.cfm?TopicName=What_is_geoprocessing?
- guide to create a model in arcgis model builder :http://webhelp.esri.com/arcgisdesktop/9.3/tutorials/gp/GP_4_6.htm
- an overview of writing geoprocessing script:http://webhelp.esri.com/arcgisdesktop/9.3/index.cfm?TopicName=An_overview_of_writing_geoprocessing_scripts . And there are many sample wrote by python.
- an overview of geoprocessing with arcgis server :http://webhelp.esri.com/arcgisdesktop/9.3/index.cfm?TopicName=An_overview_of_geoprocessing_with_ArcGIS_Server
首先我们来介绍一下buffer的例子,该例子的效果是当你用鼠标在地图上点击时,然后再地图上就会创建一个缓冲区,该缓冲区的大小是可以限制的。关于缓冲区的模型的建立实际上只要将arcgis arctoolbox 中analysis tools—>proximity–>buffer拖拽到model builder中,然后设置输入、输出参数(如下图所示,其中p就是已经设置了参数,可以很据箭头的方式来判断输入输出参数,其实这个是在创建一个toolbox中已经设计好的)。下图是一个已经完全建立好的model,剩下来只要将这个model发布成一个geoprocessing service就行了。
发布成geoprocessing service的时候,有两种选择,一种方式发布成同步的方式,另外一种方式是发布成异步的方式(这两种方式的主要区别的是:前一种方式是用户提交了geoprocessing service请求之后,只有完成了计算之后才可以进行其他操作;另外一种方式用户提交了请求之后,可以进行其他的操作,geoprocessing service 完成之后,将相关的结果显示出来 )。在这里我们采取的选择的方式同步的方式进行发布geoprocessing service。采用同步的调用代码解析如下:
gp = new esri.tasks.Geoprocessor(“http://192.168.1.200:8399/arcgis/rest/services/buffera/GPServer/bufferpoint”);
首先创建一个geoprocessor,里面的url地址就是geoprocessing service的地址,然后在地图上标记一个点,最后调用geoprocessing service服务,这里面主要是设置输入和输出参数。
var featureSet = new esri.tasks.FeatureSet();
featureSet.features = features;
var vsDistance = new esri.tasks.LinearUnit();
vsDistance.distance = 5;
vsDistance.units = “esriMiles”;
var params = { “PointBuffer”:featureSet, “BufferDistance”:vsDistance };//drawViewshed 返回结果,并将结果渲染到客户端
gp.execute(params, drawViewshed);//如果采用的是异步方式的话,就采用下面的方法
//gp.submitJob(params,completeCallback,statusCallback);
关于第二个例子基本上差不多,但是在这里节点中多了一个loadfromfile,这个节点的功能就是从一个csv文件中读取经纬度坐标,然后直接生成shape文件,相关的代码是用python编写的,相关的代码在附件中有下载。
在这里需要解释得地方是,由于point density节点生成的是一个浮点型的栅格图片(tif格式),而raster to polygon工具的输入是一个整型的栅格图片,所以需要经过一步将浮点型饿栅格图片转换为整型的栅格图片。










Leave a Reply