threejs 地图根据不同的gdp显示不同的颜色 学习笔记

threejs yekong

threejs 地图根据不同的gdp显示不同的颜色

地图根据不同的gdp显示不同的颜色实例

地图根据不同的gdp显示不同的颜色实例

.lerp

使用到的Color的lerp
.lerp ( color : Color, alpha : Float ) : this
color - 用于收敛的颜色。
alpha - 介于0到1的数字。

将该颜色的RGB值线性插值到传入参数的RGB值。alpha参数可以被认为是两种颜色之间的比例值,其中0是当前颜色和1.0是第一个参数的颜色。

关键代码

loader.load(modelUrl + 'json/gdp.json', function (data2) {
    var gdpObj = {};//每个省份的名字作为属性,属性值是国家对应GDP
    // GDP最高对应红色,GDP最低对应白色
    var color1 = new THREE.Color(0xffffff);
    var color2 = new THREE.Color(0xff0000);
    var gdpMax = 110000//设置一个基准值,以最高的广东gdp为准
    data2.arr.forEach(function (obj) {
        var gdp = obj.value;//当前省份GDP
        gdpObj[obj.name] = gdp;//每个省份的名字作为属性,属性值是国家对应GDP
    })
    //  加载./china.json,结构和world.json 一样,省份对应国家
    loader.load(modelUrl + 'json/china.json', function (data) {
        // 访问所有省份边界坐标数据:data.features
        data.features.forEach(function (area) {
            // "Polygon":省份area有一个封闭轮廓
            //"MultiPolygon":省份area有多个封闭轮廓
            if (area.geometry.type === "Polygon") {
                // 把"Polygon"和"MultiPolygon"的geometry.coordinates数据结构处理为一致
                area.geometry.coordinates = [area.geometry.coordinates];
            }
            // 解析所有封闭轮廓边界坐标area.geometry.coordinates
            lineGroup.add(metesBounds(area.geometry.coordinates));//省份边界轮廓插入组对象mapGroup
            var mesh = shapeMesh(area.geometry.coordinates);
            mesh.name = area.properties.name;//设置mesh对应的省份名字
            meshGroup.add(mesh);//省份轮廓Mesh插入组对象mapGroup
            // 颜色插值计算
            var color = color1.clone().lerp(color2.clone(), gdpObj[mesh.name] / gdpMax);
            // console.log(gdp / gdpMax)
            mesh.material.color.copy(color);
        });
    })
})

最终实现效果

webGL 3D地图可视化实例

喜欢