本篇博客简要介绍了如何在使用ArcGIS Restful API生成token, 并使用该token上传shp压缩包
上传shp压缩包需要使用的是Portal的Token, 那么需要使用Portal的Restful API
API文档地址 https://<root-url>/arcgis/portalhelp/apidocs/rest/index.html
参考文档说明, 打开自己的生成token页面:https://simpleportal.esricd.local/arcgis/sharing/rest/generateToken
2. 填写用户名, 密码后查看network, 拿到请求token的格式
3. 编写ajax请求生成token
function genToken() { const url = "https://simpleportal.esricd.local/arcgis/sharing/rest/generateToken" const data = { username: 'esri_chen', password: '12345678', client: 'requestip',f:'json', expiration: 60} $.post(url, data).done((d) => { token = d.token }) }上传Shp压缩包参考自Enterprise的web map的Add Layer from File
web map 地址: https://<root-url>/arcgis/home/webmap/viewer.html
打开web map, 选择要加载的图层打开F12查看network 由此可知, 上传shp压缩包, 我们改变token, file即可编写代码 function uploadZip() { var form = document.getElementById('upload') const token = 'kN2ZCLkYENJ3-rwxD_3kjUkLp4RX9v8XhmA-lJsy4c1JeNRdRFYNNQr0R7dk67TSKQzeVkZSmqETbzzZsGqaISv9qMk2cn7qSxI5oFC0ZSmanw7Cw8cSsHiYAzsCztNA3IbQTREAwTrE323y43kGTQ..' formData = new FormData(form); formData.append('f', 'json') formData.append('option', 'on') formData.append('filetype', 'shapefile') formData.append('publishParameters', '{"name":"1980","targetSR":{"wkid":102100},"maxRecordCount":4000,"enforceInputFileSizeLimit":true,"enforceOutputJsonSizeLimit":true,"locationType":"none","generalize":true,"maxAllowableOffset":10.583354500043306,"reducePrecision":true,"numberOfDigitsAfterDecimal":0}') $.ajax({ url:"https://simpleportal.esricd.local/arcgis/sharing/rest/content/features/generate?token=" + token, type:"post", data: formData, processData:false, contentType:false, success:function(res){ console.log(res) }, error:function(err){ alert("网络连接失败,稍后重试",err); } }) }得到features
在server中获取GP工具的默认参数字段
填充默认参数字段中缺少的features
const changeBeforeParam = config.transMatrixParams // gp工具的默认参数 const changeAfterParam = config.transMatrixParams changeBeforeParam.features = this.paramList[0].changeBefore changeAfterParam.features = this.paramList[1].changeAfter // 实例化模型参数 const transMatrixGpToolParmas = new FormData() transMatrixGpToolParmas.append('changeBefore', JSON.stringify(changeBeforeParam)) transMatrixGpToolParmas.append('changeAfter', JSON.stringify(changeAfterParam)) transMatrixGpToolParmas.append('env:outSR', '') transMatrixGpToolParmas.append('env:processSR', '') transMatrixGpToolParmas.append('returnZ', false) transMatrixGpToolParmas.append('returnM', false) transMatrixGpToolParmas.append('returnTrueCurves', false) transMatrixGpToolParmas.append('f', 'pjson') transMatrixGpToolParmas.append('context', '') postTransMatrixGpTool(transMatrixGpToolParmas, (successResponse) => { // 执行失败? if (successResponse.status !== 200) { alertErrorMessage(this, '执行计算异常!!') return } const waitingTaskFinshed = setInterval(() => { // 检查执行情况 trasnMatrixTool.checkJobStatus(successResponse.data.jobId).then((params) => { if (params.jobStatus === 'job-succeeded') { this.isLoading = false this.transMatrixToolResultJobId = params.jobId this.computeTransMatrixCallBack() // 执行完毕 window.clearInterval(waitingTaskFinshed) } else if (params.jobStatus === 'job-failed') { // 执行失败 window.clearInterval(waitingTaskFinshed) this.isLoading = false alertErrorMessage(this, '计算模型执行异常! 请重试') } else if (!params.jobStatus) { // 并没有执行成功 window.clearInterval(waitingTaskFinshed) this.isLoading = false } }) }, 1000) }, // eslint-disable-next-line (errorResponse) => { this.isLoading = false alertErrorMessage(this, '计算超时, 请稍后再试!') }) },我们可以通过api生成token并上传shp压缩包得到features, 但是这个features或者featureCollection的格式与arcgis js api 4.x版本实例化Feature的格式不一致, 所以不能直接得到一个Feature, 但是, 我们可以使用features作为gp工具的参数, 发送post请求到Server, 来实现上传shp压缩包并加载到地图上的功能