博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过Ajax的方式执行GP服务
阅读量:4677 次
发布时间:2019-06-09

本文共 3838 字,大约阅读时间需要 12 分钟。

概述:

在上一篇文章()介绍了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的请求有时候返回不了结果,所以一直请求,直到请求成功。

关键代码:

var gpUrl = 'http://localhost:6080/arcgis/rest/services/erase/GPServer/erase';

说明:

这个GP服务是计算erase分析的,没有输入,即数据的参数已经定义好了,为两个shp文件,只是将计算的结果作为输出结果输出。

1、

$("#calGP").on("click",function(){                        $.messager.progress({                            text:"计算中,请稍后..."                        });                        $.ajax({                            type: "POST",                            cache: false,                            url: gpUrl+"/submitJob?f=json",                            async: true,                            success: function (result) {                                result = eval("("+result+")");                                var jobId = result.jobId;                                if(jobId){                                    submitJob(jobId);                                }                                else{                                    $.messager.progress('close');                                    $.messager.alert("提示","计算失败!");                                }                            }                        });                    });
说明:

url1请求成功后,返回的是一个jobid。

2、

function submitJob(jobId){            $.ajax({                type: "POST",                cache: false,                url: gpUrl+"/jobs/"+jobId+"?f=json",                async: true,                success: function (result1) {                    result1 = eval("("+result1+")");                    if(result1.jobStatus==="esriJobSucceeded"){                        showResult(jobId);                    }                    else{                        submitJob(jobId);                    }                }            });        }
说明:

请求不成功,在此提交请求,直到请求成功。

3、

function showResult(jobId){            $.ajax({                type: "POST",                cache: false,                url: gpUrl + "/jobs/" + jobId + "/results/erase_shp?f=json&returnType=data",                async: true,                success: function (result2) {                    result2 = eval("(" + result2 + ")");                    $.messager.progress('close');                    $.messager.alert("提示", "计算完成!");                    var features = result2.value.features;                    if (features.length > 0) {                        for (var i = 0, length = result2.length; i != length; ++i) {                            var feature = features[i];                            if(feature==undefined){                                return;                            }                            else {                                var polySymbolRed = new esri.symbol.SimpleFillSymbol();                                polySymbolRed.setOutline(new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([0, 0, 0, 0.5]), 1));                                polySymbolRed.setColor(new dojo.Color([255, 0, 0, 0.5]));                                var g = new esri.Graphic(new esri.geometry.Polygon(feature.geometry), polySymbolRed, feature.attributes)                                map.graphics.add(g);                            }                        }                    }                }            });        }
说明:

请求成功,将结果展示。

转载于:https://www.cnblogs.com/lzugis/p/6539802.html

你可能感兴趣的文章
★不评价别人的生活,是一个人最基本的修养
查看>>
centos 7 下vnc弹出窗口太小解决方法
查看>>
SpringCloud Feign的分析
查看>>
使用MD5WithRSA来签名和验签(.NET)
查看>>
异常:This application has no explicit mapping for /error, so you are seeing this as a fallback.
查看>>
使用gifplayer操作gif的方法
查看>>
利用SOAtest建立自动化测试验证网站是否成功加载
查看>>
一些鲜为人知却非常实用的数据结构 - Haippy
查看>>
【C#】C#线程_I/O限制的异步操作
查看>>
Flask-SQLAlchemy
查看>>
kettle参数、变量详细讲解[转]
查看>>
C# - Generics
查看>>
.NET LINQ 转换数据类型
查看>>
[LGP2791] 幼儿园篮球题
查看>>
170. Two Sum III - Data structure design
查看>>
os & sys
查看>>
Shell 常用命令总结
查看>>
vector
查看>>
杨辉三角
查看>>
用分布式缓存提升ASP.NET Core性能
查看>>