HazardSim 如何计算
模拟器显示的每一个数字,都来自几条简短的公式和少数几个开放数据集。本页准确描述代码做了什么,包括那些只是粗略近似的部分。
更新于 2026年9月18日
HazardSim 只回答一个问题:如果某种规模的灾难发生在这里,它会波及多大范围,那里住着多少人?它不判断这样的事件在此地是否可能、概率多大。规模由你选择;网站用几条简单规则把它套用到真实的地形和聚落上,这些规则连同代码中的常数一起列在下面。
模拟器回答什么,不回答什么
没有断层模型来判定某段海岸能否产生 9 级地震,也没有海洋模型把海浪送过太平洋。结果是确定性的:同样的地点和设置永远给出同样的数字。动画只是装饰:洪水一次算完,再用大约三秒逐步显现。没有任何东西依赖时间,所以也没有到达时间、预警或撤离。
底层数据
地形与格网
高程来自 Mapbox Terrain-RGB 瓦片,Mapbox Terrain-DEM 作为后备。像素颜色按 Mapbox 公布的公式解码:高度 = −10,000 + (R × 65,536 + G × 256 + B) × 0.1 米。该模型混合了采用不同垂直基准的数据源,所以海平面附近的高度并不精确,而在平坦的海岸上,微小的误差就能让淹没线移动很远。
代码从 14 级向下到 6 级,选取计算区域宽度不超过 780 像素、总像素不超过 620,000 的最精细缩放级别,然后加载覆盖该区域的每一块完整瓦片(最多 42 块)。一个格网单元的边长为 156,543 米 × cos(纬度) ÷ 2缩放级别:在北纬 45°,14 级为 6.8 米,12 级为 27 米,11 级为 54 米。比一个单元更窄的堤坝可能完全不在格网里。
计算区域
如果你的点位于某个聚落内,计算区域就是该聚落的外接矩形向外扩大 14%,再加上灾害的影响范围:海啸为浪高 × 250 米,海平面上升为 12 公里,陨石为最外圈(范围上限 60 公里)。高度上限为 1.4 个纬度,小型灾害更小;过大的矩形会被替换成以你的点为中心的正方形。在聚落之外,计算区域是该点周围可见地图的 82%,所以缩放地图可能改变结果。
城市边界与人口
一次点击会向 OpenStreetMap 的地理编码器 Nominatim 依次以 10、12 和 8 级查询,保留第一个带有边界多边形的答案。海洋、海湾、国家、州和大区会被拒绝,高度超过 1.2°、宽度超过 2.4° 或面积超过 12,000 平方公里的对象也一样。没有多边形时就使用外接矩形,面积按矩形的 72% 计。
人口取自边界的 population 标签;没有的话,在矩形内用 Nominatim 搜索同名对象;还没有的话,取 Overpass API 在那里找到的人口最多的城市、城镇、区、郊区或村庄节点。密度 = 人口 ÷ 面积,限制在每平方公里 1 到 100,000 人之间。超过每平方公里 60,000 人的结果,比达卡或马尼拉最拥挤的街区还密,说明 OpenStreetMap 把整座城市的人口挂在了一个更小的轮廓上,代码会忽略这个数字。OpenStreetMap 中没有人口时,代码按地点类型使用典型值:区或郊区每平方公里 6,000 人,城市 4,500,村庄 700,县 300(类型未知时 2,500)。密度滑块覆盖以上全部设定。行政边界常常包含农田,所以平均密度通常低于市中心。
火山
红色标记是史密森尼全球火山活动计划全新世火山名录中的 1,560 条记录(少数火山出现了两次)。距某座火山 40 公里以内的点使用该火山,喷发以火山本身为中心,而不是点击的位置。更远处不做任何计算:网站告诉你最近的真实火山,并提议带你过去。
海啸:逐渐降低的洪水填充
海岸检查。通过点击或搜索运行海啸或海平面模拟之前,代码先加载粗略地形(8 级,赤道处单元约 600 米),统计 30 公里范围内不高于 0.6 米的单元。至少需要 150 个,相当于赤道附近约 50 平方公里的开阔水域(越靠近两极越少,因为单元会缩小),任何河流或池塘都达不到这个数。直接点击水面会被拒绝。
找到海洋。在完整格网上,每一个不高于 0.6 米的边缘单元被标记为海洋,标记沿所有相连且同样不高于 0.6 米的单元(含对角线)扩散。海洋单元少于 40 个则停止运行。一个副作用:与海洋相连、低于 0.6 米的陆地(例如圩田)一开始就被当作海洋,永远不会被计入淹没范围。
水的扩散。水从所有海洋单元同时向相邻单元扩散,每前进一格就在行进距离上加一个单元宽度(对角线为 1.414)。每个单元的水面为
水位 = H − 距离 ÷ 250
其中 H 是以米计的浪高。如果水位高于地面,该单元被淹,深度为水位 − 地面高程,水继续前进;否则该单元保持干燥并挡住去路。所以水只能通过一连串被淹单元到达某个单元,高于水面的山脊会保护身后的地面,除非有路可以绕过去。
这种衰减代替了地形和建筑的摩擦。它是全球统一的一个数字,不是物理定律:在海平面高度的平地上,15 米的浪在内陆 3.75 公里处停下,30 米的浪在 7.5 公里处。同一高度同时作用于格网内的整条海岸线,所以没有波浪方向、没有海底地形、没有海湾的汇聚效应、没有有限的水量,也没有第二波。如果水触及格网边缘,结果会提示真实的洪水还会更远。
海平面上升:同一引擎,去掉衰减
海平面上升运行的是同一套代码,只是关闭了衰减:所有与海洋相连且低于新水位的单元都会被淹,无论离内陆多远,这常被称为浴缸模型。低于新水位的盆地,如果被更高的地面完全环绕,就保持干燥。堤坝只有出现在高程数据中且宽于一个单元时才算数。没有潮汐、风暴潮、侵蚀或地面沉降,也没有时间线。被淹土地上的所有居民不计为死亡,而计为流离失所。另见海平面上升会淹没哪些城市。
地震:围绕一点的烈度圈
地震是位于你点击处、深 8 公里的点源。距震中 r 处的修正麦卡利烈度为
MMI = 1.5·M − 3.0·log10R − 0.0018·R + 1.6,其中 R = √(r² + 8²) 公里,限制在 0–12 之间。
公式的形式是烈度衰减的常见形式(震级项、几何扩散、随距离的吸收),但系数是本站自己的近似,而非已发表的关系式,烈度也是直接计算,而不是通过地面加速度换算。7 级地震在震中得到 9.4,VIII 度延伸到 21 公里,V 度延伸到 181 公里;6 级峰值为 7.9,永远达不到 VIII 度;8 级的 VIII 度延伸到 67 公里。从大约 8.8 级起,震中触及 XII 度的上限。
每个区域有一个死亡比例,再乘以建筑系数:现代抗震规范 0.06,一般 1,较差 7。
| 区域 | 现代规范 | 一般 | 较差 |
|---|---|---|---|
| IX+:建筑倒塌 | 0.06% | 1% | 7% |
| VIII:严重破坏 | 0.0072% | 0.12% | 0.84% |
| VII:墙体开裂 | 0.00072% | 0.012% | 0.084% |
| VI:物品倾倒 | 0.00006% | 0.001% | 0.007% |
| V:明显有感 | 0 | 0 | 0 |
真实的 9 级地震会使几百公里长的断层破裂,所以强烈震动覆盖的是一条带,而不是一个圆。松软土层、液化、滑坡和火灾都被忽略,而且所有地震都是浅源的;深源地震的震感会弱得多。
火山:从 VEI 到三个圆
火山爆发指数被换算成喷出物体积:V = 10VEI−5 立方公里,所以 VEI 5 为 1 立方公里,每升一级增加十倍。对 VEI 2 到 8,这等于 Newhall 和 Self(1982)标度中每一级的最小体积;VEI 1 取 0.0001 立方公里。由此得到三个半径:
- 火山碎屑流,max(0.6, 9·V0.25) 公里:95% 死亡;
- 10 厘米火山灰,足以压塌屋顶,30·V0.33 公里:0.15% 死亡;
- 1 厘米火山灰,100·V0.35 公里:0.002% 死亡。
这些幂律是本站自己的经验拟合。
真实的碎屑流沿山谷流动,真实的火山灰随风飘成长长的烟羽,所以实际的影响范围是偏斜的,而不是圆形。火山泥流、气体、崩塌引发的海啸和气候效应都没有建模。
陨石:能量与冲击波缩放
天体是直径为 D 的球体,密度为 3,000 kg/m³(石质)、7,800(铁质)、900(冰质)或 1,200(碎石堆,即像贝努那样松散结合的小行星),以你设定的进入速度抵达,默认 17 公里/秒,这是近地小行星的典型值:
m = ρ·π/6·D³;E = ½·m·v²;当量(百万吨)= E ÷ 4.184×1015 J
150 米的石质天体得到 183 百万吨;19 米的车里雅宾斯克预设为 0.37 百万吨。速度控件覆盖 11 到 30 公里/秒,几乎所有小行星撞击都落在这个范围内;贝努和阿波菲斯预设分别使用 12.7 和 12.6 公里/秒,即 NASA Sentry 表中的速度,所以贝努的结果接近 1.4 吉吨,而不是同样大小的石质天体以 17 公里/秒撞击时的 6.4 吉吨。模型忽略进入角度和下落途中损失的能量。70 米以下的石质天体、20 米以下的铁质天体、90 米以下的碎石堆和 150 米以下的冰质天体被视为空爆,不留陨石坑;否则陨石坑直径为 20·D·(ρ/3,000)1/3。
对于空爆,代码估算爆炸高度:从最小石质天体的 35 公里(铁质 12 公里,冰质 45 公里)线性下降,到天体能抵达地面的尺寸时降为零:h = hmax·(1 − D ÷ D空爆)。这样 19 米的车里雅宾斯克天体约在 25 公里,60 米的通古斯卡级天体在 5 公里,与两次事件的估计都很接近。火球、完全摧毁、建筑倒塌和烧伤半径随后沿着从爆炸点出发的斜距测量,所以在地面上每个半径变为 √(R² − h²),若 R 短于 h 则为零。玻璃震碎圈保持原有大小,因为高空爆炸的微弱冲击波传播很广:车里雅宾斯克几十公里外的玻璃都碎了。当建筑倒塌区没有触及地面时,玻璃圈不计死亡。车里雅宾斯克约有 1,500 人受伤,大多被玻璃所伤,无人死亡。
| 区域 | 半径,公里(Y 为百万吨当量) | 150 米石质 | 死亡 |
|---|---|---|---|
| 陨石坑 | 20·D·(ρ/3,000)1/3 的一半 | 1.5 公里 | 100% |
| 火球 | 0.9·Y0.4 | 7.2 公里 | 100% |
| 完全摧毁(20 psi) | 2.2·Y1/3 | 12.5 公里 | 90% |
| 建筑被毁(5 psi) | 4.6·Y1/3 | 26 公里 | 45% |
| 严重烧伤 | 1.83·Y0.41 | 15.5 公里 | 18% |
| 玻璃震碎(1 psi) | 11.6·Y1/3 | 66 公里 | 0.5% |
冲击波半径随当量的立方根增长,这是 Glasstone 和 Dolan 的《The Effects of Nuclear Weapons》中的冲击波缩放定律;系数和火球幂律是本站自己的校准。热的处理与核爆炸不同:撞击只把很小一部分能量以光的形式辐射出去,约为 0.3%,而核武器约为 35%,所以烧伤半径对 0.0086·Y 的热当量套用核爆烧伤公式(12.8·Y0.41),得到 1.83·Y0.41。由于死亡比例不应随距离增加,每个区域的比例至少被提高到其外侧区域的值。
海洋撞击及其海啸,以及一公里以上天体的全球效应都没有建模;参见不同大小的陨石各会造成什么后果。
飓风:风暴潮与风廓线
滑块设定登陆时的持续风速,从 120 到 320 公里/小时,由此得到萨菲尔–辛普森等级:119 公里/小时起为一级,154 起为二级,178 起为三级,209 起为四级,252 起为五级。
风暴潮。每个风速对应旧版萨菲尔–辛普森表中的典型风暴潮,在以下各点之间插值:120 公里/小时时 1.2 米,154 时 1.8 米,178 时 2.7 米,209 时 4.0 米,252 时 5.5 米,320 时 7.5 米。历史预设用当年实测的风暴潮覆盖它:桑迪 3.9 米,博拉 10 米,卡特里娜 8.5 米,纳尔吉斯 4 米,伊恩 4.5 米,海燕 6 米。风暴潮随后用海啸引擎淹没地形,但高度损失慢十倍,每 2.5 公里 1 米,因为风暴潮是海面在数小时内的缓慢上涨,而不是单独一道浪。被淹地面的死亡率采用比海啸更平缓的曲线,从半米以下的 0.1% 到 6 米以上的 45%;1900 年的加尔维斯顿位于这条曲线的中段,那里 4.6 米的风暴潮在毫无预警的情况下夺走了岛上约四分之一的人口。
风。在眼墙之外,风速随距离的平方根下降,v(r) = Vmax·(Rmax/r)0.5,所以风速降到阈值 v 的半径为 Rmax·(Vmax/v)²。最大风速半径取自 Willoughby 和 Rahn(2004):Rmax = 46.4·e−0.0155·V + 0.0169·|纬度| 公里,V 以米/秒计,限制在 10 到 80 公里之间。各圈标出五级、四级和三级风力、飓风级大风(119 公里/小时)和强风(63 公里/小时)。风本身夺走的生命很少,所以比例很小:五级风力范围内 0.05%,四级 0.015%,三级 0.004%,飓风级大风 0.0005%,强风为零。
风暴是对称的,并且不移动:真实的风暴潮在北半球路径的右侧最高,暴雨洪水、潮汐、叠加在风暴潮上的海浪以及堤坝都没有建模。
人口如何统计
城市的密度适用于一个与城市面积相同的圆内(未找到城市时半径为 6 公里)。圆外,密度向每平方公里 60 人衰减,这是有人居住土地的粗略平均值:
密度(r) = 60 + (D − 60)·e−(r − R)/(0.8R + 2)
其中 D 是滑块密度,R 是城市半径,r 是以公里计的距离。没有这个公式,一颗 1 公里的陨石杀死的人会比地球上的总人口还多。
洪水。每个被淹单元贡献:单元面积 × 密度 × 随水深变化的死亡比例,距离从地形格网的中心而不是你点击的位置量起。海平面上升的比例为 1,报告为流离失所。
圆环。对于地震、喷发和撞击,最外圈内的圆盘被切成 800 个细环,每个环贡献 2πr × 宽度 × 密度 × 陆地比例(地形格网中高于 0.6 米的单元所占比例)。与此同时,如果外半径不超过 450 公里,代码会向 Overpass API 请求该点周围一个正方形内所有带人口标签的城市和城镇。只要找到任何一个,背景密度就降到每平方公里 60 人,每座城镇的全部人口按其中心点的距离加入。先显示一个快速估计,列表到达后再加以修正。
总数上限为 82 亿。假设所有人都在家中,未获预警,也没有撤离。
局限:为什么这些只是数量级
- 不完美的地形。高度误差和几十米宽的单元决定了洪水在低海岸的止步之处。
- 平均化的人口。边界内密度均匀,城镇当作单个点,各地普查年份不同。
- 固定的死亡比例。真实伤亡取决于预警、时刻、建筑和救援。1994 年加利福尼亚州北岭的 6.7 级地震造成 57 人死亡;2010 年海地的 7.0 级地震造成超过 100,000 人死亡。
- 点状空爆。真实的空爆把能量沿几十公里的倾斜轨迹释放;模型把它当作正对你点击位置上方、处于估计高度的单个点。
用结果来区分几百和几十万,或者看一座城市哪些部分地势低,而不要把它当作精确计数。
数据许可与署名
- 边界、地名、人口:© OpenStreetMap 贡献者,开放数据库许可(ODbL),通过 Nominatim 和 Overpass API 查询。
- 高程、卫星影像、底图、搜索:© Mapbox,依据 Mapbox 服务条款;影像和地图数据提供方在地图上署名。
- 火山:史密森尼学会全球火山活动计划,Volcanoes of the World。
- 最近的模拟页面上的地图:OpenFreeMap 瓦片(OpenMapTiles 架构),数据 © OpenStreetMap 贡献者。
资料来源与数据
- Mapbox:Terrain-RGB v1 瓦片集参考
- Mapbox:Terrain-DEM v1 瓦片集参考
- Mapbox:服务条款
- OpenStreetMap:版权与许可
- Open Data Commons:开放数据库许可
- OpenStreetMap 基金会:Nominatim 使用政策
- OpenStreetMap Wiki:Overpass API
- 史密森尼学会全球火山活动计划:Volcanoes of the World
- OpenFreeMap 与 OpenMapTiles
- Glasstone 和 Dolan(1977):The Effects of Nuclear Weapons,第 3 版
- Newhall 和 Self(1982):The volcanic explosivity index (VEI),Journal of Geophysical Research 87
- 美国地质调查局:修正麦卡利烈度表
- 国家飓风中心:萨菲尔–辛普森飓风风力等级
- Willoughby 和 Rahn(2004):Parametric representation of the primary hurricane vortex,Monthly Weather Review 132
- Rappaport(2014):Fatalities in the United States from Atlantic tropical cyclones,Bulletin of the American Meteorological Society 95
- Collins、Melosh 和 Marcus(2005):Earth Impact Effects Program,Meteoritics & Planetary Science 40(一个更贴近物理的撞击模型,仅供对比;HazardSim 未使用)