rDGAL,Tiff文件和WorldFile

时间:2017-02-07 21:57:26

标签: latitude-longitude pixel sp rgdal map-projections

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

的SpatialGridDataFrame读入
imageData   = readGDAL( fileNameDir, silent = TRUE )

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

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

我寻求关于像素到纬度/经度投影的建议和指导。 fileginDir的readGDAL示例的数据文件和World File格式的文档在上面的超文本链接中提供。我不得不将文件扩展名从* .png更改为* .tiff。

1 个答案:

答案 0 :(得分:1)

通常情况下,如果你知道你的数据是投影的,但是这个投影不是你的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)

请注意,栅格长度​​投影是由栅格函数自动拾取的。希望这是你正在寻找的。