模拟器

HazardSim 如何计算

模拟器显示的每一个数字,都来自几条简短的公式和少数几个开放数据集。本页准确描述代码做了什么,包括那些只是粗略近似的部分。

更新于 2026年9月18日

HazardSim 只回答一个问题:如果某种规模的灾难发生在这里,它会波及多大范围,那里住着多少人?它不判断这样的事件在此地是否可能、概率多大。规模由你选择;网站用几条简单规则把它套用到真实的地形和聚落上,这些规则连同代码中的常数一起列在下面。

1 米 / 250 米海啸每向内陆推进 250 米损失的高度
0.6 米与格网边缘相连、且不高于此高程的地形被视为海洋
11–30 公里/秒可设定的陨石进入速度;默认 17 公里/秒
8 公里所有地震统一采用的震源深度
1,560来自史密森尼全球火山活动计划的火山记录
60 /km²远离城市处的背景人口密度

模拟器回答什么,不回答什么

没有断层模型来判定某段海岸能否产生 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 是以米计的浪高。如果水位高于地面,该单元被淹,深度为水位 − 地面高程,水继续前进;否则该单元保持干燥并挡住去路。所以水只能通过一连串被淹单元到达某个单元,高于水面的山脊会保护身后的地面,除非有路可以绕过去。

洪水模型如何判断哪里会被淹
示意剖面;每 250 米降 1 米是代码中的常数
0 5 10 15 米 岸边浪高 15 米 高于水面的山丘挡住水 每 250 米降 1 米 被淹 山后保持干燥 海 0 1 2 3 4 距海岸,公里
山后的低地低于水位,但填充永远到不了那里。在真实地图上,水仍可能绕过山丘的尽头抵达。

这种衰减代替了地形和建筑的摩擦。它是全球统一的一个数字,不是物理定律:在海平面高度的平地上,15 米的浪在内陆 3.75 公里处停下,30 米的浪在 7.5 公里处。同一高度同时作用于格网内的整条海岸线,所以没有波浪方向、没有海底地形、没有海湾的汇聚效应、没有有限的水量,也没有第二波。如果水触及格网边缘,结果会提示真实的洪水还会更远。

向仙台送去一道 15 米的浪 →

海平面上升:同一引擎,去掉衰减

海平面上升运行的是同一套代码,只是关闭了衰减:所有与海洋相连且低于新水位的单元都会被淹,无论离内陆多远,这常被称为浴缸模型。低于新水位的盆地,如果被更高的地面完全环绕,就保持干燥。堤坝只有出现在高程数据中且宽于一个单元时才算数。没有潮汐、风暴潮、侵蚀或地面沉降,也没有时间线。被淹土地上的所有居民不计为死亡,而计为流离失所。另见海平面上升会淹没哪些城市。

地震:围绕一点的烈度圈

地震是位于你点击处、深 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 度的上限。

模型中烈度随距离的变化
修正麦卡利烈度,震源深度固定为 8 公里
III IV V VI VII VIII IX X XI XII 0 40 80 120 160 距震中距离,公里 VIII:严重破坏 V:有感 M6 M7 M8
按模拟器代码中的公式计算。

每个区域有一个死亡比例,再乘以建筑系数:现代抗震规范 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:明显有感000

真实的 9 级地震会使几百公里长的断层破裂,所以强烈震动覆盖的是一条带,而不是一个圆。松软土层、液化、滑坡和火灾都被忽略,而且所有地震都是浅源的;深源地震的震感会弱得多。

太子港地下的 7 级地震,建筑质量较差 →

火山:从 VEI 到三个圆

火山爆发指数被换算成喷出物体积:V = 10VEI−5 立方公里,所以 VEI 5 为 1 立方公里,每升一级增加十倍。对 VEI 2 到 8,这等于 Newhall 和 Self(1982)标度中每一级的最小体积;VEI 1 取 0.0001 立方公里。由此得到三个半径:

这些幂律是本站自己的经验拟合。

不同喷发规模的危害半径
公里,对数坐标
1 10 100 1,000 公里 1 2 3 4 5 6 7 8 VEI 火山灰 1 厘米 1,122 公里 火山灰 10 厘米 293 公里 火山碎屑流 51 公里
按模拟器代码中的公式计算。

真实的碎屑流沿山谷流动,真实的火山灰随风飘成长长的烟羽,所以实际的影响范围是偏斜的,而不是圆形。火山泥流、气体、崩塌引发的海啸和气候效应都没有建模。

维苏威火山的一次 VEI 5 喷发 →

陨石:能量与冲击波缩放

天体是直径为 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.47.2 公里100%
完全摧毁(20 psi)2.2·Y1/312.5 公里90%
建筑被毁(5 psi)4.6·Y1/326 公里45%
严重烧伤1.83·Y0.4115.5 公里18%
玻璃震碎(1 psi)11.6·Y1/366 公里0.5%

