其他
R语言+QGIS处理NOAA全球气象数据(一)气象站点信息提取
气象站点数据是地理相关研究非常重要的数据,由于国内数据共享程度低,获取困难,那么,没办法了吗?气象数据共享靠美帝啊。
发现一个很方便的R包,可以获取NOAA数据,不光是这个ISD气象数据,其他也可以。
R语言获取ISD站点信息
R语言有一个rnoaa
包,很神奇,可以直接下载NOAA数据。安装好这个包之后,加载包,就可以使用了。
搜索中国及周边区域气象站
为了方便查找中国区域的NOAA数据,我将中心点设置为经纬度103,36,搜索半径4000公里,搜索气象站点。代码如下:
library(tidyverse)
library(rnoaa)
library(rstatatools)
devtools::install_local("rstatatools.zip")
#获取气象站
x <- isd_stations_search(lat = 36, lon = 103, radius = 4000) #中国中心经纬度103,36,扩展4000公里
if (requireNamespace("leaflet")) {
library("leaflet")
leaflet() %>%
geoqmap(attribution = "走天涯徐小洋地理数据科学") %>%
addCircles(lng = x$lon,
lat = x$lat,
popup = x$station_name) %>%
clearBounds()
}
获取的站点信息以数据框形式存储,可以看出内容很丰富:
usaf:站点编号 wban:WBAN编码 station_name:气象站名称 ctry:站点所在国家 lat:经度 lon:纬度 elev_m:高程,单位:米 begin:数据开始时间YYYYMMDD,年月日 end:数据结束时间 distance:应该是和指定的起始点(103,36)的距离,公里
筛选中国气象站
看到上面下载的内容,筛选中国气象站就不难了,直接根据ctry字段筛选,CH的,我对筛选结果进行了输出,存储为csv文件。
#获取中国境内气象站
x_cn = x %>%
filter(ctry=="CH")
#预览中国境内气象站
leaflet() %>%
addTiles() %>%
addCircles(lng = x_cn$lon,
lat = x_cn$lat,
popup = x_cn$station_name) %>%
clearBounds()
write.csv(x_cn, file = "stationinfo.csv")
QGIS筛选气象站
感觉R里面交互不太方便,所以我把站点数据导出后,在QGIS中交互,查看站点信息,筛选,等等……
加载站点
前面已经将站点信息导出为csv,在QGIS里面很容易转为点。
为了看着方便,我使用QuickMapServices插件加了高德注记和ESRI影像底图。
交互式查看
QGIS里面交互查看站点信息就方便多了,使用识别要素Identify Feature工具点击对应的气象站,就可以查看对应的气象站信息。
按年份筛选站点
想看看哪些站点有2021年以后的数据,打开属性表,按表达式选择一下。
"end" > 20210000
结果可以发现,2021年以后有观测数据的站点共有407个。
选择2000-2021年都有数据的站点,共有380个
"end" > 20210000 and "begin" <=20000000
好了,这部分内容就到这里,后面开始使用rnoaa
下载ISD气象站点数据。
参考文献
https://cran.r-project.org/web/packages/rnoaa/index.html https://www.ncei.noaa.gov/products/land-based-station/integrated-surface-database GIS基础之GIS属性表操作
阅读原文参加对应视频课程学习