components/layer/heatmapLayer.js

/*``
 * @Author: tjc
 * @Date:   2017-04-20 17:03:05
 * @Last Modified by:   hydata
 * @Last Modified time: 2018-05-10 17:11:16
 * @Email: 304861063@qq.com
 * @File Path: F:\work\hyMap\src\components\layer\buildingLayer.js
 * @File Name: clustersLayer.js
 * @Descript:热力图图层
 */
// import mapboxgl from 'mapbox-gl';
import baseLayer from './baseLayer';
import dataUtil from '../../util/dataUtil';
import styleModel from '../../model/heatmapStyle';

/**
 * 热力图
 * @extends baseLayer
 */
class HeatmapLayer extends baseLayer {
    /**
     *
     * @param {*} options 
     */
    constructor(options) {

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

    }

    /**
     * 获取json
     */
    getJson() {

        return this.geojson;

    }

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

        //构建数据
        let dataObject = dataUtil.buildData(serie.data);
        serie.max = dataObject.max;
        serie.min = dataObject.min;
        //构建样式
        if(serie.cluster){

            dataObject.geojson.cluster=serie.cluster;
            dataObject.geojson.clusterRadius=serie.clusterRadius||50;
        
        }

        this.addSource(dataObject.geojson);
        const style = this.buildStyle(serie);
        let normal = this.buildLayer(this.id, style);
        this.addLayer(normal);

        return normal;

    }

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

        let normal = Object.assign({}, styleModel, serie.symbolStyle.normal);
        let visibility = normal.visibility;
        delete normal['visibility'];
        return {
            'type': 'heatmap',
            'paint': normal,
            'layout': {
                'visibility': visibility
            }
        };


    }
}

export default HeatmapLayer