售后服务使用AGISGP服务发布_第1页
售后服务使用AGISGP服务发布_第2页
售后服务使用AGISGP服务发布_第3页
售后服务使用AGISGP服务发布_第4页
售后服务使用AGISGP服务发布_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、售后服务使用 AGISGP 服务发布使用 ArcGIS GP 服务之一框架介绍对于很多初学者来说,GP 服务是一个难点,也是一个重点。GP 的全称是 Geoprocessing,可以对原有的功能进行扩充,可以说只要在桌面实现的事情,在 Server 都可以做到。我们首先看一下,Geoprocessing 框架,我们主要是通过这些框架来进行Geoprocessing 处理的。我这里使用的是 ArcGIS 10.1 sp1 版本。第一个,ArcToolBox,这里是系统自带的工具,只能复制和粘贴,不能手工的创建。第二个,是 Dialog,也就是对话框,点击某一个模型或者工具。可以输入一些参数,将结

2、果输出出来。第三个,是 Model Builder,我们可以点击,可以点击最右侧的那个按钮。在下面的文章,我们将使用这个工具来建模,然后发布成 GP 服务。第四个,是 Python 工具,我们点击,倒数第二个按钮。另外我们说一下,工具分为多种类型的。转载请注明出处,http:/HPhone/微博欢迎关注 webgis使用 ArcGIS GP 服务之二手工建模前面打一个小广告,欢迎关注 WebGIS 微博建模,是我们发布 GP 服务的第一步,这是基础功。我们为什么要建模呢?对于现实的 GIS 业务来说,基本上都有相应的流程和规范,具体怎么做,都得按照步骤来。步骤少还好说,要是步骤多了,不仅效率低

3、下,而且还容易出现工作错误,每一步都会产生中间文件。例如我们的天气预报,将收集各个气象站站点定位到地图上,然后剪出中国的版图来,再然后进行克里金差值等等,一些步骤以后,就可以得到相应的温度线或者降雨线。步骤都是规定好的,为什么不做成一个工具,然后直接输出结果呢?对,这就是建模的好处,我们通过将多个工具组合起来,生成一个工具,来完成整体的步骤化。上一篇博客介绍了,我们首先打开 Model Builder。如果不知道怎么打开,请看上一篇博客吧。首先介绍一下,我们要实现的一个过程,某一个地方发生污染,周围哪些城市将受影响,我们这里只考虑距离吧。下面是我们整个建模的思想。1:得到受污染的区域 2:进行

4、缓冲 3:将在缓冲区的城市选出来。第一步,新建模型最右侧的按钮。第二步,拖入工具我们可以将现有的工具,直接拖到这里面来。比如我拖一个 Buffer 工具。其实如果找不到的话,我们可以进行一个搜索,快捷键 Ctrl+F。拖进之后的样子。我们双击 Buffer,我们可以看到 Buffer 的很多参数,前面带绿点的参数是必填的。第三步,设置参数参数分为两种方式填,一种直接填在这里面,另外一种是作为参数。有绿点是必填的,如果不输入这些参数,这个工具是黑白色的,不是彩色的。比如我在这里输入 Linear unit :1 单位选择为 Decimal degrees。如果是以参数的方式,来添加的话,有两种方

5、法添加。· 先说第一种,右键 buffer,选择 Make Variable-From Parameter。我们看到后面的参数,和上图的参数是一样的。不过还是缺少了一个 OutputFeature Class。看一下 Buffer 右侧是什么?这是拖进来,自动就把这个参数添加进来了,我这里点击选择 Distancevalue or field。由于之前,这个参数,我已经设好值,所以说显示的是彩色的。后面的两个 还是没有变成彩色,说明这个 buffer 还缺少一个必填参数。就是 Input Features。注意,我们点击这个 Distance 参数,也是可以修改这个参数值的。我们这时

6、候,使用第二种方式。在这里建模空白区域,右键选择 Create Variable(创建变量),选择我们需要使用的参数类型,我们这里选择 Feature Set。点击,然后点击 Feature Set,一直拖着鼠标不放到 Buffer,然后松开。然后会出现和这个类型匹配的,参数名字,这里我选择 Input Features。按理说,这里我已经完所有的参数,应该变成彩色才对。回头想一下,应该是 Feature Set 没有设置成功,应该一些参数没有设置对。我们点击 Feature Set。在这里我选择了一个区的 shp 文件。点击确定。我们再去看一下,我们的模型,都变成了彩色。说明我们这个必须参数

