您的位置:首页 > 移动开发 > Android开发

ArcGIS for Android示例解析之GP服务调用-----ViewShed

2012-03-12 10:54 531 查看

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服务,有兴趣的可以查看相关帮助文档。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: