ArcGIS API For JavaScript使用自定义GP服务

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LENOVOJXN/article/details/88547984

通过本篇博客,你将会学习如何通过ArcMap发布自定义GP服务和如何通过ArcGIS API For JavaScript API调用发布的自定义GP服务。

使用ArcMap发布自定义GP服务

在ArcMap中使用执行软件自身提供的工具箱或者执行自己定义的ModelBuilder亦或者执行自己创建的工具,无论执行成功与否,在ArcMap的Results窗口中都会有相应的记录。在Results窗口中,展开刚刚执行的任务可以查看此任务的执行的详细情况,也可以通过这些描述查看任务执行失败的原因。

在打开的窗口中,右键想要发布的成GP服务的工具或者模型,然后依次选择Share AsGeoprecessing Services打开服务发布窗口。

  • 如果想发布一个新的GP服务,则选择选择Publish a service;如果想覆盖已存在的GP服务,则选择Overwrite an existing service;如果只想发布一个服务定义文件,则选择第二项。这里我们选择第一项,发布一个新GP服务。点击“下一步”按钮,打开下一步操作。

  • 在这一步中,选择一个ArcGIS Server连接,也就GP服务打算在哪个ArcGIS Server上发布,然后自定义服务名称。点击“下一步”按钮,打开下一步操作。

  • 在这一步中,需要配置GP服务在ArcGIS Server服务器上的存储位置,可以创建一个新的文件夹,也可以选择已存在的文件夹。如果选择root文件夹,则发布的服务在ArcGIS Server首页中会看到,如果选择其他文件夹,则需要切换。点击“Continue”按钮,打开下一步操作。

  • 在Service Editor窗口中,可以配置服务的其他参数。一般的流程是,首先点击右上角的“Analyze”按钮,让软件自动分析当前服务如果要发布会存在哪些问题。通常情况下,如果分析结果中没有Error这一项,就可以点击Publish按钮发布服务了。在分析结果,双击某一项分析结果,当前窗口会自动
    跳转到这个结果的配置界面。在这一步需要值得注意的是,如果需要在JS API中获取GP服务的执行结果,一定要勾选View results with a map serveice。顾名思义,勾选这个以后,可以以调用MapService的方式调用GP服务的执行结果。

ArcGIS API For JavaScript 使用发布的自定义GP服务

在JavaScript API中调用自定义GP服务与调用ArcGIS Server自带的GP服务方式是一样的,首先呢,需要在ArcGIS Server中获得GP服务的调用地址。

  • 在ArcGIS Server页面找到我们想调用的GP服务,然后点击服务名称,打开该服务的详细信息界面。

  • 点击左侧的Capibilities选项卡,然后点击右侧的Rest URL地址,打开一个新的标签页。

  • 在新的标签页中,点击Tasks下面的工具/模型名称,然后复制浏览器中URL,这就是我们要使用的GP服务的调用地址。在这个页面中,也可以查看这个GP服务的参数信息。

接下来要做的就是在JS代码中调用这个GP服务。这个调用方式也比较简单,首先需要做的就是在dojo中引入"esri/tasks/Geoprocessor",然后使用GP服务地址初始化Geoprocessor、配置GP服务参数、调用submitJob函数执行GP服务,最后在异步函数中获得GP服务的返回结果。

示例代码如下:

define(["esri/tasks/Geoprocessor"],
	function(Geoprocessor) {
		returen declare(null, {
			gp_example: function() {
				var gp_service_url = "https://localhost:6443/arcgis/rest/services/IDW/Model2222/GPServer/IDW_24";  // GP服务地址
				
				// 配置GP服务参数
				var gp_parameters = {
                    ZValue: "rain",
                    OutputCellSize: 0.005
                };
				
                var idw_gp = Geoprocessor(gp_service_url);
                idw_gp.submitJob(gp_parameters, gp_job_complete, gp_job_status, gp_job_failed);
				
				// GP服务执行完成后异步调用
				function gp_job_complete(job_info) {
                    idw_gp.getResultImageLayer(job_info.jobId, null, null, function(layer) {
                    var gp_result_lyrs_url = layer.url;  // 获取GP服务执行结果的访问地址,如果想访问某个结果,可在后面添加"/" + 结果的索引号(从0开始)访问
                };
				
				// 访问GP服务的执行状态
				function gp_job_status(job_info) {
					var job_status = "";

                    switch (job_info.jobStatus) {
                        case "esriJobSubmitted":
                            job_status = "提交插值任务...";
                            break;
                        case "esriJobExecuting":
                            job_status = "插值处理...";
                            break;
                        case "esriJobFailed":
                            job_status = "插值失败";
                            alert("抱歉,执行插值操作失败,请重新点击!");
                            break;
                        case "esriJobSucceeded":
                            job_status = "插值成功";
                            break;
                    }
                };
				
				// GP服务执行失败后异步调用
				function gp_job_failed() {
                    alert("抱歉,执行插值操作失败,请重新点击!");
                };
			}
		})
	})

猜你喜欢

转载自blog.csdn.net/LENOVOJXN/article/details/88547984
今日推荐