jp206100/datagouv-3d-viz

GitHub: jp206100/datagouv-3d-viz

基于 Three.js 和 GPU 加速粒子系统的法国交通事故数据交互式 3D 可视化实验项目

Stars: 0 | Forks: 0

# datagouv-3d-viz 可视化 基于 Three.js 构建的法国交通事故数据(2005–2024)交互式 3D 可视化。探索法国各地的事故热点、严重程度、天气状况和时间段分布。 **数据来源**:https://www.data.gouv.fr — ONISR / BAAC(法国国家道路交通安全局) ## 功能特性 - 从 data.gouv.fr BAAC 数据集(2020–2024)获取的**真实事故数据** - 通过自定义 GLSL 着色器渲染的 **GPU 加速粒子**(过滤更改时无需重建几何体) - **时间导航** — 按年份(2020–2024)和时间段(12小时制 AM/PM 格式)筛选 - **天气筛选器** — 按晴朗、下雨、大雾或下雪隔离显示事故 - **严重程度颜色编码** — 致命(红色)、住院(橙色)、轻伤(绿色) - **法国高速公路地图**叠加层,带有城市标签 - 主要城市热点(巴黎、马赛、里昂等)的**动画脉冲波** - **动态氛围** — 场景光照随选定的时间段变化 - **交互式工具提示** — 将鼠标悬停在粒子上以查看事故详情 - **实时统计面板** — 总数随过滤器更改实时更新 ## 技术栈 - **Three.js** — WebGL 3D 渲染 - **Vite** — 开发服务器与构建工具 - **原生 JavaScript** (ES modules) — 无框架依赖 ## 快速开始 ### 前置条件 - Node.js (v14+) 和 npm ### 安装 ``` npm install ``` ### 获取数据 ``` npm run fetch-data # Download BAAC accident CSVs → public/data/accidents.json npm run fetch-geo # Fetch France geographic boundaries ``` ### 开发 ``` npm run dev ``` 在 `http://localhost:3000` 打开,支持热模块重载。首次运行时,应用会尝试从 `/data/accidents.json` 加载缓存数据;如果未找到,则会直接在浏览器中从 data.gouv.fr 下载 CSV 文件。 ### 生产构建 ``` npm run build ``` 输出到 `/dist`。 ### 预览 ``` npm run preview ``` ## 项目结构 ``` src/ ├── core/ # Scene setup, camera, renderer, orbit controls ├── data/ # Data fetching (data.gouv.fr API) and CSV processing ├── viz/ # Particle system, France outline, roads, pulse waves, atmosphere ├── ui/ # Year/hour scrubbers, stats panel, tooltips, weather filters ├── utils/ # Geographic coordinate conversion └── main.js # Entry point and application state scripts/ ├── fetch-accidents.js # Download BAAC data → public/data/accidents.json └── fetch-france-geo.js # Fetch France geographic boundaries ``` ## 工作原理 1. **数据加载** — 从 data.gouv.fr 获取真实的 BAAC 事故记录(2020–2024),要么从预先缓存的 JSON 文件中读取,要么直接在浏览器中下载并解析 CSV 文件 2. **GPU 渲染** — 所有粒子位于单个 `BufferGeometry` 中,具有每粒子属性(位置、严重程度、年份、小时、天气);过滤完全通过着色器 uniform 在 GPU 上进行 3. **道路叠加层** — 法国高速公路网络渲染为管状几何体,并带有带标签的城市标记 4. **氛围** — 场景背景、雾和光照颜色根据选定的小时进行插值,以模拟白天/黄昏/夜晚循环 ## 控制操作 | 操作 | 输入 | |--------|-------| | 旋转 | 点击 + 拖拽 | | 缩放 | 滚轮 | | 重置视图 | 重置按钮(右上角) | | 自动旋转 | 切换按钮(右上角) | | 按年份筛选 | 底部滑块(2020–2024) | | 按小时筛选 | 底部滑块(ALL / 12AM–11PM) | | 按天气筛选 | 左侧面板按钮(晴朗、下雨、大雾、下雪) | | 切换脉冲波 | 按钮(右上角) | ## 浏览器支持 需要支持 WebGL 的现代浏览器(Chrome、Firefox、Safari、Edge)。支持移动端触摸控制。 ## 许可证 MIT
标签:3D可视化, BAAC, CMS安全, Data.gouv.fr, ECharts替代方案, GLSL着色器, JavaScript, MITM代理, ONISR, Three.js, Vite, WebGL, 交互式地图, 交通事故分析, 公共安全, 城市热点, 大数据可视化, 开源数据, 数据可视化, 时空数据分析, 智慧交通, 法国, 粒子系统, 自定义脚本