我有一组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。
答案 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)
请注意,栅格长度投影是由栅格函数自动拾取的。希望这是你正在寻找的。 p>