概述:
在上一篇文章(Arcgis for js之GP实现缓冲区计算)介绍了Arcgis for js实现缓冲区计算,但是很多时候,我们不会用Arcgis的东西却想调用GP来实现对应的功能,怎么做呢,没错,本文将讲述如何通过ajax的方式去执行GP并返回结果。
思路:
按下F12打开谷歌的调试工具,切换到网络,再执行,可以看到GP执行时请求的url,如下:
在浏览器中分别打开1,2,3,可以开到各自的请求结果如下:
1、
{"jobId":"j75ee9938cd9b450fb76eb0f603040fbc","jobStatus":"esriJobSubmitted"}
2、
{"jobId":"j123084f770754cf6b76892d2fa44b80e","jobStatus":"esriJobSucceeded","results":{"output":{"paramUrl":"results/output"}},"inputs":{"input":{"paramUrl":"inputs/input"},"Distance__value_or_field_":{"paramUrl":"inputs/Distance__value_or_field_"}},"messages":[]}
3、
说明:
从2中,可以看到,编号为2的URL执行了三遍,在此,我个人的理解是2的请求有时候返回不了结果,所以一直请求,直到请求成功。
关键代码:
- vargpUrl='http://localhost:6080/arcgis/rest/services/erase/GPServer/erase';
说明:
这个GP服务是计算erase分析的,没有输入,即数据的参数已经定义好了,为两个shp文件,只是将计算的结果作为输出结果输出。
?
$("#calGP").on("click",function(){
- $.messager.progress({
- text:"计算中,请稍后..."
- });
- $.ajax({
- type:"POST",
- cache:false,
- url:gpUrl+"/submitJob?f=json",255); background-color:inherit">async:true,255); background-color:inherit">success:function(result){
- result=eval("("+result+")");
- varjobId=result.jobId;
- if(jobId){
- submitJob(jobId);
- }
- else{
- $.messager.progress('close');
- $.messager.alert("提示","计算失败!");
- }
- });
- });
说明:
url1请求成功后,返回的是一个jobid。
?
functionsubmitJob(jobId){
- $.ajax({
- "/jobs/"+jobId+"?f=json",255); font-weight:bold; background-color:inherit">function(result1){
- result1=eval("("+result1+")");
- if(result1.jobStatus==="esriJobSucceeded"){
- showResult(jobId);
- submitJob(jobId);
- }
请求不成功,在此提交请求,直到请求成功。
3、
- function
showResult(jobId){
"/results/erase_shp?f=json&returnType=data",255); font-weight:bold; background-color:inherit">function(result2){
result2=eval("("+result2+"计算完成!");
varfeatures=result2.value.features;
if(features.length>0){
for(vari=0,length=result2.length;i!=length;++i){
varfeature=features[i];
if(feature==undefined){
return;
varpolySymbolRed=newesri.symbol.SimpleFillSymbol();
polySymbolRed.setOutline(newesri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID,255); font-weight:bold; background-color:inherit">newdojo.Color([0,0.5]),1));
polySymbolRed.setColor(newdojo.Color([255,0.5]));
varg=newesri.Graphic(newesri.geometry.Polygon(feature.geometry),polySymbolRed,feature.attributes)
map.graphics.add(g);
}
转载自:http://www.52php.cn/article/p-mzkgcdgn-sk.html
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|