按R中的邮政编码列表区域下载天气数据

按R中的邮政编码列表区域下载天气数据,r,download,weather,R,Download,Weather,我想知道如何通过邮政编码制表区(ZCTA)下载天气(温度、辐射等)。尽管ZCTA提供了人口普查数据,但天气数据并非如此 我试着从网上找到信息 但是我想不出来 你们有人下载过ZCTA的天气数据吗?如果没有,是否有人有将气象观测站信息转换为ZCTA的经验 天气数据仅适用于气象站,每个ZCTA没有一个气象站(ZCTA比气象站覆盖的区域小得多) 我在美国国家海洋和大气管理局的网站上看到了一些选项,在那里你可以输入纬度和经度,它可以从相应的气象站找到天气。因此,如果你能将你感兴趣的ZCTA转换成lat/l

我想知道如何通过邮政编码制表区(ZCTA)下载天气(温度、辐射等)。尽管ZCTA提供了人口普查数据,但天气数据并非如此

我试着从网上找到信息 但是我想不出来


你们有人下载过ZCTA的天气数据吗?如果没有,是否有人有将气象观测站信息转换为ZCTA的经验

天气数据仅适用于气象站,每个ZCTA没有一个气象站(ZCTA比气象站覆盖的区域小得多)


我在美国国家海洋和大气管理局的网站上看到了一些选项,在那里你可以输入纬度和经度,它可以从相应的气象站找到天气。因此,如果你能将你感兴趣的ZCTA转换成lat/lon对(中心、随机角等),你可以将其提交到网站。但请注意,如果您这样做是为了大量的ZCTA的是紧密在一起,您将下载冗余信息。最好将ZCTA与气象站进行一次匹配,然后只从每个站下载一次天气信息,然后与ZCTA数据合并。

国家气象局提供了两个基于web的API,用于从国家数字预报数据库(NDFD)、a和a中提取天气预报信息。两者都以(DWML)格式返回数据,这是一种XML方言。列出了可以返回的数据元素

在我看来,REST接口是最容易使用的。下面是一个示例,我们以3小时为增量提取邮政编码10001(曼哈顿下城)未来5天的预测温度、相对湿度和风速

# NOAA NWS REST API Example
# 3-hourly forecast for Lower Mannhattan (Zip Code: 10001)
library(httr)
library(XML)
url <- "http://graphical.weather.gov/xml/sample_products/browser_interface/ndfdXMLclient.php"
response <- GET(url,query=list(zipCodeList="10001",
                               product="time-series",
                               begin=format(Sys.Date(),"%Y-%m-%d"),
                               Unit="e",
                               temp="temp",rh="rh",wspd="wspd"))
doc   <- content(response,type="text/xml")   # XML document with the data
# extract the date-times
dates <- doc["//time-layout/start-valid-time"]
dates <- as.POSIXct(xmlSApply(dates,xmlValue),format="%Y-%m-%dT%H:%M:%S")
# extract the actual data
data   <- doc["//parameters/*"]
data   <- sapply(data,function(d)removeChildren(d,kids=list("name")))
result <- do.call(data.frame,lapply(data,function(d)xmlSApply(d,xmlValue)))
colnames(result) <- sapply(data,xmlName)
# combine into a data frame
result <- data.frame(dates,result)
head(result)
#                 dates temperature wind.speed humidity
# 1 2014-11-06 19:00:00          52          8       96
# 2 2014-11-06 22:00:00          50          7       86
# 3 2014-11-07 01:00:00          50          7       83
# 4 2014-11-07 04:00:00          47         11       83
# 5 2014-11-07 07:00:00          45         14       83
# 6 2014-11-07 10:00:00          50         16       61
#NOAA NWS REST API示例
#下曼哈坦3小时预测(邮编:10001)
图书馆(httr)
库(XML)

url要将NOAA QCLCD数据转换为邮政编码,您需要使用station.txt文件中的纬度/经度值,并将其与人口普查数据进行比较。这只能通过与GIS相关的工具来完成。我的解决方案是使用启用的数据库,以便您可以使用以下功能:

ST_MakePoint(longitude, latitude)
然后,您还需要将人口普查局的ZCTA加载到数据库中,以确定哪些邮政编码包含哪些站点。该函数将对此有所帮助

ST_Contains(zip_way, ST_MakePoint(longitude, latitude))
完整查询可能如下所示:

SELECT s.wban, z.zip5, s.state, s.location
   FROM public.station s
   INNER JOIN public.zip z 
       ON ST_Contains(z.way, ST_MakePoint(s.longitude, s.latitude)
我显然是在对列名进行假设,但上面的内容应该是一个很好的起点


您也应该能够使用QGIS(免费)或ArcGIS(昂贵)完成相同的任务。这样就省去了安装支持PostGIS的数据库的开销,但我对这些软件包中所需的步骤不太熟悉。

谢谢!好建议!将400多个ZCTA与气象站匹配可能是一件痛苦的事情,但如果它可以在将来重用,那么它是值得的。感谢分享您的代码!我的问题是我需要超过16年的每小时温度(辐射)数据超过400 zcta。我可能需要弄清楚如何将气象站与zcta匹配,以及如何在每个月批量下载数据。