rDGAL、Tiff 文件和 WorldFile

rDGAL, Tiff Files, and WorldFile

我有一组 tiff 文件,在 Iowa State University 的像素位置显示整个美国大陆的对流天气(NAD83 投影)。我的目标是将像素位置转换为 lat/lon 数据。我将 tiff 文件数据作为 SpatialGridDataFrame 读入...

imageData   = readGDAL( fileNameDir, silent = TRUE )

我在某处读到,如果 tiff 文件中不存在投影数据,readGDAL 将寻找一个世界文件,因此我创建了一个包含必要信息的文件 (nad83WorldFile.wld),see info at ESRI。我将 wld 文件放在与我的 R 脚本相同的目录中。 wld 文件的系数是:

A = 0.01 
B = 0.0 
C = 0.0 
D = -0.01 
E = -126.0 
F = 50.0

我寻求有关像素到 lat/lon 投影的建议和指导。上面的超文本链接中提供了 fileNameDir 的 readGDAL 示例的数据文件和有关世界文件格式的文档。我不得不将文件扩展名从 *.png 更改为 *.tiff。

通常,如果您知道您的数据是投影的,但该投影不是您的 tif 文件的一部分,您可以在导入后简单地将它添加到您的 R 对象中:

proj4string(imageData) <- CRS("your projection")

我喜欢为此使用 EPSG,例如,如果您的 tif 在 GoogleEarth 投影中,我会这样做:

proj4string(imageData) <- CRS("+init=EPSG:4326")

只要找到你的 NAD83 精确投影是什么(这个网站可以帮助 http://spatialreference.org/)。

然后您可以在您选择的投影中重新投影它:

imageDataProj <- spTransform(imageDataProj, CRS("your new projection"))

附带说明一下,我总是更喜欢使用 raster 包来处理光栅格式。但是,用 R 更改大光栅文件的投影可能很挑剔,所以现在我直接使用 GDAL(通过 gdalwarp)。您可以使用 gdalUtils 包在 R 中很容易地调用所有 gdal 选项,但您必须事后将结果导入回 R。

根据 OP 的评论进行编辑:

使用光栅包:

library(raster)

正在加载 tif:

rr <- raster("C:\temp\n0r_201601011100.tif")

在函数中保存您的像素坐标方程。注意到我更改了 Lat 函数(删除了负号,它不起作用,你必须验证它)

Lon = function(JJ) 0.01 * JJ + 162
Lat = function(II) 0.01 * II + 50.0

以像素坐标获取原始栅格的范围:

ext.rr <- extent(rr)

准备要投影的新空栅格,具有良好的分辨率和范围:

rr2 <- raster(nrows=nrow(rr), ncols=ncol(rr), xmn=Lon(ext.rr@xmin), xmx=Lon(ext.rr@xmax), ymn=Lat(ext.rr@ymin), ymx=Lat(ext.rr@ymax))

用您修改后的值填充这个新栅格(按照您在评论中给出的等式):

values(rr2) <- (values(rr) - 7) * 5

你得到:

rr2
   class       : RasterLayer 
   dimensions  : 2600, 6000, 15600000  (nrow, ncol, ncell)
   resolution  : 0.01, 0.01  (x, y)
   extent      : 162, 222, 50, 76  (xmin, xmax, ymin, ymax)
   coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
   data source : in memory
   names       : layer 
   values      : -35, 50  (min, max)

请注意 lat-long 投影由栅格函数自动 pick-up。希望这就是您要找的。