7、已经设置正确,正确与否,还不能确定。我们先点击那个,进行检验一下啊,是否正确。争取的话,我们点击。运行完毕之后,可是并知道结果怎么样。这个时候,我们可以右键这个 Out Feature Class,选择 Add To Display。如果不这么办的话,也是可以采用其他的方法的,点击 Out Feature Class,我们这样就可以知道整个的输出地址什么了,当然作为参数我们也可以自己进行手动的设置。现在完了吗?其实对于输入 Feature Set,我想进行一个手动画一些区域,然后进行一个缓冲区生成,来在 Desktop 上的一个检验。把原来的"Input Features"

8、参数还原成最初的样式吧。在这之前,我们需要在 Geodatabase 文件中新建一个 Feature Class,其中类型选择 Polygon Feature。为什么要建立这个呢?因为我们需要将这个模板引入到这个参数中,让 Desktop 知道我们要输入的是点、线还是面之类的。右键这个属性,选择 Properties。进入 Data Type 标签,然后刚才我们新建的 Feature Class。稍等,还有一 步需要完成,右键这个参数,然后选择 Model Parameter。这个时候,就会出现一个 P。所有出现 P 的,这个模型作为使用,都需要在使用的时候,作为其中一个参数出现,没有把它写死

9、。那个缓存长度,由于没有加 P,使用的时候,参数都是死的,不能进行改变,除非重新编辑这个 Model,但是一旦发布成服务,就不能更改了。所以说,在使用之前,一旦要想好,那些参数是死的,哪些参数是在使用的时候,才能确定的。为了 GP 服务的使用,参数的名字将会作为参数名称来提交的,为了更好的理解意思,最好更改一下名字,比如说,上图的"Feature Set",更改为 "ContaminatedAreas"。这个时候,我们来保存这个模型吧。第四步,初入验证模型打开这个模型。然后在 Desktop 画区域吧。然后点击"OK",等待整个的运行

10、完毕。到了这里,我们缓冲区域基本上就够完成了。下面我们就要整体构建我们模型了。根据模型选择城市。第五步,完成模型我们这个时候,需要添加一个新的工具,select layer by location。把第一步的输出结果,作为第二个工具的参数 Selecting Features。然后再添加一个 Input Features 参数,选择相应的图层。等等。最后我们实现整个模型,是这样的。第六步,最后验证模型10.1 版本,为了更加保证模型,没有错误,需要先进行跑一遍才可以发布。在这里我添加了原来画的区域,我是怎么做到的呢?很简单。点击Geoprocessing-results。然后把选中的,直接拖进

11、去,就可以显示了,就能检验我们输入正确与否。这一博客,确实有些长了。下一个博客,我们就要做发布前的准备了。这是我的数据文件 下载转载请注明出处,http:/HPhone/微博欢迎关注 webgis使用 ArcGIS GP 服务之三发布前的准备这里的准备分为两部分,分别是数据整理和环境设置。数据整理上面我们使用到全国主要城市图,新建的 Feature Class,中间和最后生成的等等数据,我们最好数据整理一下。上图是我们常见的一个数据结构图。ToolData 在这里面,我们可以放置我们的底图 Geodatabase 和 Schema Geodatabase。何为 Schema,上面我们新建的 F

12、eature Class,类似一种模板。Scripts 可以放置一些 python 脚本文件,具体脚本文件,请看下一篇关于 python 集成 Module Builder ,生成工具。Doc 可以放置一些说明文件。Scratch 放置一些中间数据,例如上一个博客我们生成的缓冲区文件,就可以放置在这里。例如这是我新建的文件列表环境设置地理处理环境设置是影响工具执行结果的附加参数。这些参数与常规工具参数的区别在于它们不会显示在工具对话框中(存在某些例外情况)。更确切地说,这些参数是先前使用独立对话框设置的值,工具在运行时将询问和使用这些参数。环境设置有四个级别:· 应用程序级别设置是默

