结合夜间环境因素的露营地选址
结合夜间环境因素的露营地选址
我尝试做一个露营地选址的可视化 Demo,展示了北京地区部分露营地点的位置,并结合夜间环境因素、道路噪声模拟、天气与气象指标,为有观星需求或户外体验需求的人提供参考。用户可以点击地图上的露营点查看详细信息,包括地理位置、照片、简要介绍;同时在面板上可以查看夜间云量变化、夜间灯光分布、道路噪声模拟层以及气象数据和舒适度评价。

地图基于 Mapbox 渲染,支持夜间底图、叠加灯光和噪声分布图层;
露营地位点来源于高德地图 API,通过 POI 搜索接口保存为 JSON;
气象数据调用彩云天气 API,获取温度、湿度、风速、云量等指标;
舒适度评价则基于国家标准《人居环境气候舒适度评价》,分别计算温湿指数和风效指数,并进行等级划分。

技术思路
露营地位点
通过高德地图 API 的 POI 搜索接口获取(实际过程是通过浏览器调试工具观察 https://restapi.amap.com/v3/place/text 请求,保存返回的 JSON),字段包括地理坐标、地址、名称、照片。

天气与气象
我按经纬度 + 时间段向彩云拉取天气,重点取温度、湿度、风速、云量。下方代码做了两件事:请求 API,并把“今天 17:00 到次日 06:00”的云量转成前端折线图所需的[time, cloudrate]数组。
1 | import requests |
舒适度指标参考了国标两个核心公式:I(温湿指数)和 K(风效指数)。 我按原始符号实现,并做了一个分级函数返回“舒适/偏冷/偏热”等评价。

道路噪声模拟
这一部分没有现成数据,我按照道路等级和噪声随距离衰减的缓冲区关系自己模拟。把道路分级(高速/国道/省道)例如高速道路的初始噪声值较高,随着距离缓冲区逐渐降低,用 GIS 工具(如ArcGIS Pro)生成不同等级的噪声缓冲带,最后叠加到地图。

最终结果导出为 shp → GeoJSON → Tippecanoe(mbtiles) → TileServer GL 矢量切片。
夜间灯光处理思路相同:先将栅格矢量化,再通过 Tippecanoe 转成矢量切片。
前端展示(Vue + Mapbox + Echarts)
露营点位用了 Mapbox 的聚合渲染,点击 cluster 会 zoom 展开;点击单点弹出 Popup,同时把数据推给右侧面板显示大图/详情。
道路噪声、夜间灯光均为矢量切片,作为 vector source 加载;用分段着色 + 透明度表达强度。最终效果如下:

用户可浏览北京地区的露营地点,点击查看详情;观星爱好者可直观对比“夜间云量 + 光污染 + 噪声”,查看未来一晚的云量变化和舒适度指数,辅助选择露营点。