冲击波半径随当量的立方根增长,这是 Glasstone 和 Dolan 的《The Effects of Nuclear Weapons》中的冲击波缩放定律;系数和火球幂律是本站自己的校准。热的处理与核爆炸不同:撞击只把很小一部分能量以光的形式辐射出去,约为 0.3%,而核武器约为 35%,所以烧伤半径对 0.0086·Y 的热当量套用核爆烧伤公式(12.8·Y0.41),得到 1.83·Y0.41。由于死亡比例不应随距离增加,每个区域的比例至少被提高到其外侧区域的值。

海洋撞击及其海啸,以及一公里以上天体的全球效应都没有建模;参见不同大小的陨石各会造成什么后果。

把 19 米的车里雅宾斯克天体投向车里雅宾斯克 →

飓风:风暴潮与风廓线

滑块设定登陆时的持续风速,从 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%,强风为零。

风暴是对称的,并且不移动:真实的风暴潮在北半球路径的右侧最高,暴雨洪水、潮汐、叠加在风暴潮上的海浪以及堤坝都没有建模。

把卡特里娜 8.5 米的风暴潮带到新奥尔良 →

人口如何统计

城市的密度适用于一个与城市面积相同的圆内(未找到城市时半径为 6 公里)。圆外,密度向每平方公里 60 人衰减,这是有人居住土地的粗略平均值:

密度(r) = 60 + (D − 60)·e−(r − R)/(0.8R + 2)

其中 D 是滑块密度,R 是城市半径,r 是以公里计的距离。没有这个公式,一颗 1 公里的陨石杀死的人会比地球上的总人口还多。

各距离处采用的人口密度
每平方公里人数,城市密度 4,000 /km²,半径 6 公里
0 1,000 2,000 3,000 4,000 0 10 20 30 40 50 距中心距离,公里 城市密度:4,000 /km² 城市边缘 下限:60 /km²
出自代码:密度每隔 0.8 × 半径 + 2 公里下降为原来的 1/e,此处为 6.8 公里。

洪水。每个被淹单元贡献:单元面积 × 密度 × 随水深变化的死亡比例,距离从地形格网的中心而不是你点击的位置量起。海平面上升的比例为 1,报告为流离失所。

不同水深下的死亡比例
海啸模型,线性坐标
  1. 0.3 米以下0.5%
  2. 0.3–1 米5%
  3. 1–2 米18%
  4. 2–3.5 米38%
  5. 3.5–6 米58%
  6. 6 米及以上72%
本站自定的阶梯值,出自模拟器代码。

圆环。对于地震、喷发和撞击,最外圈内的圆盘被切成 800 个细环,每个环贡献 2πr × 宽度 × 密度 × 陆地比例(地形格网中高于 0.6 米的单元所占比例)。与此同时,如果外半径不超过 450 公里,代码会向 Overpass API 请求该点周围一个正方形内所有带人口标签的城市和城镇。只要找到任何一个,背景密度就降到每平方公里 60 人,每座城镇的全部人口按其中心点的距离加入。先显示一个快速估计,列表到达后再加以修正。

总数上限为 82 亿。假设所有人都在家中,未获预警,也没有撤离。

局限:为什么这些只是数量级

用结果来区分几百和几十万,或者看一座城市哪些部分地势低,而不要把它当作精确计数。

数据许可与署名

资料来源与数据

  1. Mapbox:Terrain-RGB v1 瓦片集参考
  2. Mapbox:Terrain-DEM v1 瓦片集参考
  3. Mapbox:服务条款
  4. OpenStreetMap:版权与许可
  5. Open Data Commons:开放数据库许可
  6. OpenStreetMap 基金会:Nominatim 使用政策
  7. OpenStreetMap Wiki:Overpass API
  8. 史密森尼学会全球火山活动计划:Volcanoes of the World
  9. OpenFreeMap 与 OpenMapTiles
  10. Glasstone 和 Dolan(1977):The Effects of Nuclear Weapons,第 3 版
  11. Newhall 和 Self(1982):The volcanic explosivity index (VEI),Journal of Geophysical Research 87
  12. 美国地质调查局:修正麦卡利烈度表
  13. 国家飓风中心:萨菲尔–辛普森飓风风力等级
  14. Willoughby 和 Rahn(2004):Parametric representation of the primary hurricane vortex,Monthly Weather Review 132
  15. Rappaport(2014):Fatalities in the United States from Atlantic tropical cyclones,Bulletin of the American Meteorological Society 95
  16. Collins、Melosh 和 Marcus(2005):Earth Impact Effects Program,Meteoritics & Planetary Science 40(一个更贴近物理的撞击模型,仅供对比;HazardSim 未使用)