Leaflet+GP的注意事项

 

场景一、

发布土壤地图插值GP服务:

输入参数->IDW(反距离权重法)->重分类(按给定范围划分)->掩模处理->栅格计算器(根据重分类结果生成栅格图)

1.参数全部使用英文不要有下划线等特殊符号 

2.将需要的改变的数值设置为参数

3.IDW需要设置范围(不然生成的结果不会是完整的图)

4.工具的属性有很多可以设置的,依据不同的情况进行设置

5.默认的图是黑白的,可以在结果中设置地图的颜色样式

6.发布GP服务是通过结果进行发布的

7.在本场景中发布过程中需要将边界和结果一起发布,而不发布点数据(因为点数据的参数是需要变更的,我要在线查询)

8.为了对结果进行对比,可以将中间过程显示出来进行查看

场景二、

在线查询结果然后用GP服务进行插值

引用头部:

<%--地图引用--%>
<script src="${pageContext.request.contextPath}/main/map/Leaflet/leaflet.js"></script>
<script src="${pageContext.request.contextPath}/main/map/Leaflet/esri-leaflet.js" ></script>
<%--query功能--%>
<link rel="stylesheet" href="https://js.arcgis.com/3.17/esri/css/esri.css">
<script src="https://js.arcgis.com/3.17/"></script>

查询代码

    var query = new esri.tasks.Query();//定义查询对象
    //采样点查询地址url_querypoint="http://192.168.0.66:6080/arcgis/rest/services/DT/DT_points/MapServer/0"
    var queryTask = new esri.tasks.QueryTask(url_querypoint);
    //返回几何对象
    query.returnGeometry = true;
    //判断条件,必须,一般选择FID >-1即可
    query.where = "FID >-1";
    //查询出来的字段,用于插值的,要保证是数字类型
    query.outFields = [a.IDWZ];
    //查询出来的时候空间参考定义
    query.outSpatialReference = {"wkid": 4326};
    //执行采样点查询方法,query是参数,function是成功后调用的方法
       //console.log(query);
    queryTask.execute(query, function (fs) {
        //将返回的几何点数据传输给featureSet
        //将数据的格式转换为json
        var featureSet = JSON.stringify(fs);
        console.log(featureSet);
        //创建GP服务的参数
        var params = {
            IDWinput: featureSet, //Points是GP的输入参数名称,要和GP服务一直
            IDWZ:a.IDWZ,//插值的字段,名称要和GP一致
            Reclassification:a.Reclassification,
            Production: a.Production^0.95,
            need:a.need
        };
        submitJob(params);//改函数为异步执行函数,用于执行长时间的服务
  • 执行查询时要封装在方法中,不要直接运行,因为该方法需要等待所有的js文件加载好后才能执行,不然会报错(血的教训)
  • 将查询的结果featureSet封装在params对应的字段,然后使用ajax传递给Arcgis Server中的GP,生成结果然后使用Ajax将地图和图例取回(具体代码在我之前的博客中有)
  • 在调试的时候我们可以使用console.log()方法来查看过程中的结果
  • GP服务传递的参数实际上就是json,如果需要深入了解GP服务可以区查看它的json形式

场景三、

再使用ajax对GP服务进行POST请求的时候,需要注意查看请求的范围,使用动态的服务产生的结果需要注意你的请求范围(可以通过查看请求头进行确认(F12))。对于展示GP服务的返回的地图图片(png格式(包含坐标信息)),使用dynamicMapLayer方法进行请求必须把返回值的范围包含在里面(方法请求的范围是地图默认的显示范围,如果显示范围小于或不包含返回值的范围就不能正常的显示),不然返回的png图片会是空的.(血的教训)。

在对地图进行传参的时候需要注意,(如果是数字类型的参数可以直接不套引号的进行赋值,但如果不是数字类型的参数就必须要给每个参数进行引号的嵌套)如下:

var params = {
        river_range:'{"distance": '+data.a+', "units": "esriMeters"}', //Points是GP的输入参数名称,要和GP服务一致
        county_highway_range:'{"distance": '+data.b+', "units": "esriMeters"}',//插值的字段,名称要和GP一致
        provincial_highway_range:'{"distance": '+data.c+', "units": "esriMeters"}'
    };

注意:在GP服务的参数下面有个执模式,一个是同步模式一个是异步模式

1.同步的执行模式:(和ajax的同步模式很像)会在在线返回地图的矢量数据(json格式)这个需要浏览器在线进行渲染(如果数据量很大的情况下会很卡)

2.异步的执行模式:(模式和ajax的异步差不多)不需要浏览器去等待加载,返回的数据是png图片(可以是其他的格式),这个图片就比较小(加载速度很快,可使用esri-leafet的dynamicMapLayer方法)‘

注意多使用console.log()方法去查看数据的结果

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孙霸天

你的打赏是我不断创作的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值