import { Zondy } from '@mapgis/webclient-common'
import * as L from '@mapgis/leaflet'
// eslint-disable-next-line import/no-extraneous-dependencies
import { copyAttributesWithClip } from '@mapgis/webclient-graphic-render'
import GeoFeatureThemeLayer from './GeoFeatureThemeLayer'
import ThemeLayer from './ThemeLayer'
/**
* @class Zondy.ThemeLayer.simpleThemeLayer
* @classdesc 统一分配专题图。
* @description 统一分配专题图对数据(<{@link Zondy.Feature.Vector}>)属性字段(attributes)的属性值进行分段,使用统一的颜色或符号(线型、填充)渲染不同范围段的属性值。统一分配专题图一般用来反映连续分布现象的数量或程度特征,如降水量的分布,土壤侵蚀强度的分布等。
* @extends Zondy.ThemeLayer.GeoFeatureThemeLayer
* @param {string} name - 图层名
* @param {Object} options - 图层参数。
* @param {string} [options.id] - 专题图层 ID。默认使用 CommonUtil.createUniqueID("themeLayer_") 创建专题图层 ID。
* @param {number} [options.opacity=1] - 图层透明度。
* @param {number} [options.nodesClipPixel=2] - 节点抽稀像素距离。
* @param {boolean} [options.isHoverAble=false] - 图形是否在 hover 时高亮。
* @param {boolean} [options.isMultiHover=false] - 是否多图形同时高亮,用于高亮同一个数据对应的所有图形(如:多面)。
* @param {boolean} [options.isClickAble=true] - 图形是否可点击。
* @param {boolean} [options.isAllowFeatureStyle=false] - 是否允许 feature 样式(style) 中的有效属性应用到专题图层。禁止对专题要素使用数据(feature)的 style。此属性可强制将数据 feature 的 style 中有效属性应用到专题要素上,且拥有比图层 style 和 styleGroups 更高的优先级,使专题要素的样式脱离专题图层的控制。可以通过此方式实现对特殊数据(feature) 对应专题要素赋予独立 style。
*/
const SimpleThemeLayer = GeoFeatureThemeLayer.extend({
/**
* @function Zondy.ThemeLayer.simpleThemeLayer.prototype.initialize
* @description 初始化。
* @param {string} name - 专题图名。
* @param {Object} options - 需要设置的参数对象。
*/
initialize(name, options) {
GeoFeatureThemeLayer.prototype.initialize.call(this, name, options)
// {Array<Zondy.ThemeLayer.ThemeStyle>} 图层中专题要素的样式
this.style = []
},
/**
* @function Zondy.ThemeLayer.simpleThemeLayer.prototype.getColor
* @description 获取随机颜色
* @return {Array} color
*/
getColor() {
const colorValue = '0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f'
const colorArray = colorValue.split(',')
let color = '#' // 定义一个存放十六进制颜色值的字符串变量,先将#存放进去
for (let i = 0; i < 6; i++) {
color += colorArray[Math.floor(Math.random() * 16)]
}
return color
},
/**
* @function Zondy.ThemeLayer.simpleThemeLayer.prototype.getStyleByData
* @description 根据用户数据(feature)设置专题要素的 Style
* @return {Array<Zondy.ThemeLayer.ThemeStyle>} 专题要素的 Style
*/
getStyleByData() {
const me = this
const style = copyAttributesWithClip({}, me.style)
if (style.fillColor === null) {
style.fillColor = me.getColor()
}
me.style = style
return style
},
/**
* @function Zondy.ThemeLayer.simpleThemeLayer.prototype.redraw
* @description 重绘专题图
*/
redraw() {
return ThemeLayer.prototype.redraw.apply(this, arguments)
}
})
Zondy.ThemeLayer.SimpleThemeLayer = SimpleThemeLayer
export default SimpleThemeLayer