three.js手搓成都3D数据大屏,OpenStreetMap驱动微缩插画风城市展示
本文介绍如何仅用three.js和OpenStreetMap数据,不依赖外部地图SDK或3D模型,构建一个包含成都市中心1.9万栋楼、2500多条道路及12个景点的3D数据大屏。该系统采用微缩插画风格...
在Web技术领域,利用纯前端技术实现复杂3D可视化项目正成为一种趋势。近日,一位开发者分享了其使用three.js和OpenStreetMap(OSM)数据构建成都3D数据大屏的完整方案,该项目不仅展示了城市微观结构,还实现了交互式数据可视化,为城市数字化展示提供了新的思路。
该项目的核心在于将OSM这一开放地理数据库转化为可被three.js高效渲染的3D模型。开发团队首先通过Overpass API拉取成都市区范围内的建筑数据,这些数据以带有building标签的记录形式存在,包含了每栋楼的轮廓经纬度信息。随后,Python脚本对这些原始数据进行预处理,将其转换为适合three.js使用的米制局部坐标系,并估算缺失的建筑高度数据。对于没有实测高度和层数信息的建筑,系统根据建筑类型在合理区间内随机生成高度值,确保视觉效果的一致性。
在three.js场景构建方面,开发团队采用了模块化设计思路。整个3D城市模型由多个子模块组成:地面与绿地(terrain.js)、水面(roads.js)、道路网络(roads.js)、楼栋模型(buildings.js)、行道树与公园树(trees.js)。其中,楼栋模型通过挤出合并技术生成,并应用窗格着色器实现统一的外观效果;树木则使用InstancedMesh技术高效渲染。此外,12个著名景点如天府广场、太古里、武侯祠等均采用程序化建模方式,精确还原了建筑特征。
为了提升用户体验,项目还实现了多项交互功能。用户可以通过拖动、滚轮缩放操作查看城市细节,点击楼栋可弹出信息面板。系统还设计了自动巡览功能,镜头会依次飞向各个景点,在停留后继续前进。当镜头到达特定景点时,步行路径上会出现低多边形小人来回走动,离站时淡出,营造出生动的城市氛围。
在界面设计方面,项目采用Vue 3 + Vite框架构建大屏外壳,包括标题、总览面板、客流分析、景点介绍、导航栏等组件。所有尺寸单位统一使用px,通过postcss-pxtorem插件转成rem单位,实现不同屏幕的适配。同时,页面还集成了罗盘、比例尺等辅助工具,方便用户进行空间定位和尺度感知。
该项目的成功实现,展示了纯前端技术在复杂3D可视化领域的强大能力。通过结合OSM数据和three.js的强大渲染能力,开发者无需依赖任何外部地图服务,就能构建出高质量的城市3D模型。这种基于开源数据和技术的解决方案,不仅降低了开发成本,也为城市数字化展示提供了新的可能性。
