建造模型
1、建造模型,拖拽工具箱插值分析中的克里金分析
2、设置数据源shp(数据源参数,x,y,value),右键模型,获取Z值(value值)
3、右键数据源,Z值,输出shp,获取模型参数(每一个右上角会显示字母P)
4、验证后另存为模型
5、在存储位置运行该模型,成功后在结果窗口中会显示
6、右键结果窗口中的模型,共享为地图服务
发布服务
1、勾选参数选项卡中的异步及其下面地图服务结果,设置返回记录数大一点(建议1w)
2、填写左侧菜单模型名称,下各要素的备注,名称(必填)
3、模型的数据源shp 输入模式有三种,其他z值和输出shp默认即可
4、第一种:直接显示数据源
第二种:也以显示数据源为主,但是可以通过query查询等显示查询结果(不可能超出数据源)
第三种:用户定义值,利用arcgis-js自行传参数给GP服务,不依赖数据源(建造模型时还是必须需要指定数据源,用来设置像素元大小)
5、分析后发布服务,结果会是一个gp服务,一个map服务,代表发布正确
arcgis-js 调用(用户定义值的调用,query等查询网上有,评论区也会给转载路径)
1、创建一个json对象,用来存储feature图层的json串
var fsjson={
"displayFieldName": "x",
"fieldAliases": {
"FID": "FID",
"x": "x",
"y": "y",
"value": "value"
},
"geometryType": "esriGeometryPoint",
"spatialReference": {
"wkid": 4326,
"latestWkid": 4326
},
"fields": [{
"name": "FID",
"type": "esriFieldTypeOID",
"alias": "FID"
}, {
"name": "x",
"type": "esriFieldTypeDouble",
"alias": "x"
}, {
"name": "y",
"type": "esriFieldTypeDouble",
"alias": "y"
}, {
"name": "value",
"type": "esriFieldTypeDouble",
"alias": "value"
}],
"features": []
}
其中x,y,value 是创建模型时数据源文件的三个字段
2、通过ajax等方式获取,x,y,value的值,循环添加至一个新的json串中,然后赋值给上面 fsjson 中的最后一个属性features(切记是数组)
for(var i=0;i<points.length;i++)
{
var valuejson = {
"geometry": {
"x": points[i].x,
"y": points[i].y,
"spatialReference": {
"wkid": 4326,
"latestWkid": 4326
}
},
"attributes": {
"x": points[i].x,
"y": points[i].y,
"value":points[i].value
}
}
fsjson.features.push(valuejson)
}
3、利用fsjson 新建一个featureset
var featureSet = new esri.tasks.FeatureSet(fsjson);
4、调取gp服务地址,设置坐标系,传参数
gp = new Geoprocessor(gpServiceUrl);
gp.outSpatialReference = { wkid: 4326 };
//设置GP服务参数
var params = {
//JsonValue_shp是发布服务时设置的数据源名称
JsonValue_shp: featureSet,
//value时发布服务时设置的Z值名称
ZValue: "value"
};
5、提交gp服务,设置回调函数
//gp服务参数。完成。当前状态。失败
gp.submitJob(params, gpJobComplete, gpJobStatus, gpJobFailed);
6、各回调函数
//GP完成之后加载结果图层
//jobinfo回调函数自行传入
function gpJobComplete(jobinfo) {
var imageParam = new esri.layers.ImageParameters();
imageParam.imageSpatialReference = new esri.SpatialReference({ wkid: 4326 });
jobid=jobinfo.jobId;
//Kriging_shp1与GP服务发布时设置的输出图层名称要一至
gpResult.getResultImageLayer(jobinfo.jobId, "Kriging_shp1", imageParam, getResultImaLayer);
}
//一下两个可有可无,自行编写即可
//获得GP运行状态
function gpJobStatus(jobinfo) {
var jobstatus = '';
// console.log(JSON.stringify(jobinfo))
switch (jobinfo.jobStatus) {
case 'esriJobSubmitted':
jobstatus = 'Submitted...';
break;
case 'esriJobExecuting':
jobstatus = 'Executing...';
break;
case 'esriJobFailed':
jobstatus = 'Failed...';
break;
case 'esriJobSucceeded':
jobstatus = 'Succeeded...';
break;
}
console.log(jobstatus);
}
//获得GP失败信息
function gpJobFailed(error) {
consol.log(error);
}
7、加载结果图层
//取回结果图层
function getResultImaLayer(gpLayer) {
//图层透明度
//gpLayer.setOpacity(0.9);
myMap.addLayer(gpLayer);
//图层加载是异步的,可以用onload加载以下语句
//显示至范围(arcgis-js的on.("load",function(){}),不好使,不知道为什么)
var krigingExtent = new esri.geometry.Extent(xmin, ymin, xmax, ymax,
new esri.SpatialReference({ wkid: 4326 }));
myMap.setExtent(krigingExtent);
}