13、认设置,执行任何工具时均应用该设置。· 工具级别设置适用于工具的单次运行并且会覆盖应用程序级别设置。· 模型级别设置使用某种模式指定和保存,并且会覆盖工具级别设置和应用程序级别设置。· 模型过程级别设置在模型过程级别指定,随模型一起保存,并且会覆盖模型级别设置。应用程序级别,我们点击 ArcMap-Geoprocessing-Environment。这里我们将 Workspace - Current Workspace 设置到第一个图的 ToolShare文件,然后 Scratch Workspace 设置到图中的 Scratch 文件夹。然后,调整我们的工具,需

14、要中间文件和最后生产的文件,都放置在相对 WorkSpace 路径下。右键我们之前编辑的工具,然后点击 Edit。找到相应的输出文件或输入文件模块,双击打开,设置为相对地址。例如我这里设置的最后的输出文件,%scratchworkspace%,就代表上面的 Scratch Workspace 路径。等等,我们还得去完成一件事情,就是需要设置我们新建的 module 需要设置保存为相对路径。当然也需要将 MXD 文档设置为相对路径。编辑模型-菜单栏 Model-Model Properties-圈中下面标红的。建议来说,MXD 文档之类的工程,最后设置为相对路径,直接就拷贝使用。可能,很多人不知

15、道为什么需要设置 ArcMap 的 Workspace?我们需要在 ArcMap 中跑一遍,验证是否正确,所以需要修改环境变量。在 Server 使用 GP服务当中,每一次请求的时候,都会产生一个 job,这个 job 会有自己的环境变量,这样一来,就可以保住整个数据不会互相影响。我们保存所有的设置之后,然后重新运行一遍。下面我们就要进行服务的发布了。这是我的数据文件 下载转载请注明出处,http:/HPhone/微博欢迎关注 webgis使用 ArcGIS GP 服务之四 GP 服务发布所有的数据与环境都配置好以后,我们就需要发布 GP 服务了。对于 ArcGIS 10.1,发布 GP 服务

16、方式改变了,得需要 ArcMap 帮助。我们可以先将这个服务打包定义,然后发给别人,使用 Sever 发布,也可以直接使用 Server 发布。不论怎么样,都需要预先在 ArcMap 跑一遍。菜单栏 Geoprocessing-Results 查看结果。服务发布为什么需要跑一遍呢?之前我们模型定制完成之后,直接发布,没有验证,可能使用 GP 服务,就出现问题。所以,这样一来,先跑一遍,就可以处理这些问题,然后再去发布。1:选中结果右键当前结果,Share As-Geoprocessing Service。2:点击 Publish a Service这里有是三个选项,第一个意思是发布一个新服务,

17、第二个将服务打包定义(模型当中使用到的数据,模型,服务设置),第三个意思是,重新覆盖当前的一个模型。3:设置服务名字上面的 connection,需要预先在 catalog 当中设置好,具体怎么设置,可以在这里添加一个。4:设置服务文件路径可以使用现有的,也可以新建一个"文件夹"。5:服务参数设置下面主要介绍比较常用的参数。(5.1)General这里面的参数,就是根据前面的设置,列出来的,不能改变。能改变的,就是设置是否服务发布的时候,是否立即启动。(5.2)ParametersExecution Mode,同步和异步定义了客户端(使用任务的应用程序)如何与服务器进行交互

18、以及如何获取任务结果。服务设置为同步时,客户端将等待任务完成。通常,同步任务的执行速度很快,大概需要 5 秒或更短。异步任务的执行往往花费的时间较长,客户端必须定期向服务器发出询问以确定任务是否已完成,如果完成,则获取结果。使用异步任务的 Web 应用程序必须添加函数逻辑来检查任务状态,并在执行完毕后处理结果。不同的方式,在代码当中使用的函数是不一样的。View results with a map service, 发布地理处理服务时,可以选择以地图形式查看服务所有任务的结果(以及任务的其他结果)。这一地图使用 ArcMap 创建在服务器上,以将其以图片格式(如 .jpeg)传输回客户端。返

19、回地图的符号系统、标注、透明度和所有其他属性与当前 ArcMap 会话中的输出图层完全相同。使用结果地图服务的原因如下:· 如果您的任务输出大量的要素而且需要客户端进行符号化和绘制,那么对于该客户端来说,接收一幅地图可能会更迅速、更简便。· 用于显示结果的最好方法中所需要的功能在 ArcMap 中有,但在客户端不存在。· 由于数据分发的原因,您不希望向客户端发送任何要素,而仅仅是发送地图图像。· 您任务的结果是一个不可传输的数据集,例如 TIN 或 CAD 工程图。向客户端发送地理状况的唯一方法是通过地图图像。· 如果输出图层要绘制唯一值,则可

