用 Wolfram 语言映射美国的山火

时间:2022-07-26
本文章向大家介绍用 Wolfram 语言映射美国的山火,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

野火最近已在美国多个州蔓延。加利福尼亚州遭受着历史上最大规模的野火之苦。俄勒冈州有20处大火,覆盖面积超过40万英亩。甚至华盛顿今年也不能幸免。

为了得到当前野火在哪里的感觉,我生成了一个调用的函数 WildfireData 其源数据来自美国宇航局的MODIS仪器登上了Terra和Aqua两颗卫星(代码包括在文章的结尾):https://modis.gsfc.nasa.gov/

这 WildfireData 函数可以通过以下全局 ResourceFunction URI进行访问:

WildfireData=ResourceFunction["user:arnoudb/DeployedResources/Function/WildfireData"]

现在,我们可以立即使用此函数从NASA获取当前可用的野火数据:

data=WildfireData[]

输出是具有几列的数据集。第一列包含野火观测的地理位置,第二列包含其亮度:

我们可以从在地图上绘制所有位置开始:

GeoGraphics[{Red,Point[data[All,"Location"]]}]

输出显示观察到的野火:

在此缩放级别上,南方似乎有很多野火,但是我们可以放大,例如密西西比州,以近距离观察:

ms=Entity["AdministrativeDivision",{"Mississippi","UnitedStates"}];
GeoGraphics[{Blue,Polygon[ms],Red,Point[data[All,"Location"]]},GeoRange->ms]

近距离来看,这些野火非常分散且独立:

我们可以将密西西比州和俄勒冈州进行比较,以了解两者之间的区别:

or=Entity["AdministrativeDivision",{"Oregon","UnitedStates"}];
GeoGraphics[{Blue,Polygon[or],Red,Point[data[All,"Location"]]},GeoRange->or]

俄勒冈州的野火数量更多:

我们可以放大任何区域,例如,洛杉矶市中心40英里以内的区域:

la=Entity["City",{"LosAngeles","California","UnitedStates"}];
GeoGraphics[{Red,Point[data[All,"Location"]]},GeoRange->GeoDisk[la,Quantity[40,"Miles"]]]

圣盖博山上有许多野火:

这些野火被称为山猫火(Twitter上的#bobcatfire):

在俄勒冈州塞勒姆以东还有大火:

area=Entity["City",{"Salem","Oregon","UnitedStates"}]
GeoGraphics[{Red,Point[data[All,"Location"]]},GeoRange->GeoDisk[area,Quantity[60,"Miles"]]]

这显示了一大堆野火:

不幸的是,西部的野火季节预计要到11月才能结束。到目前为止,仅在加利福尼亚州,就有超过300万英亩的土地被烧毁,估计成本为8亿美元。俄勒冈州损失了60万英亩,华盛顿损失了500,000英亩。

WildfireData 函数的代码:

WildfireData[] := Module[{base, csv1, csv2, csv, ds},
  base = "https://firms.modaps.eosdis.nasa.gov/data/active_fire/c6/
csv/"; csv1 = 
   Once[Import[
     URLBuild[{base, "MODIS_C6_USA_contiguous_and_Hawaii_24h.csv"}]]];
  csv2 = Once[Import[URLBuild[{base, "MODIS_C6_Alaska_24h.csv"}]]];
  csv = If[Length[csv2] > 1, Join[csv1, csv2], csv1];
  ds = Dataset[Map[
     <|
       "Location" -> GeoPosition[{First[#], #[[2]]}],
       "Brightness" -> #[[3]],
       "Scan" -> #[[4]],
       "Track" -> #[[5]],
       "AcquisitionDate" -> 
        DateObject[{#[[6]] <> " " <> 
           IntegerString[#[[7]], 10, 4], {"Year", "-", "Month", "-", 
           "Day", " ", "Hour", "Minute"}}],
       "Satellite" -> #[[8]],
       "ConfidenceFraction" -> #[[9]]/100.,
       "Version" -> #[[10]],
       "BrightnessT31" -> #[[11]],
       "FRP" -> #[[12]],
       "DayNight" -> #[[13]]|> &, Rest[csv]]
    ]
  ]