结合夜间环境因素的露营地选址

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

露营地选址

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

技术思路

露营地位点

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

天气与气象

我按经纬度 + 时间段向彩云拉取天气,重点取温度、湿度、风速、云量。下方代码做了两件事:请求 API,并把“今天 17:00 到次日 06:00”的云量转成前端折线图所需的[time, cloudrate]数组。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import requests
from datetime import datetime, timedelta, timezone

CAIYUN_KEY = "彩云KEY"

def fetch_caiyun_weather(lng: float, lat: float):
# 彩云 v2/v3 均可,下面示例为 v2-like
url = f"https://api.caiyunapp.com/v2.6/{CAIYUN_KEY}/{lng},{lat}/weather"
r = requests.get(url, timeout=8)
r.raise_for_status()
return r.json()

def night_cloud_curve(weather_json, tz=timezone(timedelta(hours=8))):
# 取逐小时云量 cloudrate (0~1),时间线从当天 17:00 到次日 06:00
hourly = weather_json["result"]["hourly"]
ts = [datetime.fromtimestamp(int(x["datetime"]), tz) for x in hourly["cloudrate"]]
vs = [float(x["value"]) for x in hourly["cloudrate"]]
curve = []
start = datetime.now(tz).replace(hour=17, minute=0, second=0, microsecond=0)
end = (start + timedelta(days=1)).replace(hour=6)
for t, v in zip(ts, vs):
if start <= t <= end:
curve.append({"time": t.strftime("%H:%M"), "cloud": round(v, 2)})
return curve

舒适度指标参考了国标两个核心公式:I(温湿指数)和 K(风效指数)。 我按原始符号实现,并做了一个分级函数返回“舒适/偏冷/偏热”等评价。
人居环境气候舒适度评价

道路噪声模拟

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

最终结果导出为 shp → GeoJSON → Tippecanoe(mbtiles) → TileServer GL 矢量切片。
夜间灯光处理思路相同:先将栅格矢量化,再通过 Tippecanoe 转成矢量切片。

前端展示(Vue + Mapbox + Echarts)

露营点位用了 Mapbox 的聚合渲染,点击 cluster 会 zoom 展开;点击单点弹出 Popup,同时把数据推给右侧面板显示大图/详情。

道路噪声、夜间灯光均为矢量切片,作为 vector source 加载;用分段着色 + 透明度表达强度。最终效果如下:

前端展示

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