20、能需要取消选中图层属性中的 <所有其他值> 以在绘制之前强制重新计算唯一值。有关详细信息,请参阅创建图层符号系统文件。· 如果您希望客户端只能查看数据而无法下载数据,可在发布时将服务器返回的最大记录数选项设置为零。选择此选项后,服务器上会自动生成一个地图服务,其名字同您的地理处理服务相同。另外可以设置,返回的条数。(5.3)ContaminatedAreas这个名字,当然是根据你的名字自动生成的,可能你的模型不是这个名字。其实第二篇,我欺骗了大家,在代码当中传到后台的参数名字是可以通过这里更改的。(5.4)Item Description这里虽然对功能没有影响,但是不填的

21、话,会不能发布服务的。最后点击 Publish。服务目录打开 Server 服务目录,查看一下,这就是我们发布后的结果。具体怎么使用,请看下一篇 JavaScript API 来调用转载请注明出处,http:/HPhone/微博欢迎关注 webgis使用 ArcGIS GP 服务之五 JavaScript 的调用使用前的了解这是上一个博客留下的最后一张图,GP 的服务目录,我们通过点击 Tasks下面的一个链接地址进入。这个地址,需要记住,这将是 GP 服务的地址,需要写在代码里面的。· 帮助说明,这个是在发布服务的时候,手动输入的。也就是说,如果我们想要别人来使用我们的工具,发布服

22、务的时候,尽量让这个帮助写的清楚一些,现在很多懒人都不愿意写。· 参数列表,会列出所有的参数,参数名字是需要记住的,到时候需要写在代码里面的。· 数据类型,这是 GP 服务的数据类型。每一个 GP 服务数据类型和 JS 数据类型进行对应。Data TypeJavaScript TypeExampleGPStringString"MyString"GPDoubleNumber (float)12.56GPLongNumber (int)345GPBooleanBooleantrueGPDateDateGPLinearUnit<LinearUnit&g

23、t;GPDataFile<DataFile>GPRasterData<RasterData>GPRecordSet<FeatureSet>GPRasterDataLayer<RasterData>GPFeatureRecordSetLayer<FeatureSet>GPMultiValueString"Parcels", "Street Lights"JavaScript 的调用·默认值,如果我们没有传数据的话,将会使用默认值。这些我们都了解后,上代码。?3basemap = new1

24、4esri.layers.ArcGISDynamicMapServiceLayer("http:/localhost:6080/arcgis/r15est/services/basemap2/MapServer");16map.addLayer(basemap);17dojo.connect(map, 'onLoad', function(theMap) 18dojo.connect(dijit.byId('map'), 'resize', map, map.resize);19toolbar = new esri.toolb

25、ars.Draw(map);20dojo.connect(toolbar, 'onDrawEnd', drawEnd);21);22var button = dojo.byId("polygon");23dojo.connect(button, 'onclick', drawPolygon);24252627function drawPolygon() 28toolbar.activate(esri.toolbars.Draw.POLYGON);29303132function drawEnd(geometry) 33toolbar.deac

26、tivate();34var symbol = new35esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_SOL36ID, new37esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_DAS38HDOT, new dojo.Color(255, 0, 0), 2), new dojo.Color(255, 255, 0,390.25);40var graphic = new esri.Graphic(geometry, symbol);4

27、1map.graphics.add(graphic);42tojob(graphic);434445function tojob(graphic) 46/第一步构造 GP47var gpUrl =48'http:/localhost:6080/arcgis/rest/services/GP/ContaminatedAreas/GPServer/Contam49inatedAreas'50gp = new esri.tasks.Geoprocessor(gpUrl);51/第二步,构造参数52/我们通过上面,了解到 GPFeatureRecordSetLayer 对应 Featu

28、reSet53var features = ;54features.push(graphic);55var featureset = new esri.tasks.FeatureSet();56featureset.features = features;57/构造缓冲长度,这里的单位是可以更改的,我使用的是度,简单一些58var Dis = new esri.tasks.LinearUnit();59Dis.distance = 1;60Dis.units = esri.Units.DECIMAL_DEGREES;61/Distance value_or_field_,后悔当时参数名字没有改

