通过Ajax的方式执行GP服务
2015-11-20 09:37
375 查看
概述:
在上一篇文章(Arcgis for js之GP实现缓冲区计算)介绍了Arcgis for js实现缓冲区计算,但是很多时候,我们不会用Arcgis的东西却想调用GP来实现对应的功能,怎么做呢,没错,本文将讲述如何通过ajax的方式去执行GP并返回结果。
思路:
按下F12打开谷歌的调试工具,切换到网络,再执行,可以看到GP执行时请求的url,如下:
在浏览器中分别打开1,2,3,可以开到各自的请求结果如下:
1、
2、
3、
说明:
从2中,可以看到,编号为2的URL执行了三遍,在此,我个人的理解是2的请求有时候返回不了结果,所以一直请求,直到请求成功。
关键代码:
[javascript] view
plaincopyprint?
var gpUrl = 'http://localhost:6080/arcgis/rest/services/erase/GPServer/erase';
说明:
这个GP服务是计算erase分析的,没有输入,即数据的参数已经定义好了,为两个shp文件,只是将计算的结果作为输出结果输出。
1、
[javascript] view
plaincopyprint?
$("#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、
[javascript] view
plaincopyprint?
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、
[javascript] view
plaincopyprint?
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);
}
}
}
}
});
}
转载自:http://blog.csdn.net/gisshixisheng/article/details/49922677
在上一篇文章(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的请求有时候返回不了结果,所以一直请求,直到请求成功。
关键代码:
[javascript] view
plaincopyprint?
var gpUrl = 'http://localhost:6080/arcgis/rest/services/erase/GPServer/erase';
说明:
这个GP服务是计算erase分析的,没有输入,即数据的参数已经定义好了,为两个shp文件,只是将计算的结果作为输出结果输出。
1、
[javascript] view
plaincopyprint?
$("#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、
[javascript] view
plaincopyprint?
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、
[javascript] view
plaincopyprint?
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);
}
}
}
}
});
}
转载自:http://blog.csdn.net/gisshixisheng/article/details/49922677
相关文章推荐
- 15天玩转redis —— 第六篇 有序集合类型
- http://bbs.chinaunix.net/thread-169061-1-1.html
- [连载]《C#通讯(串口和网络)框架的设计与实现》-1.通讯框架介绍
- excel文件(xls)批量导入sqlserver数据库
- Linux服务器部署web项目的步骤和方法
- 最新版vmWare的安装后如何新建虚拟机
- Scala 语法 Case Class和模式匹配
- Linux_用户权限管理
- SQL Update 存在则更新,不存在则插入
- 英特尔投资部宣布增投10家新创公司,他们都有哪些能耐?---ESM
- Opencv3.0中Mat与IplImage的转换
- S7-200作为MODBUS从站,手册上没说的那些事:
- c# process 获取进程退出码
- 大端法、小端法、网络字节序 转
- linux命令-网络相关
- 深度学习:实际问题解决指南
- HDU-2036-改革春风吹满地
- Android开发中经常用到的工具
- Java遍历文件夹&读取指定格式的文件zUI金
- windbg分析64位机上32位程序的dump文件