arcgis 4.11 colorSlider

记录埋坑过程:

需求:

        服务端发布一个图层,利用滑块来获取某个区间内,地图渲染上的不同

问题:

        采取colorSlider(在3.x的版本中交colorinfoslider)可以很好的实现,但是问题来了,我们需要的渲染颜色如果和内置的颜色不同的时候怎么办,总不能勉强的使用内置颜色,或者是重新配图的方式获取颜色吧

解决方式:

       根据你采用主题的不同(theme),createContinuousRenderer中响应返回的数据中visualVariable中stops数组中颜色的个数是不相同的,那么好,你不要将得到的visualVariable赋给sliderParams参数中的visualVariable这个属性,你要自己编写sliderParam中visualVariable中stops的颜色以及值(警告:个数必须相同,如果不同会将滑块莫名其妙的隐藏掉)

代码:
import store from '@/store/index'

export default class MapColorSlider {

  url = '*****************************************************************************';
  rendererFieldName = 'MIAN_JI';
  outFields = ['*'];
  popupTemplate = {
    title: "{XIAN}",
    content: [{
      type: 'fields',
      fieldInfos: [
        {
          fieldName: 'XING_ZQH',
          label: '行标题'
        }
      ]
    }]
  };
  numHandles = 2;
  sliderParams = {
    numHandles: 2,
    syncedHandles: true,
    container: "slider",
    visualVariable :{
        type:'color',
        field:'MIAN_JI',
        stops:[
          {value:0,color:'#e128d6'},
          {value:1000,color:'#eee8d6'},
          {value:500000,color:'#FFFFFF'},
          {value:800000,color:'#ewee8d6'},
          {value:1969594,color:'#453e94'}
        ],
      },
    // labelsVisible:false,
    // 不再滑块中显示平均值
    statisticsVisible:false
  };
  view = null;
  layers = null;
  /**
   *
   * @param {*} view
   * @param {*} url 图层的url地址
   * @param {*} rendererFieldName 图层渲染需要的字段
   * @param {*} outFields 图层查询的字段
   * @param {*} popupTemplate 点击地图弹出框的格式,以及字段
   * @param {*} numHandles 滑块手柄的个数
   */
  constructor(view, url, rendererFieldName, outFields, popupTemplate, numHandles) {
    this.view = view;
    this.url = url;
    this.rendererFieldName = rendererFieldName;
    this.outFields = outFields;
    this.popupTemplate = popupTemplate;
    this.sliderParams.numHandles = numHandles
    //引入store中定义的东西
    this.modules = store.state.modules;
  }
  getRenderHistogram() {
    var povLayer = new this.modules.FeatureLayer({
      url: this.url,
      outFields: this.outFields,
      visible: true,
      popupTemplate: this.popupTemplate
    });
    this.layers = povLayer
    var colorParams = {
      layer: povLayer,
      field: this.rendererFieldName,
      theme: "above-and-below"
    };

    var owner = this;
    this.modules.color.createContinuousRenderer(colorParams)
      .then(function(response){
        owner.layers.renderer = response.renderer;
        owner.view.map.add(owner.layers);
        owner.sliderParams.statistics = response.statistics;
        // console.info(response.visualVariable)
        // console.info(owner.sliderParams.visualVariable)
        // owner.sliderParams.visualVariable = response.visualVariable;
        owner.sliderParams.min = 0;
        owner.sliderParams.max = 90000;
        
        var his = new owner.modules.histogram({
          layer: povLayer,
          field: owner.rendererFieldName
        });
        owner.sliderRendererByHistogram(his)
      })
      .catch(function (error) {
        console.log("there was an error: ", error);
      });
  }
  /**
   *
   * @param {*} histogram 通过histogram渲染滑块
   */
  sliderRendererByHistogram(histogram) {
    var owner = this
    this.sliderParams.histogram = histogram;
    var colorSlider = new this.modules.ColorSlider(this.sliderParams);
    this.view.ui.add("containerDiv", "bottom-left");
    colorSlider.on("data-change", function () {
      var renderer = owner.layers.renderer.clone();
      renderer.visualVariables = [
        owner.modules.lang.clone(colorSlider.visualVariable)
      ];
      owner.layers.renderer = renderer;
    });
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

山人在山上

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值