29、62var parms = 63ContaminatedAreas : featureset,64Distance value_or_field_ : Dis65;66/这里函数是异步的,使用函数是 submitJob,同步的使用的是 execute。67/成功之后,调用 jobResult,建议看一下这个参数。68gp.submitJob(parms, jobResult);697071function jobResult(result) 72var jobId = result.jobId;73var status = result.jobStatus;74if(status = esri

30、.tasks.JobInfo.STATUS_SUCCEEDED) 75/成功之后,将其中的结果取出来,当然这也是参数名字。76/在模型中,想要取出中间结果,需要设置为模型参数77gp.getResultData(jobId, "polygon_Buffer", addResults);78gp.getResultData(jobId, "resultCity", addResults);798081/将缓冲添加到地图上82function addBufferResults(results) 83console.log(results);84var fea

31、tures = results.value.features;85for(var i = 0, length = features.length; i != length; +i) 86var feature = featuresi;87var polySymbolRed = new esri.symbol.SimpleFillSymbol();88polySymbolRed.setOutline(new89esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOL90ID, new dojo.Color(0, 0,

32、0, 0.5), 1);91polySymbolRed.setColor(new dojo.Color(255, 0, 0, 0.5);92feature.setSymbol(polySymbolRed);93map.graphics.add(feature);/将受污染的城市,添加到地图上 function addResults(results) console.log(results);var features = results.value.features;for(var f = 0, fl = features.length; f < fl; f+) 最后的结果每一个 Job,

33、都会保存下来,中间和最后的结果数据都会保存下来。GP 服务“调试”技巧其实不应该叫做调试,应该是怎么来找出问题的所在,是代码的原因,还是模型的问题。打开浏览器的调试窗口,进入 Network 界面。其实我们从这里就可以看出来,异步,就是提交之后,每隔一段时间,来查询整个 Job 的完成过程,如果是完成了,然后给你返回你一个结果。每一个 Ajax请求,都会有相应的结果在里面,可以点击这个请求,在 Response 页面中找到。现在假如说,我的服务总是返回失败,有可能是我们的参数提交的不对。点击上图 SubmitJob,在右侧,我们会找到提交的参数。这些参数可以拷贝下来,我们打开另外一个窗口,看这

34、篇博文的第二张图,最下面,会有一个 Submit Job 按钮,打开它。把参数输入进去,然后点击 Get。在不断的 Check Job,还是不正确,那极有可能是参数不正确。这是正确的结果,这个页面更多的用于初期的 GP 服务发布之后,检测结果是否和在 ArcMap 运行的一样。转载请注明出处,http:/HPhone/微博欢迎关注 webgis计算 GPS WGS_84 两点的距离我们常说的经纬度就是 GPS 坐标,采用的是 WGS_84 坐标系统,一般采集来 的数据就是 GPS 数据。我们知道使用 ArcGIS Server 可以很容易得到相关的数据,但是有时候,很简单的一个小功能,不值得使

35、用这么大的软件。可以直接在客户端计算出来。下面这个算法,比较粗糙,有一定的误差。最近在研究一个新的算法,和使用 ArcGIS Server 得到的结果,误差到毫米级,很快就可以上线了。转载请注明出处,http:/HPhone/微博欢迎关注 webgis计算 GPS WGS_84 两点的距离 更加细腻的算法上面的一篇博客,两点距离比较粗糙,现贴一篇更加细腻的算法?22var U1 = Math.atan(1 - f) * Math.tan(lat1.toRad();2324var U2 = Math.atan(1 - f) * Math.tan(lat2.toRad();2526var sinU

36、1 = Math.sin(U1), cosU1 = Math.cos(U1);2728var sinU2 = Math.sin(U2), cosU2 = Math.cos(U2);2930var lambda = L, lambdaP, iterLimit = 100;3132do 3334var sinLambda = Math.sin(lambda), cosLambda =3536Math.cos(lambda);3738var sinSigma = Math.sqrt(cosU2 * sinLambda) * (cosU2 *3940sinLambda) + (cosU1 * sinU2 - sinU1 * cosU2 * cosLambda) * (cosU14142* sinU2 - sinU1 * cosU2 * cosLambda);43if(sinSigma = 0)return 0;var cosSi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论