머리말
얼마 전 인턴 중, 공간 보간 분석을 수행하기 위해 필요한 지리적 데이터의 일부에 대한 요구를 수신 두 용액 같았다 번 직접, 다른 (예 Kriging.js 등) 프런트 엔드 데이터베이스를 계산하기 위해 어떤 공간 보간을 호출하는 것 하나는 ArcGIS와 GP 서비스를 출시 한 후 JS에는 ArcGIS API를 호출합니다. 많은 양의 데이터를 계산할 수 있기 때문에, GP 서비스로서 최종 결정은 달성했다. 일부 단계 달성하고, 문제가 구덩이를 발생했습니다를 요약합니다.
게시 GP 서비스
- 첫 번째 그림과 같이 모델에는 ArcGIS 모델 빌더 년에 설립, 그것은 직접 통화 크리깅 도구입니다. 다른 매개 변수했다 : 환경에 의한 추출을 마스크로 층을 마스크 상기 분석 범위는 환경으로부터 획득되는 확장; Zvalue 보간 필드는 파라미터로부터 얻어진다 입력 층에 입력 파라미터로부터 획득. P는 선택 사항입니다, 모델 매개 변수의 설정 표기 됨.
완료되면 저장을 클릭하고 모델을 확인합니다.
- 저장 모델 파일을 클릭하여 관련 입력 매개 변수를 열고 실행합니다. 서비스가 먼저 실행해야하기 때문에 GP 게시합니다.
- 결과를 실행 한 후,도에 도시된다. 주 : GP 분류 서비스는 ArcGIS 동일한 색상 층의 전면 디스플레이를 호출 한 후에는 동일하다. 나는 특정 분류를 표시하고 싶은 색상을 직접 수정 층의 마지막 실행의 결과를 속성 수 있습니다.
그런 다음, 지오 프로세싱을 열려면 클릭 -> 결과 창에서 마우스 오른쪽 단지 서비스에 게시를 클릭합니다, 현재 세션에서 모델을 실행합니다. 는 ArcGIS와 같은 데이터 서비스를 출판의 다음 단계.
- 편집 서비스를 제공합니다. 먼저 당신은 프롬프트에 대한 정보를 편집 할 수 있습니다, 분석, 오류없이 출시 된 이후. 참고 : 모드를 실행하려면 선거의 프론트 엔드에 레이어에 결과를 표시 할 수 있습니다 "결과지도 서비스를보고".
- 는 ArcGIS Server의보기 및 테스트 서비스를 제공합니다.
GP 서비스를 호출
자바 스크립트 4.12 통화 GP 서비스는 ArcGIS API는 직접 코드를 넣어
function doJob() {
require([
"esri/Map", "esri/views/MapView", "esri/layers/MapImageLayer", "esri/layers/FeatureLayer",
"esri/layers/CSVLayer", "esri/tasks/Geoprocessor", "esri/widgets/Legend", "esri/request"
], function (Map, MapView, MapImageLayer, FeatureLayer, CSVLayer, Geoprocessor, Legend, request) {
// 数据
testLayer = new FeatureLayer({
url: "https://localhost:6443/arcgis/rest/services/test/data/MapServer/0"
})
// 边界掩膜数据
maskLayer = new FeatureLayer({
url: 'https://localhost:6443/arcgis/rest/services/test/KrigingTestData/MapServer/2',
tranparent: 0.7
})
var KrigingGP = new Geoprocessor('https://localhost:6443/arcgis/rest/services/gp/Kriging/GPServer/Kriging') //实例化和调用克里金插值服务
// console.log('计算插值')
pattern = $('#patterns option:selected').val()
crop = $('#crops option:selected').val()
el = $('#NP option:selected').val()
var query = testLayer.createQuery() //要素服务中查询数据
query.where = "crop = '"+ crop +"' AND pattern = '"+pattern +"'"
testLayer.queryFeatures(query).then( re => {
console.log(JSON.stringify(re))
if (re.features.length == 0) {
alert('当前指标下无数据,请重新选取')
} else {
let params = {
Zvalue: el,
Input: re,
Extent: maskLayer,
Mask: maskLayer
}
KrigingGP.submitJob(params).then( result => {
if (result.jobStatus == 'job-failed') {
alert('计算插值失败')
// console.log(result)
} else if (result.jobStatus == 'job-succeeded') {
console.log('计算成功')
// console.log(result)
let resultLayer = KrigingGP.getResultMapImageLayer(result.jobId) // 获取插值计算结果图层
// console.log(resultLayer)
resultLayer.opacity = 0.9
resultLayer.title = '插值结果'
map.layers.pop()
map.layers.add(resultLayer) //结果图层添加到地图上显示
}
})
}
})
})
}