ViewShed

此示例展示的是如何运用一个GP服务获取所需的结果,下面我们来看一下如何使用一个GP服务,代码如下:

public void start(Point mappoint) {

// 第一个参数设定一个监测点

GPFeatureRecordSetLayer gpf = new GPFeatureRecordSetLayer("Input_Observation_Point");

gpf.setSpatialReference(map.getSpatialReference());

gpf.setGeometryType(Geometry.Type.Point);

// Add the point selected by the user

Graphic f = new Graphic(mappoint,new SimpleMarkerSymbol(Color.RED,25,STYLE.DIAMOND));

gpf.addGraphic(f);

// 第二个参数,设置可视区域

GPLinearUnit gpl = new GPLinearUnit("Viewshed_Distance");

gpl.setUnits("esriMeters");

gpl.setDistance(8046.72);

// Add params

params = new ArrayList<GPParameter>();

params.add(gpf);

params.add(gpl);

try {

dialog = ProgressDialog.show(Viewshed.this, "", "Loading. Please wait...", true, true);

new ViewShedQuery().execute(params);

cancelViewShed = new Timer();

cancelViewShed.schedule(new TimerTask() {

@Override

public void run() {

uiHandler.sendEmptyMessage(CANCEL_LOADING_WINDOW);

}

}, 60000);

} catch (Exception e) {

e.printStackTrace();

}

}

上面代码中我们可以看出在start()中我们主要是构造GP服务所需要的参数,将参数传给Geoprocessor对象进行操作,执行Geoprocessor对象的execute()方法,返回所需的结果对象GPResultResource并且调用它的getOutputParameters()返回GPParameter数组对象,在GPParameter装有GP服务处理后所需的要素集,此时我们可以遍历GPGarameter数组提取要素进行渲染,具体代码如下:

class ViewShedQuery extends AsyncTask<ArrayList<GPParameter>, Void, GPParameter[]> {

GPParameter[] outParams = null;

@Override

protected void onPostExecute(GPParameter[] result) {

if (outParams == null)

return;

for (int i = 0; i < outParams.length; i++) {

if (outParams[i] instanceof GPFeatureRecordSetLayer) {

GPFeatureRecordSetLayer fsl = (GPFeatureRecordSetLayer) outParams[i];

for (Graphic feature : fsl.getGraphics()) {

Graphic g = new Graphic(feature.getGeometry(),new SimpleFillSymbol(Color.CYAN));

gLayer.addGraphic(g);

}

}

}

uiHandler.sendEmptyMessage(CLOSE_LOADING_WINDOW);

}

@Override

protected GPParameter[] doInBackground(ArrayList<GPParameter>... params1) {

gp = new Geoprocessor("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/GPServer/Viewshed");

gp.setOutSR(map.getSpatialReference().getID());

try {

GPResultResource rr = gp.execute(params1[0]);

outParams = rr.getOutputParameters();

} catch (Exception e) {

e.printStackTrace();

}

return outParams;

}

}

通过代码我们可以看出,编写一个GP服务示例不是很麻烦,麻烦的地方是如何构建一个所需的服务,精华之处都在于GP服务的搭建中,在此不过多介绍怎样发布GP服务,有兴趣的可以查看相关帮助文档。

更多相关文章

  1. Android(安卓)友盟简单快速集成
  2. Android(安卓)day_11-2 (服务)
  3. Android(安卓)service跨进程调用和启动检查
  4. 自定义控件二: Paint Canvar 画几何图形
  5. Inflater与findViewById()区别
  6. 利用Android画圆弧canvas.drawArc()实例详解
  7. Android(安卓)binder机制(native服务篇)
  8. (20120731)android面试总结(002)
  9. Android(安卓)圆形图圆形ImageView

随机推荐

  1. Android小程序实现个人信息管理系统
  2. Android小項目之---ListView实现论坛管理
  3. [原]Android打包之Gradle打包
  4. eclipse3.7 INDIGO安装adt 缺少条目时的
  5. 如何构建Android 1.5系统映像
  6. 高通增大分区以及烧录失败解决
  7. 如何调试 Android 上 HTTP(S) 流量
  8. (三)Android官方MVVM框架实现组件化之Dat
  9. Android之ViewFlipper的用法
  10. Android(安卓)HandlerThread详解