我正在尝试使用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之后,我进行了一些挖掘,并提出了以下功能。您可以在此处输入LongitudeLatitude值。请注意,这仅在您要基于纬度和经度下载文件时有用。
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的文件,该文件通常包含一个同名的tifhdrtfw文件。照常使用它们进行进一步处理。

编辑日期,19年1月22日:
更改了srtm链接(以及上面的代码),上面的代码已进行了修改以反射(reflect)这一点。

关于r - 使用栅格数据包下载SRTM数据吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47997347/

10-12 17:48