美文网首页开源
结合d3.js实现气象数据的可视化

结合d3.js实现气象数据的可视化

作者: 牛老师讲webgis | 来源:发表于2020-05-02 09:56 被阅读0次

    概述

    本文将结合d3.js实现在mapboxGL中格点气象数据的展示。

    效果

    效果

    实现

    1.数据格式说明

    需要将格点气象数据实现前端的展示,数据传输的方式有三种:1、json;2、二进制;3、灰度图。三种方式各有优劣,这个需要在实际的项目中去酌情选择,本文为方便理解,选用json的格式,数据格式如下:

    {
        "header": {
            "la1": 54,
            "lo1": 73,
            "la2": 18,
            "lo2": 136,
            "nx": 630,
            "ny": 360
        },
        "data": [
            ......
        ]
    }
    

    说明

    1. header节点为头文件,用以说明数据的信息,其中:la1为左上,lo1为左下,la2为右下,lo2为右上,nx为行数,ny为列数。
    2. data节点为数据,数据是从左上开始逐行将格点的气象数据转换为一个一维数组。

    2. 实现代码

    var url = '../data/aqi.json';
    console.time('timer');
    $.ajax({
        type : "get",
        url : url,
        async : false,
        success : function(res){
            res = res[0];
            var header = res.header,
                data = res.data;
            var width = header.nx;
            var height = header.ny;
            if (!canvas) {
                canvas = document.createElement('canvas');
                canvas.setAttribute('id', 'canvas-layer');
                map.getCanvasContainer().appendChild(canvas);
                context = canvas.getContext('2d');
                //设置canvas透明度
                canvas.width = width;
                canvas.height = height;
                context.clearRect(0, 0, width, height);
            }
            canvas.style.display = 'block';
            var d3Path = d3.geoPath(null, context); //绘图笔
            //绘图登高线图
            var contours = d3.contours()
                .size([header.nx, header.ny])
                .thresholds(d3.range(0, 300, 5))(data);
            contours.forEach(function(geometry) {
                context.beginPath();
                d3Path(geometry);
                var v = geometry.value;
                var acolor = that.getColor(v);
                context.fillStyle = acolor;
                context.fill();
                context.strokeStyle = acolor;
                context.stroke();
            });
            var source = map.getSource('canvas-source');
            if(source) {
                map.removeLayer('canvas-layer');
                map.removeSource('canvas-source');
            }
            map.addSource('canvas-source', {
                type: 'canvas',
                canvas: 'canvas-layer',
                coordinates: [
                    [header.lo1, header.la1],
                    [header.lo2, header.la1],
                    [header.lo2, header.la2],
                    [header.lo1, header.la2]
                ],
                animate: true
            });
            map.addLayer({
                id: 'canvas-layer',
                type: 'raster',
                source: 'canvas-source',
                'paint': {
                    'raster-opacity': 0.65,
                    'raster-fade-duration': 0
                }
            });
            canvas.style.display = 'none';
            console.timeEnd('timer');
        }
    });
    

    技术博客
    CSDN:http://blog.csdn.NET/gisshixisheng
    联系方式

    类型 内容
    qq 1004740957
    公众号 lzugis15
    e-mail niujp08@qq.com
    webgis群 452117357
    LZUGIS

    相关文章

      网友评论

        本文标题:结合d3.js实现气象数据的可视化

        本文链接:https://www.haomeiwen.com/subject/ihwhghtx.html