同步异步说明:

gp服务分为同步和异步两种模式,两者的区别是:
同步:适合于快速的处理,数据量较小,本质区别在于同步模式,服务器处理之后,处理结果并不在服务器端保存,而是将结果发送至客户端,由客户端去显示。如果客户端也没有          保存结果,那么处理结果就丢失了。
异步:适合长时间的处理,数据量较大,本质区别在于异步模式,服务器处理之后,处理结果保存在服务器端,可以在arcgisjobs文件中找到。
所以Web客户端调用gp服务,要依据是哪种模式。以flex api为例,如果是同步模式,那么只能使用gp.execute(para);,得到的结果只能是executeResult;如果是异步,则只能使用gp.submitJob(para);,得到的结果只能使用gp.getResultData(evt.jobInfo.jobId,"Buffer_shp")去服务器端取结果,因为异步模式服务器端是保留了你的处理结果的。

同步调用方法

标签:

<esri:Geoprocessor id="gp" executeComplete="gp_executeCompleteHandler(event)"
fault="gp_faultHandler(event)"
outSpatialReference="{map.spatialReference}"
processSpatialReference="{map.spatialReference}"
useAMF="false"/>

调用:

               var geoArr:Array=[];
for each(var geo:Geometry in geoCollArray)
{
geoArr.push({geometry:geo});
} var fs:FeatureSet=new FeatureSet();
fs.features=geoArr;
var params:Object={"INPUT_FEATURESET":fs,"GHLAYER_PATH":"'"+dataList.selectedItem.path+"'"};
gp.url=configXML.gpurl.toString();
gp.execute(params);

结果

protected function gp_faultHandler(event:FaultEvent):void
{
Alert.show("空间分析异常,请联系管理员", "图形分析");
}
protected function gp_executeCompleteHandler(event:GeoprocessorEvent):void
{
var fs:FeatureSet=event.executeResult.results[0].value as FeatureSet;
controlEnabled=true;
showMessage("", false, false); ViewerContainer.getInstance().resultContainer.Container.removeAllElements();
resultComp=new GeometryAnalysisResultComp();
var areas:Array=GeometryUtil.geodesicAreas(geoCollArray,Units.SQUARE_METERS);
var area:Number=Number(areas[0]);
resultComp.initData={fs:fs,fields:fs.fields,groupfield:dataList.selectedItem.showField.toString(),geo:geoCollArray[0],zarea:area,url:configXML.saveAnalysis};
ViewerContainer.getInstance().resultContainer.Container.addElement(resultComp);
ViewerContainer.getInstance().resultContainer.showBottomNavi();
}

异步调用方法:

标签

<esri:Geoprocessor id="gp"
fault="gp_faultHandler(event)"
getResultDataComplete="gp_getResultDataCompleteHandler(event)"
jobComplete="gp_jobCompleteHandler(event)"
outSpatialReference="{myMap.spatialReference}"
proxyURL="https://developers.arcgis.com/sproxy/"
url="https://logistics.arcgis.com/arcgis/rest/services/World/ServiceAreas/GPServer/GenerateServiceAreas"/>

调用

  var featureSet:FeatureSet = new FeatureSet();
featureSet.features = [ graphic ];
var params:Object =
{
"Facilities": featureSet,
"Break_Values": "2",
"Break_Units": "Minutes"
};
gp.submitJob(params);

结果

 protected function gp_faultHandler(event:FaultEvent):void
{
Alert.show("This service request an ArcGIS Organizational subscription\nYou can also try the example on the ArcGIS API for Flex Resource Center"
+ event.fault.faultString, "Drive Time");
progressMessage.clearMessage();
} protected function gp_jobCompleteHandler(event:GeoprocessorEvent):void
{
if (event.jobInfo.jobStatus == JobInfo.STATUS_SUCCEEDED)
{
var jobID:String = event.jobInfo.jobId;
progressMessage.setMessage("Retrieving drive time");
gp.getResultData(gp.submitJobLastResult.jobId, "Service_Areas");
}
else
{
Alert.show(event.jobInfo.jobStatus, "Analysis Status");
}
} protected function gp_getResultDataCompleteHandler(event:GeoprocessorEvent):void
{
/* The parameterValue property is set when the type is getResultDataComplete,
* getInputComplete or getResultImageComplete.
*/
if (event.parameterValue)
{
progressMessage.showMessage("Calculating population within drive time", true);
var serviceAreas:FeatureSet = event.parameterValue.value as FeatureSet;
var feature:Graphic = serviceAreas.features[0];
var symbol:SimpleFillSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, 0xCA0013, 0.1);
symbol.outline = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, 0xB3B3B3, 1.0, 2);
feature.symbol = symbol;
myMap.defaultGraphicsLayer.add(feature);
query.geometry = feature.geometry;
queryTask.execute(query);
//Note: the zoomTo method was added at version 3.1
myMap.zoomTo(feature.geometry.extent);
}
else
{
Alert.show("Service did not return any results", "Drive Time");
gpPending = false;
}
}

转换:

