首先需要在server中打开GP工具中的上传权限,以便该GP工具支持利用上传文件作为参数进行执行。
利用rest api 上传参数数据,这里以栅格数据为例,栅格数据的文件不只是tif文件,还包括有其他配置文件,因此需要上传主要的tif文件获取到ItemId后再拼写配置文件的上传地址,保证所有的文件上传到同一路径下。
上传tif文件获取ItemId并拼写其他文件上传地址。 文件的上传需要formData包一层。
const formData = new FormData() formData.append('file', param.file) formData.append('f', 'json') formData.append('description', 'success') postUploadExperiment1Data(this.uploadDataUrl, formData, (successResponse) => { // 上传tif文件成功,获取itemId,拼写当前其他文件上传地址,以及是否上传tif文件状态等 that.itemId = successResponse.data.item.itemID that.uploadDataUrl = config.rasterStatisticsToolBaseUrl + '/uploads/' + that.itemId + '/uploadPart' }, (errorResponse) => { this.$message.error('错误,上传文件异常! ' + errorResponse.errorCode) } )链接: https://developers.arcgis.com/rest/services-reference/uploads.htm.
通过循环上传其他配置文件,当所有文件上传完毕时执行GP工具。
const formData = new FormData() formData.append('file', param.file) formData.append('f', 'json') formData.append('description', 'success') postUploadExperiment1Data(this.uploadDataUrl, formData, (successResponse) => { // 上传文件计数,当上传7个文件完成时执行统计计算gp工具 that.uploadFileCount++ if (that.uploadFileCount === 7) this.statisticsCompute() } }, (errorResponse) => { this.$message.error('错误,上传文件异常! ' + errorResponse.errorCode) } )链接: https://developers.arcgis.com/rest/services-reference/upload-part.htm.
利用配置DataFile的itemId来设置执行GP工具的参数数据,执行成功后,通过请求获取执行结果。
loadModules([ 'esri/tasks/Geoprocessor', 'esri/tasks/support/DataFile', ], config.arcgisApiObject).then(([ EsriGeoprocessor, EsriDataFile, ]) => { const statisticalClassificationDataFile = new EsriDataFile() statisticalClassificationDataFile.itemId = that.itemId // 实例化gp工具类 const rasterStatistics = new EsriGeoprocessor(config.rasterStatisticsToolUrl) rasterStatistics.submitJob({ in_raster: statisticalClassificationDataFile }).then(function(jobResult) { if (jobResult.jobStatus === 'job-succeeded') { // 执行成功获取计算结果 getGPResults(config.rasterStatisticsToolBaseUrl + config.rasterStatisticsToolJob + jobResult.jobId + '/results/out_table?f=pjson&returnType=data', (successResponse) => { that.$message({ message: '上传文件并统计计算成功!', type: 'success', }) }, (errorResponse) => { that.$message.error('错误,获取执行结果异常! ' + errorResponse.errorCode) }) } else { that.$message({ message: '上传文件并统计计算失败!', type: 'error', }) } } )})很多时候对于GP工具的执行都是针对已发布为服务的数据作为参数的。当需要将本地数据作为参数进行GP工具执行时则需要通过上传的形式进行。