使用ArcGISGP服务发布.docx
- 文档编号:3624657
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:40
- 大小:1.87MB
使用ArcGISGP服务发布.docx
《使用ArcGISGP服务发布.docx》由会员分享,可在线阅读,更多相关《使用ArcGISGP服务发布.docx(40页珍藏版)》请在冰豆网上搜索。
使用ArcGISGP服务发布
使用ArcGISGP服务发布
我们第一看一下,Geoprocessing框架,我们要紧是通过这些框架来进行Geoprocessing处理的。
我那个地点使用的是ArcGIS10.1sp1版本。
第一个,ArcToolBox,那个地点是系统自带的工具,只能复制和粘贴,不能手工的创建。
第二个,是Dialog,也确实是对话框,点击某一个模型或者工具。
能够输入一些参数,将结果输出出来。
第三个,是ModelBuilder,我们能够点击
,能够点击最右侧的那个按钮。
在下面的文章,我们将使用那个工具来建模,然后公布成GP服务。
第四个,是Python工具,我们点击
,倒数第二个按钮。
另外我们讲一下,工具分为多种类型的。
建模,是我们公布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。
然后把选中的,直截了当拖到里面去,就能够显示了,就能检验我们输入正确与否。
这一博客,确实有些长了。
下一个博客,我们就要做公布前的预备了。
那个地点的预备分为两部分,分不是数据整理和环境设置。
数据整理
上面我们使用到全国要紧都市图,新建的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会有自己的环境变量,如此一来,就能够保住整个数据可不能互相阻碍。
我们储存所有的设置之后,然后重新运行一遍。
下面我们就要进行服务的公布了。
所有的数据与环境都配置好以后,我们就需要公布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来调用
使用前的了解
这是上一个博客留下的最后一张图,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,jobResult);
}
functionjobResult(result){
varjobId=result.jobId;
varstatus=result.jobStatus;
if(status===esri.tasks.JobInfo.STATUS_SUCCEEDED){
//成功之后,将其中的结果取出来,因此这也是参数名字。
//在模型中,想要取出中间结果,需要设置为模型参数
gp.getResultData(jobId,"polygon_Buffer",addResults);
gp.getResultData(jobId,"resultCity",addResults);
}
}
//将缓冲添加到地图上
functionaddBufferResults(results){
console.log(resu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 ArcGISGP 服务 发布