我正在尝试使用R中的“raster
”包获取SRTM数据,但是一旦我在getData命令中选择SRTM
,我就会得到以下错误:
library(raster)
srtm <- getData('SRTM', lon=16, lat=48)
trying URL 'ftp://xftp.jrc.it/pub/srtmV4/tiff/srtm_40_03.zip'
trying URL 'http://hypersphere.telascience.org/elevation/cgiar_srtm_v4/tiff/zip/srtm_40_03.ZIP'
downloaded 572 bytes
Error in .SRTM(..., download = download, path = path) : file not found
In addition: Warning messages:
1: In utils::download.file(url = aurl, destfile = fn, method = "auto", :
URL 'ftp://xftp.jrc.it/pub/srtmV4/tiff/srtm_40_03.zip': status was 'Couldn't resolve host name'
2: In utils::unzip(zipfilename, exdir = dirname(zipfilename)) :
error 1 in extracting from zip file
任何想法这是什么错误?
最佳答案
我有同样的问题,这似乎是一个错误。 getData
软件包中的raster
函数检查三个不同url中栅格文件的可用性。
1. ftp://xftp.jrc.it/pub/srtmV4/tiff/FILENAME
2. http://hypersphere.telascience.org/elevation/cgiar_srtm_v4/tiff/zip/FILENAME
3. http://srtm.csi.cgiar.org/SRT-ZIP/SRTM_V41/SRTM_Data_GeoTiff/FILENAME
其中的前两个(截至今天)不起作用或无法访问。但是由于某种原因,少量数据正在跨服务器传输,因此程序包假定它是可用文件,仅通过
utils
会出错。但是,第三个网址是三个中最受信任的网址。在略微修改了
raster
包本身以使其使用第三个URL之后,我进行了一些挖掘,并提出了以下功能。您可以在此处输入Longitude
和Latitude
值。请注意,这仅在您要基于纬度和经度下载文件时有用。SRTM<-function(lon, lat) {
stopifnot(lon >= -180 & lon <= 180)
stopifnot(lat >= -60 & lat <= 60)
rs <- raster(nrows=24, ncols=72, xmn=-180, xmx=180, ymn=-60, ymx=60 )
rowTile <- rowFromY(rs, lat)
colTile <- colFromX(rs, lon)
if (rowTile < 10) { rowTile <- paste('0', rowTile, sep='') }
if (colTile < 10) { colTile <- paste('0', colTile, sep='') }
f <- paste('srtm_', colTile, '_', rowTile, sep="")
theurl <- paste("http://srtm.csi.cgiar.org/wp-content/uploads/files/srtm_5x5/TIFF/", f, ".ZIP", sep="")
utils::download.file(url=theurl, destfile='srtm_40_0.zip', method="auto", quiet = FALSE, mode = "wb", cacheOK = TRUE)
}
例子:
SRTM(lon=16, lat=48)
这将在您的文件夹中生成一个名为
srtm_40_03.zip
的文件,该文件通常包含一个同名的tif
,hdr
和tfw
文件。照常使用它们进行进一步处理。编辑日期,19年1月22日:
更改了srtm链接(以及上面的代码),上面的代码已进行了修改以反射(reflect)这一点。
关于r - 使用栅格数据包下载SRTM数据吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47997347/