components/layer/circleLayer.js

/*
 * @Author: lc
 * @Date:   2017-04-20 17:03:05
 * @Last Modified by:   hydata
 * @Last Modified time: 2018-05-10 17:10:09
 * @Email: 304861063@qq.com
 * @File Path: F:\work\hyMap\src\components\layer\buildingLayer.js
 * @File Name: buildingLayer.js
 * @Descript:圆形图层
 */
import baseLayer from './baseLayer';
import dataUtil from '../../util/dataUtil';
import styleModel from '../../model/circleStyle';
/**
 * 圆
 * @extends baseLayer
 */
 class CircleLayer extends baseLayer {
    constructor(options) {

        options.layerType='circle';
        super(options);
        this.data = options.serie;
        this.init(options.serie);

    }

    /**
     * 构造json
     * @param {*} serie 
     */
    buildJson(serie) {

        //构建数据
        let dataObject = dataUtil.buildData(serie.data);

        serie.max = dataObject.max;
        serie.min = dataObject.min;
        this.addSource(dataObject.geojson);
        //构建样式
        const style = this.buildStyle(serie);
        let normal = this.buildLayer(this.id, style.normal);
        this.addLayer(normal);

        let emphasis = this.buildLayer(this.id, style.emphasis, true);
        this.addLayer(emphasis);

    }

    /**
     * 构造style
     * @param {*} serie 
     */
    buildStyle(serie) {

        const style = serie.symbolStyle;
        const min = serie.min;
        const max = serie.max;
        let normal = Object.assign({}, styleModel, style.normal);
        let emphasis = Object.assign({}, normal, style.emphasis);

        let visibility=normal.visibility;
        delete normal['visibility'];

        let emphasisiVisibility=emphasis.visibility;
        delete emphasis['visibility'];


        normal['circle-radius'] = this.buildSize(normal['circle-radius'], min, max);
        emphasis['circle-radius'] = this.buildSize(emphasis['circle-radius'], min, max);

        return {
            normal: {
                'type': 'circle',
                'paint': normal,
                'layout':{'visibility':visibility}
            },
            emphasis: {
                'type': 'circle',
                'paint': emphasis,
                'layout':{'visibility':emphasisiVisibility}
            }
        };
        // let normal = {};
        // for (let key in style.normal) {

        // let tmpKey = key.replace(/([a-z])([A-Z])/, "$1-$2").toLowerCase()
        // normal["circle-" + tmpKey] = style.normal[key];
        // console.log(key, style.normal[key]);
        // }

    }
}

export default CircleLayer