类名 common/document/renderer/RankRenderer.js
import BaseRenderer from './BaseRenderer'
import { defaultValue } from '../../util'
import { Zondy } from '../../base'
import { RendererType } from '../../base/enum'
import { Symbol } from '../../base/symbol'
/**
 * 等级符号专题图,符号尺寸随指定字段的值的变化而变化
 * @class RankRenderer
 * @extends BaseRenderer
 * @moduleEX RendererModule
 * @param {Object} options 构造参数
 * @param {String} [options.field] 要素字段名
 * @param {Number} [options.minSize = 12] 等级符号最小尺寸,单位像素
 * @param {Number} [options.maxSize = 50] 等级符号最大尺寸,单位像素
 * @param {Number} [options.minDataValue] 最小数据范围,如果小于此数据范围按minSize进行符号渲染
 * @param {Number} [options.maxDataValue] 最大数据范围,如果超出此数据范围按maxSize进行符号渲染
 * @param {Symbol} [options.symbol] 等级符号样式,目前仅支持SimpleMarkerSymbol|PictureMarkerSymbol|TextSymbol,不支持线图层
 * @param {String} [options.valueExpression] 数据字段表达式,设置了会覆盖field的值
 * @param {String} [options.valueExpressionTitle] 数据字段表达式标题
 *
 * @summary <h5>支持如下方法:</h5>
 * <a href='#fromJSON'>[1、通过json构造RankRenderer对象]</a><br/>
 * <a href='#toJSON'>[2、导出json对象]</a><br/>
 * <a href='#clone'>[3、克隆RankRenderer对象]</a>
 *
 * @example <caption><h7 id='new-PictureMarkerSymbol'>创建随机渲染器对象</h7></caption>
 * // ES5引入方式
 * const { RankRenderer } = Zondy.Renderer
 * const { SimpleMarkerSymbol, SimpleLineSymbol } = Zondy.Symbol
 * // ES6引入方式
 * import { RankRenderer, SimpleMarkerSymbol, SimpleLineSymbol } from "@mapgis/webclient-common"
 * // 初始化等级符号渲染器对象
 * const rankRenderer = new RankRenderer({
 *   // 等级符号最小尺寸,单位像素
 *   minSize: 12,
 *   // 等级符号最大尺寸,单位像素
 *   maxSize: 50,
 *   // 字段名
 *   field: '字段名',
 *   // 符号样式
 *   symbol:new SimpleMarkerSymbol({
 *     // 填充颜色
 *     color:'#00ff00',
 *     // 符号形状样式
 *     style:'diamond',
 *     // 符号外边线样式
 *     outline:new SimpleLineSymbol({
 *       // 符号外边线颜色
 *       color: '#ff0000',
 *       // 符号外边线宽度
 *       width: 2
 *     })
 *   })
 * })
 */
class RankRenderer extends BaseRenderer {
  constructor(options) {
    super(options)
    options = defaultValue(options, {})
    /**
     * 符号类型,默认为‘rank’
     * @readonly
     * @member {String} RankRenderer.prototype.type
     */
    this.type = RendererType.rank
    /**
     * 等级符号最大尺寸,单位像素
     * @member {Number} RankRenderer.prototype.maxSize
     */
    this.maxSize = defaultValue(options.maxSize, 50)
    /**
     * 等级符号最小尺寸,单位像素
     * @member {Number} RankRenderer.prototype.minSize
     */
    this.minSize = defaultValue(options.minSize, 12)
    /**
     * 最大数据范围,如果超出此数据范围按maxSize进行符号渲染
     * @member {Number} RankRenderer.prototype.maxDataValue
     */
    this.maxDataValue = options.maxDataValue
    /**
     * 最小数据范围,如果小于此数据范围按minSize进行符号渲染
     * @member {Number} RankRenderer.prototype.minDataValue
     */
    this.minDataValue = options.minDataValue
    /**
     * 等级符号样式,目前仅支持SimpleMarkerSymbol|PictureMarkerSymbol|TextSymbol
     * @member {Symbol} RankRenderer.prototype.symbol
     */
    this.symbol = this._decorate(
      'symbol',
      options.symbol,
      Symbol,
      Symbol.fromJSON
    )
    /**
     * 要素字段名
     * @member {String} RankRenderer.prototype.field
     */
    this.field = options.field
    /**
     * 数据字段表达式

     * @member {String} RankRenderer.prototype.valueExpression
     */
    this.valueExpression = options.valueExpression
    /**
     * 数据字段表达式标题
     * @member {String} RankRenderer.prototype.valueExpressionTitle
     */
    this.valueExpressionTitle = options.valueExpressionTitle
  }

  /**
   * <a id='fromJSON'/>
   * 通过json构造RankRenderer对象
   * @param {Object} json json对象
   * @return {RankRenderer} RankRenderer实例
   */
  static fromJSON(json) {
    json = defaultValue(json, {})
    return new RankRenderer(json)
  }

  /**
   * <a id='toJSON'/>
   * 导出json对象
   * @return {Object} json对象
   */
  toJSON() {
    const json = super.toJSON()
    json.type = this.type
    json.maxSize = this.maxSize
    json.minSize = this.minSize
    json.maxDataValue = this.maxDataValue
    json.minDataValue = this.minDataValue
    json.symbol = this.symbol.toJSON()
    json.field = this.field
    json.valueExpression = this.valueExpression
    json.valueExpressionTitle = this.valueExpressionTitle
    return json
  }

  /**
   * <a id='clone'/>
   * 克隆RankRenderer对象
   * @return {RankRenderer} 克隆后的RankRenderer实例
   */
  clone() {
    return new RankRenderer(this.toJSON())
  }
}

Zondy.Renderer.RankRenderer = RankRenderer
export default RankRenderer
构造函数
成员变量
方法
事件