使用ArcGISGP服务发布.docx
- 文档编号:7206517
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:41
- 大小:1.87MB
使用ArcGISGP服务发布.docx
《使用ArcGISGP服务发布.docx》由会员分享,可在线阅读,更多相关《使用ArcGISGP服务发布.docx(41页珍藏版)》请在冰豆网上搜索。
使用ArcGISGP服务发布
使用ArcGISGP服务之一框架介绍
对于很多初学者来说,GP服务是一个难点,也是一个重点。
GP的全称是Geoprocessing,可以对原有的功能进行扩充,可以说只要在桌面实现的事情,在Server都可以做到。
我们首先看一下,Geoprocessing框架,我们主要是通过这些框架来进行Geoprocessing处理的。
我这里使用的是ArcGIS10.1sp1版本。
第一个,ArcToolBox,这里是系统自带的工具,只能复制和粘贴,不能手工的创建。
第二个,是Dialog,也就是对话框,点击某一个模型或者工具。
可以输入一些参数,将结果输出出来。
第三个,是ModelBuilder,我们可以点击
,可以点击最右侧的那个按钮。
在下面的文章,我们将使用这个工具来建模,然后发布成GP服务。
第四个,是Python工具,我们点击
,倒数第二个按钮。
另外我们说一下,工具分为多种类型的。
转载请注明出处,
微博欢迎关注webgis
使用ArcGISGP服务之二手工建模
前面打一个小广告,欢迎关注WebGIS微博
建模,是我们发布GP服务的第一步,这是基础功。
我们为什么要建模呢?
对于现实的GIS业务来说,基本上都有相应的流程和规范,具体怎么做,都得按照步骤来。
步骤少还好说,要是步骤多了,不仅效率低下,而且还容易出现工作错误,每一步都会产生中间文件。
例如我们的天气预报,将收集各个气象站站点定位到地图上,然后剪出中国的版图来,再然后进行克里金差值等等,一些步骤以后,就可以得到相应的温度线或者降雨线。
步骤都是规定好的,为什么不做成一个工具,然后直接输出结果呢?
对,这就是建模的好处,我们通过将多个工具组合起来,生成一个工具,来完成整体的步骤化。
上一篇博客介绍了,我们首先打开ModelBuilder。
如果不知道怎么打开,请看上一篇博客吧。
首先介绍一下,我们要实现的一个过程,某一个地方发生污染,周围哪些城市将受影响,我们这里只考虑距离吧。
下面是我们整个建模的思想。
1:
得到受污染的区域2:
进行缓冲3:
将在缓冲区的城市选出来。
第一步,新建模型
最右侧的按钮。
第二步,拖入工具
我们可以将现有的工具,直接拖到这里面来。
比如我拖一个Buffer工具。
其实如果找不到的话,我们可以进行一个搜索,快捷键Ctrl+F。
拖进之后的样子。
我们双击Buffer,我们可以看到Buffer的很多参数,前面带绿点的参数是必填的。
第三步,设置参数
参数分为两种方式填,一种直接填在这里面,另外一种是作为参数。
有绿点是必填的,如果不输入这些参数,这个工具是黑白色的,不是彩色的。
比如我在这里输入Linearunit:
1单位选择为Decimaldegrees。
如果是以参数的方式,来添加的话,有两种方法添加。
∙先说第一种,右键buffer,选择MakeVariable-FromParameter。
我们看到后面的参数,和上图的参数是一样的。
不过还是缺少了一个OutputFeatureClass。
看一下Buffer右侧是什么?
这是拖进来,自动就把这个参数添加进来了,我这里点击选择Distance[valueorfield]。
由于之前,这个参数,我已经设好值,所以说显示的是彩色的。
后面的两个还是没有变成彩色,说明这个buffer还缺少一个必填参数。
就是InputFeatures。
注意,我们点击这个Distance参数,也是可以修改这个参数值的。
我们这时候,使用第二种方式。
在这里建模空白区域,右键选择CreateVariable(创建变量),选择我们需要使用的参数类型,我们这里选择FeatureSet。
点击
,然后点击FeatureSet,一直拖着鼠标不放到Buffer,然后松开。
然后会出现和这个类型匹配的,参数名字,这里我选择InputFeatures。
按理说,这里我已经完所有的参数,应该变成彩色才对。
回头想一下,应该是FeatureSet没有设置成功,应该一些参数没有设置对。
我们点击FeatureSet。
在这里我选择了一个区的shp文件。
点击确定。
我们再去看一下,我们的模型,都变成了彩色。
说明我们这个必须参数已经设置正确,正确与否,还不能确定。
我们先点击那个
,进行检验一下啊,是否正确。
争取的话,我们点击
。
运行完毕之后,可是并知道结果怎么样。
这个时候,我们可以右键这个OutFeatureClass,选择AddToDisplay。
如果不这么办的话,也是可以采用其他的方法的,点击OutFeatureClass,我们这样就可以知道整个的输出地址什么了,当然作为参数我们也可以自己进行手动的设置。
现在完了吗?
其实对于输入FeatureSet,我想进行一个手动画一些区域,然后进行一个缓冲区生成,来在Desktop上的一个检验。
把原来的"InputFeatures"参数还原成最初的样式吧。
在这之前,我们需要在Geodatabase文件中新建一个FeatureClass,其中类型选择PolygonFeature。
为什么要建立这个呢?
因为我们需要将这个模板引入到这个参数中,让Desktop知道我们要输入的是点、线还是面之类的。
右键这个属性,选择Properties。
进入DataType标签,然后刚才我们新建的FeatureClass。
稍等,还有一步需要完成,右键这个参数,然后选择ModelParameter。
这个时候,就会出现一个P。
所有出现P的,这个模型作为使用,都需要在使用的时候,作为其中一个参数出现,没有把它写死。
那个缓存长度,由于没有加P,使用的时候,参数都是死的,不能进行改变,除非重新编辑这个Model,但是一旦发布成服务,就不能更改了。
所以说,在使用之前,一旦要想好,那些参数是死的,哪些参数是在使用的时候,才能确定的。
为了GP服务的使用,参数的名字将会作为参数名称来提交的,为了更好的理解意思,最好更改一下名字,比如说,上图的"FeatureSet",更改为"ContaminatedAreas"。
这个时候,我们来保存这个模型吧。
第四步,初入验证模型
打开这个模型。
然后在Desktop画区域吧。
然后点击"OK",等待整个的运行完毕。
到了这里,我们缓冲区域基本上就够完成了。
下面我们就要整体构建我们模型了。
根据模型选择城市。
第五步,完成模型
我们这个时候,需要添加一个新的工具,selectlayerbylocation。
把第一步的输出结果,作为第二个工具的参数SelectingFeatures。
然后再添加一个InputFeatures参数,选择相应的图层。
等等。
。
。
。
。
最后我们实现整个模型,是这样的。
第六步,最后验证模型
10.1版本,为了更加保证模型,没有错误,需要先进行跑一遍才可以发布。
在这里我添加了原来画的区域,我是怎么做到的呢?
很简单。
点击Geoprocessing-results。
然后把选中的,直接拖进去,就可以显示了,就能检验我们输入正确与否。
这一博客,确实有些长了。
下一个博客,我们就要做发布前的准备了。
这是我的数据文件 下载
转载请注明出处,
微博欢迎关注webgis
使用ArcGISGP服务之三发布前的准备
这里的准备分为两部分,分别是数据整理和环境设置。
数据整理
上面我们使用到全国主要城市图,新建的FeatureClass,中间和最后生成的等等数据,我们最好数据整理一下。
上图是我们常见的一个数据结构图。
ToolData在这里面,我们可以放置我们的底图Geodatabase和SchemaGeodatabase。
何为Schema,上面我们新建的FeatureClass,类似一种模板。
Scripts可以放置一些python脚本文件,具体脚本文件,请看下一篇关于python集成ModuleBuilder,生成工具。
Doc可以放置一些说明文件。
Scratch放置一些中间数据,例如上一个博客我们生成的缓冲区文件,就可以放置在这里。
例如这是我新建的文件列表
环境设置
地理处理环境设置是影响工具执行结果的附加参数。
这些参数与常规工具参数的区别在于它们不会显示在工具对话框中(存在某些例外情况)。
更确切地说,这些参数是先前使用独立对话框设置的值,工具在运行时将询问和使用这些参数。
环境设置有四个级别:
∙应用程序级别设置是默认设置,执行任何工具时均应用该设置。
∙工具级别设置适用于工具的单次运行并且会覆盖应用程序级别设置。
∙模型级别设置使用某种模式指定和保存,并且会覆盖工具级别设置和应用程序级别设置。
∙模型过程级别设置在模型过程级别指定,随模型一起保存,并且会覆盖模型级别设置。
应用程序级别,我们点击ArcMap-Geoprocessing-Environment。
这里我们将Workspace-CurrentWorkspace设置到第一个图的ToolShare文件,然后ScratchWorkspace设置到图中的Scratch文件夹。
然后,调整我们的工具,需要中间文件和最后生产的文件,都放置在相对WorkSpace路径下。
右键我们之前编辑的工具,然后点击Edit。
找到相应的输出文件或输入文件模块,双击打开,设置为相对地址。
例如我这里设置的最后的输出文件,%scratchworkspace%,就代表上面的ScratchWorkspace路径。
等等,我们还得去完成一件事情,就是需要设置我们新建的module需要设置保存为相对路径。
当然也需要将MXD文档设置为相对路径。
编辑模型-菜单栏Model-ModelProperties-圈中下面标红的。
建议来说,MXD文档之类的工程,最后设置为相对路径,直接就拷贝使用。
可能,很多人不知道为什么需要设置ArcMap的Workspace?
我们需要在ArcMap中跑一遍,验证是否正确,所以需要修改环境变量。
在Server使用GP服务当中,每一次请求的时候,都会产生一个job,这个job会有自己的环境变量,这样一来,就可以保住整个数据不会互相影响。
我们保存所有的设置之后,然后重新运行一遍。
下面我们就要进行服务的发布了。
这是我的数据文件 下载
转载请注明出处,
微博欢迎关注webgis
使用ArcGISGP服务之四GP服务发布
所有的数据与环境都配置好以后,我们就需要发布GP服务了。
对于ArcGIS10.1,发布GP服务方式改变了,得需要ArcMap帮助。
我们可以先将这个服务打包定义,然后发给别人,使用Sever发布,也可以直接使用Server发布。
不论怎么样,都需要预先在ArcMap跑一遍。
菜单栏Geoprocessing-Results查看结果。
服务发布
为什么需要跑一遍呢?
之前我们模型定制完成之后,直接发布,没有验证,可能使用GP服务,就出现问题。
所以,这样一来,先跑一遍,就可以处理这些问题,然后再去发布。
1:
选中结果
右键当前结果,ShareAs-GeoprocessingService。
2:
点击PublishaService
这里有是三个选项,第一个意思是发布一个新服务,第二个将服务打包定义(模型当中使用到的数据,模型,服务设置),第三个意思是,重新覆盖当前的一个模型。
3:
设置服务名字
上面的connection,需要预先在catalog当中设置好,具体怎么设置,可以在这里添加一个。
4:
设置服务文件路径
可以使用现有的,也可以新建一个"文件夹"。
5:
服务参数设置
下面主要介绍比较常用的参数。
(5.1)General
这里面的参数,就是根据前面的设置,列出来的,不能改变。
能改变的,就是设置是否服务发布的时候,是否立即启动。
(5.2)Parameters
ExecutionMode,同步和异步定义了客户端(使用任务的应用程序)如何与服务器进行交互以及如何获取任务结果。
服务设置为同步时,客户端将等待任务完成。
通常,同步任务的执行速度很快,大概需要5秒或更短。
异步任务的执行往往花费的时间较长,客户端必须定期向服务器发出询问以确定任务是否已完成,如果完成,则获取结果。
使用异步任务的Web应用程序必须添加函数逻辑来检查任务状态,并在执行完毕后处理结果。
不同的方式,在代码当中使用的函数是不一样的。
Viewresultswithamapservice,发布地理处理服务时,可以选择以地图形式查看服务所有任务的结果(以及任务的其他结果)。
这一地图使用ArcMap创建在服务器上,以将其以图片格式(如.jpeg)传输回客户端。
返回地图的符号系统、标注、透明度和所有其他属性与当前ArcMap会话中的输出图层完全相同。
使用结果地图服务的原因如下:
∙如果您的任务输出大量的要素而且需要客户端进行符号化和绘制,那么对于该客户端来说,接收一幅地图可能会更迅速、更简便。
∙用于显示结果的最好方法中所需要的功能在ArcMap中有,但在客户端不存在。
∙由于数据分发的原因,您不希望向客户端发送任何要素,而仅仅是发送地图图像。
∙您任务的结果是一个不可传输的数据集,例如TIN或CAD工程图。
向客户端发送地理状况的唯一方法是通过地图图像。
∙如果输出图层要绘制唯一值,则可能需要取消选中图层属性中的<所有其他值>以在绘制之前强制重新计算唯一值。
有关详细信息,请参阅创建图层符号系统文件。
∙如果您希望客户端只能查看数据而无法下载数据,可在发布时将服务器返回的最大记录数选项设置为零。
选择此选项后,服务器上会自动生成一个地图服务,其名字同您的地理处理服务相同。
另外可以设置,返回的条数。
(5.3)ContaminatedAreas
这个名字,当然是根据你的名字自动生成的,可能你的模型不是这个名字。
其实第二篇,我欺骗了大家,在代码当中传到后台的参数名字是可以通过这里更改的。
(5.4)ItemDescription
这里虽然对功能没有影响,但是不填的话,会不能发布服务的。
最后点击Publish。
服务目录
打开Server服务目录,查看一下,这就是我们发布后的结果。
具体怎么使用,请看下一篇JavaScriptAPI来调用
转载请注明出处,
微博欢迎关注webgis
使用ArcGISGP服务之五JavaScript的调用
使用前的了解
这是上一个博客留下的最后一张图,GP的服务目录,我们通过点击Tasks下面的一个链接地址进入。
这个地址,需要记住,这将是GP服务的地址,需要写在代码里面的。
∙帮助说明,这个是在发布服务的时候,手动输入的。
也就是说,如果我们想要别人来使用我们的工具,发布服务的时候,尽量让这个帮助写的清楚一些,现在很多懒人都不愿意写。
∙参数列表,会列出所有的参数,参数名字是需要记住的,到时候需要写在代码里面的。
∙数据类型,这是GP服务的数据类型。
每一个GP服务数据类型和JS数据类型进行对应。
DataType
JavaScriptType
Example
GPString
String
"MyString"
GPDouble
Number(float)
12.56
GPLong
Number(int)
345
GPBoolean
Boolean
true
GPDate
Date
GPLinearUnit
GPDataFile
GPRasterData
GPRecordSet
GPRasterDataLayer
GPFeatureRecordSetLayer
GPMultiValue
String[]
["Parcels","StreetLights"]
∙默认值,如果我们没有传数据的话,将会使用默认值。
这些我们都了解后,上代码。
JavaScript的调用
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
dojo.require("dijit.layout.BorderContainer");
dojo.require("dijit.layout.ContentPane");
dojo.require("esri.map");
dojo.require("esri.toolbars.draw");
dojo.require("esri.tasks.gp");
varmap,toolbar,gp;
functioninit(){
map=newesri.Map("map");
basemap=newesri.layers.ArcGISDynamicMapServiceLayer("http:
//localhost:
6080/arcgis/rest/services/basemap2/MapServer");
map.addLayer(basemap);
dojo.connect(map,'onLoad',function(theMap){
dojo.connect(dijit.byId('map'),'resize',map,map.resize);
toolbar=newesri.toolbars.Draw(map);
dojo.connect(toolbar,'onDrawEnd',drawEnd);
});
varbutton=dojo.byId("polygon");
dojo.connect(button,'onclick',drawPolygon);
}
functiondrawPolygon(){
toolbar.activate(esri.toolbars.Draw.POLYGON);
}
functiondrawEnd(geometry){
toolbar.deactivate();
varsymbol=newesri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_SOLID,newesri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_DASHDOT,newdojo.Color([255,0,0]),2),newdojo.Color([255,255,0,0.25]));
vargraphic=newesri.Graphic(geometry,symbol);
map.graphics.add(graphic);
tojob(graphic);
}
functiontojob(graphic){
//第一步构造GP
vargpUrl='http:
//localhost:
6080/arcgis/rest/services/GP/ContaminatedAreas/GPServer/ContaminatedAreas';
gp=newesri.tasks.Geoprocessor(gpUrl);
//第二步,构造参数
//我们通过上面,了解到GPFeatureRecordSetLayer对应FeatureSet
varfeatures=[];
features.push(graphic);
varfeatureset=newesri.tasks.FeatureSet();
featureset.features=features;
//构造缓冲长度,这里的单位是可以更改的,我使用的是度,简单一些
varDis=newesri.tasks.LinearUnit();
Dis.distance=1;
Dis.units=esri.Units.DECIMAL_DEGREES;
//Distance__value_or_field_,后悔当时参数名字没有改
varparms={
ContaminatedAreas:
featureset,
Distance__value_or_field_:
Dis
};
//这里函数是异步的,使用函数是submitJob,同步的使用的是execute。
//成功之后,调用jobResult,建议看一下这个参数。
gp.submitJob(parms,jobRe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 ArcGISGP 服务 发布