可视化-three.js绘制3D地球-给地图加载数据

27 篇文章 15 订阅

给地图加上点数据

如何绘制地球连接
方法一:
在这里插入图片描述
地球展示数据,国家城市7W8+

使用shader渲染,性能好;缺点无法拾取,还有设置朝向等;

var data = [];//数据 格式 {x:0,y:0}
var dotPng2 = new THREE.TextureLoader().load('../image/dot2.png');//需要使用的贴图  如果不适用则是小方块
var geometry = new THREE.BufferGeometry();
var positions = [];//顶点
var sizes = [];//顶点 
var ponitShader = {
    vertexShader: `   
        attribute float u_size;
        void main() { 
            vec4 mP = modelViewMatrix * vec4( position, 1.0 );
            gl_PointSize = u_size * 300.0/(-mP.z );;
            gl_Position = projectionMatrix * mP;
        }
    `,
    fragmentShader: `
        uniform sampler2D u_txue; 
        uniform vec3 u_color;  
        void main() {
            gl_FragColor = vec4(u_color,1.0) * texture2D( u_txue,vec2(gl_PointCoord.x,1.0-gl_PointCoord.y) ); 
        }
    `
}
var uniforms = {
    u_txue: {
        value: dotPng2
    },
    u_color: {
        value: new THREE.Color("#5588aa")
    },
}
//材质
var material = new THREE.ShaderMaterial({
    uniforms: uniforms,
    transparent: true,
    depthTest: false,
    blending: THREE.AdditiveBlending,
    vertexShader: ponitShader.vertexShader,
    fragmentShader: ponitShader.fragmentShader,
});
for (let i = 0; i < data.length; i++) {
    var size = THREE.Math.randInt(1, 3);//大小
    var position = latLongToVector3({
        lat: data[i].x,
        lon: data[i].y,
        radius: _config.radius
    });//坐标转换
    positions.push(...Object.values(position));
    sizes.push(size);
}
geometry.addAttribute('position', new THREE.Float32BufferAttribute(positions, 3));
geometry.addAttribute('u_size', new THREE.Float32BufferAttribute(sizes, 1));
var mesh = new THREE.Points(geometry, material);
scene.add(mesh);

方法二:性能可以进一步优化(https://blog.csdn.net/qq_29814417/article/details/101541900)
优点:拾取目标,设置矩阵
缺点:数据量大时性能较低

var dotPng = new THREE.TextureLoader().load('../image/dot2.png')
var material = new THREE.MeshBasicMaterial({
    color: 0x8c3c23,
    side: THREE.DoubleSide,
    blending: THREE.AdditiveBlending,
    transparent: true,
    depthTest: false,
    map: dotPng
});
for (var i = 0; i < data.length; i++) {
    var size = THREE.Math.randInt(3, 5);
    var geometry = new THREE.PlaneBufferGeometry(size, size, 1);
    var plane = new THREE.Mesh(geometry, material);
    scene.add(plane);
    var position = latLongToVector3({
        lat: data[i].x,
        lon: data[i].y,
        radius: _config.radius
    })
    plane.position.set(...Object.values(position));
    plane.lookAt(new THREE.Vector3(0, 0, 0));
} 

坐标转换

		/**
	     * 经纬度坐标转换为 3D坐标系
	     * @param {float} opts.lat x
	     * @param {float} opts.lon y
	     * @param {float} opts.radius 球体半径
	     * @param {float} opts.rotation 倾斜
	     */
    	function latLongToVector3(opts) {
        opts = opts || {};
        var lat = opts.lat,
            lon = opts.lon,
            radius = opts.radius,
            rotation = opts.rotation || 0;
        var phi = (lat) * Math.PI / 180;
        var theta = (lon) * Math.PI / 180 + rotation;
        var x = (radius) * Math.cos(phi) * Math.cos(theta);
        var y = (radius) * Math.sin(phi);
        var z = (radius) * Math.cos(phi) * Math.sin(theta);
        return new THREE.Vector3(z, y, x);
    }

QQ交流群:740855975

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: three.js物联网3d可视化是一种现代化的技术,利用三维模型和图形化界面来展示物联网设备的数据和状态。对于粮仓等储藏性质的设备而言,可采用这种技术进行实时的监控和管理,从而极大的提升了粮仓的运维效率和安全性。 粮仓案例源码是基于three.js物联网3d可视化技术开发的,利用现代化的WebGL技术,实现了粮仓3d可视化界面的设计和搭建。该源码采用基于前端技术的开发方式,充分发挥Web端数据可视化交互性的优势。 该源码提供了丰富的功能模块,包括粮仓结构的构建、粮仓温湿度数据的采集、数据可视化展示和粮仓灾害预警等功能。通过该源码,用户可以实现多种交互式操作,包括缩放、旋转、拖拽等,来实时查看粮仓内部的情况,提高数据可视化程度。 综上所述,粮仓案例源码为用户提供了一种高效、可靠的监控和管理方式,有助于提升粮仓运维的效率、安全性和可靠性。该技术在粮仓等储藏性质的行业应用广泛。 ### 回答2: 物联网3D可视化技术在实际应用中,与人们的生活息息相关。其中,粮仓案例源码是一个非常实用的应用案例。 该案例源码基于Three.js开发,可以在浏览器中通过3D可视化展示粮食仓库的储存情况。通过该案例,我们可以清晰地了解到每一个仓库中的粮食储量情况,从而可以方便地管理粮食的存储、领取以及补充等方面。 在该案例中,设计师采用了人性化的UI设计,使得用户可以轻松地进行各项操作。同时,其交互操作也非常简单自然。不仅如此,该案例的源码还非常规范,代码结构相当清晰,便于阅读与修改。值得一提的是,该案例也有详细的开发文档,为有意愿学习或者开发的用户提供了很好的指导。 总体来说,该粮仓案例源码是一个具有实践意义的案例,其代码规范、可读性以及人性化的UI,都体现了其开发者的专业素养和工作态度,是物联网3D可视化技术方面的一个难得的优秀案例。 ### 回答3: 粮仓案例是利用three.js技术实现的一种物联网3D可视化方案。这种方案主要是针对对粮仓的物理参数进行数据采集和计算,然后通过传感器将数据发送到控制器,控制器可将数据转换为3D可视化图像。这种方案可用于实时监测粮仓内温度、湿度、质量等参数,及时发现异常情况并进行处理。 源码方面,这个项目主要使用了JavaScript编程语言和three.js库进行开发。整个项目代码非常详细,包括三维建模、数据采集、传感器接口配置、数据可视化等多个部分。此外,源码还提供了详细的说明和注释,方便技术人员进行开发和调试。 这个案例的优势在于它结合了物联网和3D可视化技术。通过物联网,可以实现对粮仓内多参数的实时监测和数据采集;而通过three.js库,可以将这些采集到的数据转换为生动的3D模型,提供更好的可视化效果。此外,这个案例还具有高度的可扩展性和可定制性,可以针对不同行业和应用场景进行定制开发。 总之,这个案例是物联网和3D可视化技术的有力实践,推动了这两种技术的结合与发展,对于实现智能化系统具有重要意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸡饶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值