一、引言

GP服务是为了弥补arcgis api的不足,提供用户自定义接口,有点类似SOE的开发,但是对编程能力要求不是很高,只需要在arcmap中创建模型发布就可以实现。

GP服务主要分为两种:一、返回矢量数据;二、返回栅格数据。

二、GP服务发布

1、模型创建

  • 在arcmap目录中添加工具箱创建模型

  • 将模型改为下面的英文,建议参数都用英文

  • 将input参数(点图层)参数数据类型改为featureset

  • 在空白处右击,设置工作空间

  • 运行模型,输入要求的参数

  • 得到结果

2、服务发布

  • 在arcmap的treeview中找到

  • 右击,选择share as——geoprogressing service
  • 下面步骤跟普通的地图服务发布差不多,直接掠过
  • 最后发布参数设置

这个参数是设置gp处理同步异步的设置,要注意,因为后面js调用会有不同

上面的是参数名,下面的意思是用户自己输入

  • 发布GP服务查看

三、GP服务在arcgsi js中的使用

1、同步服务

  • 代码
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title>GP</title><link  rel="stylesheet"  type="text/css" href="http://localhost/arcgis_js_api/library/3.17/3.17/dijit/themes/tundra/tundra.css"/><link  rel="stylesheet"  type="text/css" href="http://localhost/arcgis_js_api/library/3.17/3.17/esri/css/esri.css" /><script  type="text/Javascript" src="http://localhost/arcgis_js_api/library/3.17/3.17/init.js"></script><style type="text/css">.MapClass{width:100%;height:600px;border:1px solid #000;}</style><script type="text/javascript" charset="utf-8">require(["esri/map","esri/layers/ArcGISDynamicMapServiceLayer","dojo/dom","esri/tasks/Geoprocessor","esri/tasks/FeatureSet","esri/symbols/SimpleMarkerSymbol","esri/symbols/SimpleLineSymbol","esri/toolbars/draw","esri/symbols/SimpleFillSymbol","dojo/on","esri/graphic","esri/tasks/LinearUnit","dojo/domReady!"],function (Map,ArcGISDynamicMapServiceLayer,dom,Geoprocessor,FeatureSet,SimpleMarkerSymbol,SimpleLineSymbol,Draw,SimpleFillSymbol,on,Graphic,LinearUnit) {var MyMap = new Map("MyMapDiv");var layer = new ArcGISDynamicMapServiceLayer("http://localhost:6080/arcgis/rest/services/mynerwork/MapServer");MyMap.addLayer(layer);//定义点几何对象var pointSet = new FeatureSet();var psymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CROSS, 12,new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,new dojo.Color([255, 0, 0]), 2),new dojo.Color([0, 255, 0, 0.25]));on(dom.byId("Btn"),"click",function(e){//定义绘图对象var toolBar= new Draw(MyMap, { showTooltips: true });//激活绘图对象toolBar.activate(Draw.POINT);on(toolBar, "draw-complete", function(result){//获得绘图结束的点对象var geometry = result.geometry;//根据点对象生成相应的图形var graphic = new Graphic(geometry,psymbol);//将点对象存储在点几何中pointSet.features.push(graphic);//将图形存放在地图中,然后得以显示MyMap.graphics.add(graphic);});});on(dom.byId("buffer"),"click",function(e){//定义GP服务对象var gp = new Geoprocessor("http://localhost:6080/arcgis/rest/services/gp/buffer1/GPServer/Mybuffer");//构建GP服务参数var gpParams={};//添加fields字段,为了和后台服务字段匹配pointSet.fields=[];//GP服务的Input参数gpParams.Input=pointSet;//GP服务的dis参数var dis=new LinearUnit({"distance": 1,"units": "esriDecimalDegrees"});gpParams.dis=dis;//执行GP服务gp.execute(gpParams, showResult);});function showResult(results, messages){var features = results[0].value.features;for (var i = 0; i < features.length; i++) {var graphic = features[i];//定义线符号var lineSymbol=new SimpleLineSymbol(SimpleLineSymbol.STYLE_DASHDOT, new dojo.Color([255, 0, 0]), 1);//定义面符号var PolygonSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, lineSymbol, new dojo.Color([255, 255, 0, 0.25]));//设置面符号graphic.setSymbol(PolygonSymbol);MyMap.graphics.add(graphic);}}});</script>
</head>
<body>
<div id="MyMapDiv" class="MapClass"></div>
<input id="Btn" type="button" value="画点" />
<input id="buffer" type="button" value="缓冲区分析" />
</body>
</html>
  • 效果图

2、异步服务

上面的是同步操作,gp服务调用的是execute函数,异步的时候调用的是submit函数,同时需要getresult进行获取矢量或者栅格数据,需要特别注意==

代码

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title>GP</title><link  rel="stylesheet"  type="text/css" href="http://localhost/arcgis_js_api/library/3.17/3.17/dijit/themes/tundra/tundra.css"/><link  rel="stylesheet"  type="text/css" href="http://localhost/arcgis_js_api/library/3.17/3.17/esri/css/esri.css" /><script  type="text/Javascript" src="http://localhost/arcgis_js_api/library/3.17/3.17/init.js"></script><style type="text/css">.MapClass{width:100%;height:600px;border:1px solid #000;}</style><script type="text/javascript" charset="utf-8">require(["esri/map","esri/layers/ArcGISDynamicMapServiceLayer","dojo/dom","esri/tasks/Geoprocessor","esri/tasks/FeatureSet","esri/symbols/SimpleMarkerSymbol","esri/symbols/SimpleLineSymbol","esri/toolbars/draw","esri/symbols/SimpleFillSymbol","dojo/on","esri/graphic","esri/tasks/LinearUnit","dojo/domReady!"],function (Map,ArcGISDynamicMapServiceLayer,dom,Geoprocessor,FeatureSet,SimpleMarkerSymbol,SimpleLineSymbol,Draw,SimpleFillSymbol,on,Graphic,LinearUnit) {var MyMap = new Map("MyMapDiv");var layer = new ArcGISDynamicMapServiceLayer("http://localhost:6080/arcgis/rest/services/mynerwork/MapServer");var gp = new Geoprocessor("http://localhost:6080/arcgis/rest/services/gp/buffer2/GPServer/Mybuffer");MyMap.addLayer(layer);//定义点几何对象var pointSet = new FeatureSet();var psymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CROSS, 12,new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,new dojo.Color([255, 0, 0]), 2),new dojo.Color([0, 255, 0, 0.25]));on(dom.byId("Btn"),"click",function(e){//定义绘图对象var toolBar= new Draw(MyMap, { showTooltips: true });//激活绘图对象toolBar.activate(Draw.POINT);on(toolBar, "draw-complete", function(result){//获得绘图结束的点对象var geometry = result.geometry;//根据点对象生成相应的图形var graphic = new Graphic(geometry,psymbol);//将点对象存储在点几何中pointSet.features.push(graphic);//将图形存放在地图中,然后得以显示MyMap.graphics.add(graphic);});});on(dom.byId("buffer"),"click",function(e){//定义GP服务对象//构建GP服务参数var gpParams={};//添加fields字段,为了和后台服务字段匹配pointSet.fields=[];//GP服务的Input参数gpParams.Input=pointSet;//GP服务的dis参数var dis=new LinearUnit({"distance": 1,"units": "esriDecimalDegrees"});gpParams.dis=dis;//执行GP服务gp.submitJob(gpParams, jobResult);});function jobResult(result) {var jobId = result.jobId;var status = result.jobStatus;if(status === esri.tasks.JobInfo.STATUS_SUCCEEDED) {//成功之后,将其中的结果取出来,当然这也是参数名字。//在模型中,想要取出中间结果,需要设置为模型参数gp.getResultData(jobId, "out", showResult);}}function showResult(results, messages){var features = results.value.features;var ff=results.results;for (var i = 0; i < features.length; i++) {var graphic = features[i];//定义线符号var lineSymbol=new SimpleLineSymbol(SimpleLineSymbol.STYLE_DASHDOT, new dojo.Color([255, 0, 0]), 1);//定义面符号var PolygonSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, lineSymbol, new dojo.Color([255, 255, 0, 0.25]));//设置面符号graphic.setSymbol(PolygonSymbol);MyMap.graphics.add(graphic);}}});</script>
</head>
<body>
<div id="MyMapDiv" class="MapClass"></div>
<input id="Btn" type="button" value="画点" />
<input id="buffer" type="button" value="缓冲区分析" />
</body>
</html>

四、总结

  • GP服务介绍
  • GP服务发布
  • GP同步服务与异步服务在js中的使用

Arcgis javascript那些事儿(十六)——GP服务的发布与使用相关推荐

  1. Arcgis Javascript那些事儿(六)--arcgis js API本地环境配置

    最近又重新搞起arcgis javascript开发,配置环境时总结了下原来的问题: 以前在webstorm中添加一个API,用来平时在webstorm中调试,然后在自己电脑iis中再配置一个API, ...

  2. Arcgis Javascript那些事儿(十一)--网络分析服务使用

    上一篇文章写了如何使用arcmap发布网络分析服务,发布的最后就是使用,下面就讲讲网络分析服务在arcgis javascript中的使用. 网络分析服务包括:最优路径分析,最近设施点分析,服务区分析 ...

  3. SAP UI5 初学者教程之二十六 - OData 服务配合 Mock 服务器的使用步骤详解试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 初学者教程之一:Hello World SAP UI5 初学者教程之二:SAP UI5 ...

  4. JavaScript学习(十六)—实现购物车加减数量,计算总金额

    JavaScript学习(十六)-实现购物车加减数量,计算总金额 代码如下: <table border="2" cellspacing="0" soli ...

  5. Arcgis javascript那些事儿(二十)——dojo中djconfig配置、dojo与requirejs项目冲突

    一.引言 由于项目一部分使用requirejs另一部分地图是用dojo开发(因为arcgis javascript使用的dojo),两个要和到一起,所以要求研究下如何把两者和到一起,花了两天时间看了看 ...

  6. Arcgis javascript那些事儿(十九)——地图标注添加

    一.引言 一般我们做标注都是在制图的时候就做好的,直接服务已发布当作底图直接加载上去就可以了,不过最近因为提出新的需求所以要深入研究一下,需求是注记一直处于最上面的图层,不能因为添加graphicla ...

  7. Arcgis Javascript那些事儿(一)--Arcgis server发布feature access服务

    1.什么是要素服务? 要素服务可用来通过 Internet 提供要素,并提供显示要素时所要使用的符号系统.之后,客户端可执行查询操作以获取要素,并执行相应的编辑操作.要素服务提供了可用于提高客户端编辑 ...

  8. Shell脚本学习-阶段二十六-Web服务与端口

    文章目录-Shell阶段二十六-端口与服务对照表 前言 端口与Web服务对照表 简介 前言 端口与Web服务对照表 2端口:管理实用程序 3端口:压缩进程 5端口:远程作业登录 7端口:回显 9端口: ...

  9. Arcgis Javascript那些事儿(二)--要素画图编辑

    1.获取要素服务地址 发布服务MyMapService后,可以在ArcGIS Server的Services Directory中可以看到一个名为MyMapService (FeatureServer ...

最新文章

  1. 写出我的第一个框架:迷你版Spring MVC
  2. I can accept failure but I can't accept not trying.-Michael Jordan 我可以接受失败,但绝对不能接受自己都未曾奋斗过。-迈克.乔丹...
  3. struts2和springmvc的区别
  4. IE Firefox css 差别 [转]
  5. selenium使用js进行点击
  6. DSW:面向AI研发的集成开发平台
  7. 显示器驱动有什么用_科普一下:电脑显示器用什么接口好,主流接口有哪些?...
  8. 如何使用IntelliJ IDEA搭建spark开发环境(上)
  9. puppeteer 自动化测试 一
  10. Windows 8,为应用和触摸重塑的Windows
  11. Linux内核基础设施
  12. 用于函数优化的一维 (1D) 测试函数
  13. DB2 JDBC Driver 必需的字符转换器不可用
  14. 大学c语言怎么应付考试,二级c语言考试应对技巧
  15. Python库-pandas详解
  16. MySql in子句 效率低下优化
  17. java减号的正则_java 正则匹配 特殊字符 减号- 的情况,处理方式
  18. 域名whois查询违规吗_WHOIS域ID隐私保护如何工作? 我需要域名WHOIS隐私吗?
  19. shiny改写服务器文件,Shiny生产环境部署与共享
  20. 弘辽科技:拼多多24小时不发货怎么办?如何发货?

热门文章

  1. python读excel并写入_Python 写入和读取Excel数据
  2. L1-062 幸运彩票 (15 分)
  3. 显示隐藏-display(HTML、CSS)
  4. 微信小程序富文本组件mp-html
  5. JS判断手机浏览器是横屏or竖屏
  6. JavaScript 数字前补“0”的五种方法
  7. php jwt payload,php实现jwt
  8. Confluence 6 为一个空间应用一个主题
  9. 北京黄记煌餐饮管理有限责任公司签约Ebistrategy亦策软件
  10. 沟通CTBS V5.0发布, 南北通及安全性成最大亮点