这里http://www.bom.gov.au/climate/data/我可以输入一个变电站号码,比如009572;选择变量(比如温度)及其类型(比如最大值)。点击“获取数据”会将我带到一个带有“所有年份数据”链接的页面。单击它,你就有了一个zip文件。我知道this questions,但在这里我没有直接链接到zip文件。可以通过R?从澳大利亚气象局网站自动提取天气数据。
答案 0 :(得分:2)
我也有同样的问题和这个S.O.问题是最早出现的页面之一。进一步搜索后,我发现R包Bomrang(https://github.com/ropensci/bomrang)如下:
提供与澳大利亚政府局互动的功能 气象(BOM)数据,获取数据并返回整洁的数据帧 天气预报,当前气象站数据,农业 信息公告,历史天气数据以及下载和 导入雷达或卫星图像。
Bomrang是rOpenSci的一部分,并且正在积极开发中。它具有一系列好的功能:
bomrang提供了几种功能来检索澳大利亚文 气象局(BOM)数据。一族函数检索 天气数据和返回的整洁数据帧;
get_precis_forecast(), which retrieves the précis (short) forecast; get_current_weather(), which fetches the current weather for a given station; get_ag_bulletin(), which retrieves the agriculture bulletin; get_weather_bulletin(), which retrieves the BOM 0900 or 1500 bulletins; get_coastal_forecast(), which returns coastal waters forecasts; and get_historical(), which retrieves historical daily observations for a given station.
第二组功能检索与以下内容有关的信息 卫星和雷达图像,
get_available_imagery(); the satellite imagery itself, get_satellite_imagery(); get_available_radar(); and the radar imagery itself, get_radar_imagery().
函数get_historical()
似乎可以满足OP的需求。例如,要从悉尼的气象站获取历史每日降雨量很容易:
> rain_066062 <- bomrang::get_historical(stationid = 066062,
+ type = 'rain',
+ meta = T)
> head(rain_066062)
$`meta`
# A tibble: 1 x 10
site name lat lon start end years percent AWS ncc_obs_code
<int> <chr> <dbl> <dbl> <date> <date> <dbl> <int> <chr> <chr>
1 66062 SYDNEY (OBSERVATORY HILL) -33.9 151. 1858-07-01 2018-11-01 160. 100 Y 136
$historical_data
Product_code Station_number Year Month Day Rainfall Period Quality
1 IDCJAC0009 66062 1858 1 1 NA NA
2 IDCJAC0009 66062 1858 1 2 NA NA
3 IDCJAC0009 66062 1858 1 3 NA NA
4 IDCJAC0009 66062 1858 1 4 NA NA
5 IDCJAC0009 66062 1858 1 5 NA NA
<<SNIP>>
另一个不错的功能是,如果您有一个感兴趣的地方的经度和纬度,则get_historical()会找到距该位置最近的气象站。
要从CRAN安装:
install.packages("bomrang")
或从Github安装开发版本:
if (!require("remotes")) {
install.packages("remotes", repos = "http://cran.rstudio.com/")
library("remotes")
}
install_github("ropensci/bomrang", build_vignettes = TRUE)
答案 1 :(得分:1)
你可以尝试这个,它是metvurst包使用的代码序列。 metvurst
## SET URL FOR DATA DOWNLOAD
url <- "http://www.bom.gov.au/ntc/IDO70004/IDO70004_"
## YEARS TO BE DOWNLOADED
yr <- 1993:2012
## READ DATA FOR ALL YEARS FROM URL INTO LIST
fijilst <- lapply(seq(yr), function(i) {
read.csv(paste(url, yr[i], ".csv", sep = ""), na.strings = c(-9999, 999))
})
答案 2 :(得分:1)
以下是我立即下载的代码,它也解决了您的p_c问题。如果需要和发布,您可以改进功能。
#daily code = 136
#monthy code = 139
bomdata<- function(station,code){
for(i in 1: length(station)){
p.url<-paste("http://www.bom.gov.au/jsp/ncc/cdio/weatherData/av?p_stn_num=",station[i],"&p_display_type=availableYears&p_nccObsCode=",code,sep ="")
download.file(p.url,"test.txt")
filelist <- list.files(pattern = ".txt")
foo<- file(filelist,"r")
text<- suppressWarnings(readLines(foo))
close(foo)
l<- regexpr(":",text[1])
m<- unlist(gregexpr(",", text[1], perl = TRUE))
pc<- substr(text[1],l[[1]]+1,l[[1]]+(m[2]-(l[[1]]+1)))
url<-paste("http://www.bom.gov.au/jsp/ncc/cdio/weatherData/av?p_display_type=dailyZippedDataFile&p_stn_num=",station[i],"&p_c=",pc,"&p_nccObsCode=",code,"&p_startYear=2013", sep ="")
suppressWarnings(download.file(url,paste(station[i],".zip",sep= ""), mode = "wb"))
unlink("test.txt")
}
}
实施例
bomdata(073137,136)
答案 3 :(得分:0)
虽然我仍然无法通过download.file()看到如何执行此操作,但以下几乎所有工作提供Chrome的“在下载之前询问保存每个文件的位置”未被取消。
system(paste('"C:/Documents and Settings/UserName/Local Settings/Application Data/Google/Chrome/Application/chrome.exe"',
'-url http://www.bom.gov.au/jsp/ncc/cdio/weatherData/av?p_display_type=dailyZippedDataFile&p_stn_num=009572&p_c=-18465084&p_nccObsCode=136'), wait = FALSE)
然后我可以使用paste0()并循环浏览各种电台号码,如果我知道p_c = -18465084的含义以及它如何从一个站点变为另一个站点。