fs->json字符串

saveWindow.fs=JSONUtil.encode(FeatureSet(initData.fs).toJSON())

json字符串- >fs

var fs:FeatureSet=FeatureSet.fromJSON(JSONUtil.decode(jsonObjTem[0].content));

flex 调用gp服务的更多相关文章

  1. ArcGIS API for Silverlight 调用GP服务绘制等值面

    原文:ArcGIS API for Silverlight 调用GP服务绘制等值面 GP服务模型如下图: 示例效果图片如下:

  2. ArcGIS API for Silverlight 调用GP服务加载等值线图层

    原文:ArcGIS API for Silverlight 调用GP服务加载等值线图层 第二篇.Silverlight客户端调用GP服务 利用ArcGIS API for Silverlight实现G ...

  3. ArcGIS API for Silverlight 调用GP服务准备---GP模型建立、发布、测试

    原文:ArcGIS API for Silverlight 调用GP服务准备---GP模型建立.发布.测试 第一篇.GP降雨量等值线建模.发布及测试 在水利.气象等行业中,要在WebGIS中实现空间分 ...

  4. ArcGIS Runtime SDK for Android开发之调用GP服务(异步调用)

    一.背景说明 通过调用GP服务,Android客户端也能实现专业的.复杂的GIS分析处理功能,从而增加应用的实用价值. ArcGIS Server发布的GP服务,分为同步和异步两种类型,一般执行步骤较 ...

  5. ArcGIS API for javascript开发笔记(六)——REST详解及如何使用REST API调用GP服务

    感谢一路走来默默支持和陪伴的你~~~ -------------------欢迎来访,拒绝转载-------------------- 一.Rest API基础 ArcGIS 平台提供了丰富的REST ...

  6. ArcGIS API for javascript开发笔记(五)——GP服务调用之GP模型的发布及使用详解

    感谢一路走来默默陪伴和支持的你~~~ ----------------欢迎来访,拒绝转载---------------- 关于GP模型的制作请点我! 一.GP发布 ArcGIS Desktop可以作为 ...

  7. ArcGIS Runtime for Android 使用异步GP服务绘制等值线

    关于基于Android上ArcGIS Server GP服务的调用,已经有前辈给出了很好的例子: http://blog.csdn.net/esrichinacd/article/details/92 ...

  8. (转)ArcGIS Runtime for Android 使用异步GP服务绘制等值线

    关于基于Android上ArcGIS Server GP服务的调用,已经有前辈给出了很好的例子: http://blog.csdn.net/esrichinacd/article/details/92 ...

  9. ArcGIS API for Silverlight 使用GP服务实现要素裁剪功能

    原文:ArcGIS API for Silverlight 使用GP服务实现要素裁剪功能 昨天一QQ好友问了一个关于裁剪的问题,感觉自己也没有帮上什么忙,之后自己做了一个裁剪的例子,不过在做这个例子的 ...

随机推荐

  1. CSRF verification failed. Request aborted.

    在使用Django提交Post表单时遇到如下错误: Forbidden (403) CSRF verification failed. Request aborted. 原因在"帮助&quo ...

  2. Android shape的使用(圆角矩形)

    <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http: ...

  3. Swift vs. Objective-C:未来看好 Swift 的十个理由

    Swift vs. Objective-C:未来看好 Swift 的十个理由 是时候使用易入手又全面的Swif语言为iOS和mac OS X做应用开发了. 虽然编程语言不会那么容易消逝,但坚持衰落范例 ...

  4. Python:安装mssql模块功能,并实现与sqlserver连接、查询

    由于我系统是x64系统,所以下载python2.7 x64.下载地址:https://www.python.org/downloads/release/python-2712/, 经过测试发现这个版本 ...

  5. linux 命令之 insmod

    man insmod: INSMOD(8) insmod INSMOD(8) NAME insmod - Simple program to insert a module into the Linu ...

  6. PostgreSQL数据库中跨库访问解决方案

    PostgreSQL跨库访问有3种方法:Schema,dblink,postgres_fdw. 方法A:在PG上建立不同SCHEMA,将数据和存储过程分别放到不同的schema上,经过权限管理后进行访 ...

  7. G面经prepare: BuyGoods

    给你一部分钱和一些不同价钱的商品,如何在最多买K件商品的情况下尽可能多的花掉手里的钱. 举例:口袋里的钱数: 10; K=2 产品价格: [3, 6, 8, 7, 9] 输出 3, 7 Backtra ...

  8. [原创]java WEB学习笔记49:文件上传基础,基于表单的文件上传,使用fileuoload 组件

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  9. Java基础(53):内部类(转)

    java中的内部类总结 内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类 如同一个人是由大脑.肢体.器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行 ...

  10. Java基础(2):Java中的四个跳转语句总结goto,break,continue,return

    跳转控制语句 Java中的goto是保留字,目前不能使用.虽然没有goto语句可以增强程序的安全性,但是也带来很多不便,比如说,我想在某个循环知道到某一步的时候就结束,现在就做不了这件事情.为了弥补这 ...