通过Ajax的方式执行GP服务

原创 2015年11月19日 07:42:28

概述:

在上一篇文章(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);
                            }
                        }

                    }
                }
            });
        }

说明:

请求成功,将结果展示。





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

ArcGIS GP服务发布和客户端调用

GP服务是个非常有用的工具,
  • u010176013
  • u010176013
  • 2014年09月29日 20:59
  • 1270

JavaScript 调用发布的GP服务

JavaScript 调用发布的GP服务--以IDW为例
  • u010534192
  • u010534192
  • 2016年11月23日 20:05
  • 388

调用GP服务

实现DEM提取等高线然后裁剪再在网页显示。 首先,建立适当的Model,将Toolboxd的工具拖入model中选择合适的变量,如图 发布好GP服务和地图服务。 点击后实现了提取等高线后裁剪的功...
  • xiongxiongdeBear
  • xiongxiongdeBear
  • 2015年07月20日 21:29
  • 689

学习笔记之ArcGIS Engine调用自定义GP服务(亲测!!!)(一)

我在ArcGIS程序中调用GP服务遇到了很多问题,今天有空就总结一下。本人用来两种方式实现了GP服务的调用下面就说一下: 第一种方式:添加GP服务引用 在之前的文档中也有说明http://blog.c...
  • u011009362
  • u011009362
  • 2015年08月27日 18:26
  • 1603

Silverlight调用GP服务第二篇之调用GP服务(Geoprocessing Service)过程详解

Silverlight调用GP服务详解 上一篇主要讲了如何发布GP服来绘制等值线及等直面,这里主要将如何通过Silverlight来调用GP服务。 这里先写一下具体的调用过程: 声明GP服务...
  • huyanliang
  • huyanliang
  • 2013年09月05日 09:06
  • 1926

基于ArcGIS API For JavaScript调用GP服务实现动态插值分析实现

最近由于在项目中要实现动态插值分析,于是通过在网上大量查阅,借鉴前辈们的工作经验并结合自己对ArcMap中插值工具的使用理解, 捣鼓出了基于ArcGIS API For JavaScript...
  • zhoutaotao0509
  • zhoutaotao0509
  • 2016年08月28日 17:08
  • 1809

arcgis api for js入门开发系列十四 GP服务一框架介绍

对于很多初学者来说,GP服务是一个难点,也是一个重点。GP的全称是Geoprocessing,可以对原有的功能进行扩充,可以说只要在桌面实现的事情,在Server都可以做到。 我们首先看一下,G...
  • sinat_34719507
  • sinat_34719507
  • 2017年03月03日 02:27
  • 350

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

第二篇、Silverlight客户端调用GP服务         利用ArcGIS API for Silverlight实现GP服务调用,这里的雨量数据是通过一个WebService获取而来,主要信...
  • taomanman
  • taomanman
  • 2012年09月03日 14:41
  • 8685

学习笔记之ArcGIS Engine调用自定义GP服务(二)

上一篇介绍了使用添加引用的方法调用GP服务,但是存在一个缺陷,工具引用使用的是绝对路径,在程序打包的时候就会出现问题,这也是困扰我很久的问题,后来通过利用相对路径的方法,调用GP服务,打包之后可以在其...
  • sinat_32349327
  • sinat_32349327
  • 2016年10月10日 13:22
  • 835

ArcGIS API for JavaScript开发笔记(二)GP服务REST调用

在上一节(GP模型创建及服务发布)中,用一个简单的例子介绍了GP模型的制作及GP服务的发布,接下来讨论如何对发布的服务进行REST调用。REST,Representational State Tran...
  • destinyuan
  • destinyuan
  • 2016年03月08日 20:18
  • 1704
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通过Ajax的方式执行GP服务
举报原因:
原因补充:

(最多只允许输入30个字)