我试图找出如何通过邮政编码制表区(ZCTA)下载天气(温度,辐射等)。尽管人口普查数据具有ZCTA的人口普查信息,但天气数据并非如此。
我尝试从http://cdo.ncdc.noaa.gov/qclcd/QCLCD?prior=N查找信息 但无法理解。
有没有人曾经通过ZCTA下载过天气数据?如果没有,有没有人有过将天气观测站信息转换为ZCTA的经验?
答案 0 :(得分:1)
国家气象局提供两个基于网络的API,用于从国家数字预报数据库(NDFD),SOAP interface和REST interface中提取天气预报信息。两者都以Digital Weather Markup Language(DWML)返回数据,这是一种XML方言。可以返回的数据元素列在here。
IMO REST界面到目前为止更容易使用。下面是我们在接下来的5天内以3小时为增量提取邮政编码10001(曼哈顿下城)的预报温度,相对湿度和风速的示例。
# 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
可以在单个请求中查询多个邮政编码,但这会使解析返回的XML变得复杂。
答案 1 :(得分:1)
要将NOAA QCLCD数据转换为邮政编码,您需要使用station.txt文件中的纬度/经度值,并将其与人口普查中的数据进行比较。这只能通过GIS相关工具完成。我的解决方案是使用启用了PostGIS的数据库,以便您可以使用ST_MakePoint函数:
ST_MakePoint(longitude, latitude)
然后,您需要将人口普查局的ZCTA加载到数据库中,以确定哪些邮政编码包含哪些电台。 ST_Contains函数将有助于此。
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的数据库的开销,但我不熟悉这些软件包中的必要步骤。
答案 2 :(得分:0)
天气数据仅适用于气象站,每个ZCTA没有气象站(ZCTA比气象站覆盖的地区小得多)。
我在noaa网站上看到过您可以输入纬度和经度的选项,它会从适当的气象站找到天气。因此,如果您可以将您感兴趣的ZCTA转换为纬度/经度(中心,随机角等),您可以将其提交给网站。但请注意,如果您为大量紧密相连的ZCTA执行此操作,则会下载冗余信息。最好将ZCTA与气象站进行一次匹配,然后只从每个站下载一次天气信息,然后与ZCTA数据合并。