通过Ajax的方式执行GP服务

概述:

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

关键代码:

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);
                            }
                        }

                    }
                }
            });
        }

说明:

请求成功,将结果展示。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-09 02:07:02

通过Ajax的方式执行GP服务的相关文章

GP服务中无Tasks

发布GP服务,之后执行GP服务时,发现无Tasks,如下图所示 正常情况应该如下图 问题原因在于,arcmap与server版本不一致~~ (10.4.1arcmap 与 10.2.2 server) 之后使用10.2 arcmap向 10.2 server 发布GP服务,无问题了~

[Java][Android][Process] 暴力的服务可以解决一切,暴力的方式执行命令行语句

无论是在Java或者Android中执行命令行语句殊途同归都是创建一个子进程执行调用可执行文件执行命令,类似于Windows中的CMD一样. 此时你有两种方式执行:ProcessBuilder与Runtime:两种创建方式各有千秋,至于区别详见:[Java][Android][Process] ProcessBuilder与Runtime区别 在Android中创建子进程执行命令的时候有着一定的限制: 1.JVM提供的内存有限. 2.底层缓冲区间大小有限. 3.在高并发情况下容易造成阻塞. 基于

使用ajax和urlconnection方式调用webservice服务

<html> <head> <title>使用ajax方式调用webservice服务</title> <script> var xhr = new XMLHttpRequest(); function sendAjax(){ var url = "http://192.168.13.66:8080/hello";//webservice服务的地址 var requestBody = '<soapenv:Envelope

细说 Form (表单)- Ajax的方式

简单的表单,简单的处理方式 好了,让我们进入今天的主题,看看下面这个简单的HTML表单. <form action="Handler1.ashx" method="post" > <p>客户名称: <input type="text" name="CustomerName" style="width: 300px" /></p> <p>客户电话:

以Ajax的方式访问数据库

一:以Ajax的方式显示数据 我们都知道,如果用Ajax程序去加载一个动态页,则加载的实际上是这个动态页执行完毕后生成的静态HTML代码字符串. 1.以原有的格式显示数据 <?php header("Content-type: text/html; charset=gb2312"); include('conn.php'); $result=$conn->query("Select * From lyb limit 4 "); while($row=$r

利用ajax的方式来提交数据到后台数据库及交互功能

怎么样用ajax来提交数据到后台数据库,并完成交互呢????? 一.当我们在验证表单的时候,为了阻止把错误的也发送到服务器,我们通常这样设置:     $(function(){       var isusername;(定一个变量)        var ispwd;         $('form').submit(function(e){             if(!isusername || !ispwd){                 e.preventDefault();(

GP服务的调用(等值线面、泰森多边形、标注)

//获取并初始化等值线面图层 function getIsoAnalyzeResultLayer() { var layerId = "isoAnalyzeResult"; var graphicsLayerIsoAnalyze = map.getLayer(layerId); if (typeof (graphicsLayerIsoAnalyze) == "undefined" || graphicsLayerIsoAnalyze == null) { graph

jquery ajax请求方式与提示用户正在处理请稍等,等待数据返回时loading的显示

1.jquery ajax请求方式与提示用户正在处理请稍等 为了提高用户体验度,我们通常会给出 “正在处理,请稍等!”诸如此类的提示.我们可通过设置$.ajax()下的参数beforeSend()来实现 初次使用$.ajax() ,我没有去区分过ajax的异步请求和同步请求的不同,刚开始使用同步请求,以至后来出现许多问题,特别在体验度方面.异步和同步:同步意味着执行完一段程序才能执行下一段,它属于阻塞模式,其表现在网页上的现象是——浏览器会锁定页面(即所谓的页面假死状态),用户不能操作其它的,必

ArcGIS 10.1 发布使用ArcEngine自定义的GP服务

1. 新建立GP模型 在VS2010中新建一个普通的程序及,引入ArcEngine相关的dll.在该DLL中定义一个或多个GP类和一个GP工厂类.GP类要继承IGPFunction2接口,GP工厂类要继承IGPFunctionFactory接口. 下面是各个接口的一些实现方法 IGPFunction2 接口 接口意义 UID DialogCLSID { get; } 对话框的类标识,该方法在实现时直接返回为空即可. public UID DialogCLSID{ get{ return null