利用GP服务实现kriging插值分析

建造模型

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);
}

转载于:https://my.oschina.net/u/3935912/blog/1921249

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值