arcgis server 9.3.1 rest开发学习(三)

Posted: July 21st, 2010 | Author: laomi | Filed under: 开发日志 | Tags: , , | No Comments »

arcgis server geoprocessing中简单的介绍了一下geoprocessing service中的一些相关的概念,接下来主要是按照自己以前的经验编写两个例子,一个是buffer的例子,另外一个是计算点密度分析的。在这里主要是借助ModelBuilder和geoprocesssing来完成,最后自己的例子主要是采用javascript rest开发。

首先使用的是arcgis的modelbuilder创建一个model,关于model的创建方法以及相关的资料,可以访问以下资源:

首先我们来介绍一下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);

相关的实现代码下载地址,model下载地址

关于第二个例子基本上差不多,但是在这里节点中多了一个loadfromfile,这个节点的功能就是从一个csv文件中读取经纬度坐标,然后直接生成shape文件,相关的代码是用python编写的,相关的代码在附件中有下载。

在这里需要解释得地方是,由于point density节点生成的是一个浮点型的栅格图片(tif格式),而raster to polygon工具的输入是一个整型的栅格图片,所以需要经过一步将浮点型饿栅格图片转换为整型的栅格图片。

csv读取经纬度生成shape文件代码model文件

Share and Enjoy:
  • Sphinn
  • Mixx
  • Google Bookmarks
  • Twitter
  • del.icio.us
  • Digg
  • Diigo
  • MSN Reporter
  • Yahoo! Buzz


Leave a Reply

  • Powered by WP Hashcash