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

ArcGIS API for Android 案例教程 13

2011-02-22 11:49 507 查看

地理处理服务






图 31 调用GP服务的ViewShed例子
ArcGIS Android API中演示GP服务的调用是一个很有意思的例子(ViewShed),这个例子让用户在屏幕上画一个点,再通过左上角那个执行的按钮发送一个调用GP服务的请求,当这个GP服务被调用成功后,返回给客户端的是一些多边形,这些多边形表示的是如果有人站在刚才用户画点的位置所能看到的区域。
现在,如果你打开这个例子的源代码,你应该可以很容易地从左上角那个“go”按钮的事件监听中找到这个GP服务的调用方法:
GPFeatureRecordSetLayer gpf = new GPFeatureRecordSetLayer(
"Input_Observation_Point");
gpf.setSpatialReference(map.getSpatialReference());
gpf.setGeometryType("esriGeometryPoint");
Graphic f = new Graphic();
f.setGeometry(mappoint);
gpf.addGraphic(f);
GPLinearUnit gpl = new GPLinearUnit("Viewshed_Distance");
gpl.setUnits("esriMeters");
gpl.setDistance(8046.72);
params = new ArrayList();
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();
}
在上面的代码中,主要做了两件事情:第一件事情是准备GP服务执行所需要的参数ArrayList;另一件事情就是开始调用GP服务。在这个例子里,对GP服务的调用还进行了一个封装,而事实上核心的代码可以从下面代码中的高亮部分看到(代码略有修改):
class ViewShedQuery extends
AsyncTask, Void, GPParameter[]> {
GPParameter[] outParams = null;
@Override
protected void onPostExecute(GPParameter[] result) {

}
@Override
protected GPParameter[] doInBackground(
ArrayList... params1) {
gp = new GeoProcessor("http://sampleserver1.arcgisonline.com/ArcGIS
/rest/services/Elevation/ESRI_Elevation_World/GPServer/Viewshed");
gp.setOutSR(map.getSpatialReference().getID());
try {
GPResultResource gprr = gp.execute(params1[0]);
outParams = gprr.getOutputParameters();
} catch (Exception e) {
e.printStackTrace();
}
return outParams;
}
很显然,这个GP服务是一个同步执行的服务,因此,在这里调用的是GeoProcessor对象的execute方法。如果是一个异步执行的GP服务,那么想来应该是执行GeoProcessor的submitJob方法,有兴趣的可以自己再尝试一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: