R:将经度和纬度之一的单独数据帧组合成空间点

时间:2017-12-15 21:10:25

标签: r spatial

我有两个数据帧,每个1000 x 1000,一个数据帧(lon)带有经度,一个数据帧(lat)带有纬度,指定像素(或光栅)数组的坐标,我陷入了如何组合将两个数据帧合并为一个1000 x 1000空间点数据帧(或等效物)。空间点数据帧的第一个单元格将具有由lon [1,1]和lat [1,1]等指定的坐标。是否有一种简单的方法可以做到这一点?我想我可以逐列完成,然后按顺序将空间点对象绑定在一起,但这看起来有点长。有什么想法吗?

按照建议尝试:

lat.t <- data.frame(seq(10, 15, 1), seq(20, 25, 1), 
    seq(30, 35, 1),seq(40, 45, 1))
colnames(lat.t) <- c("1", "2", "3", "4")
lon.t <- data.frame(seq(90, 95, 1), seq(100, 105, 1), 
seq(110, 115, 1), seq(120, 125, 1))
colnames(lon.t) <- c("1", "2", "3", "4")
coords <- cbind(lon = unlist(lon.t), lat= unlist(lat.t))
sp.ob <- SpatialPoints(coords)

当我认为我需要一个4 x 4时,它会给出一个包含16行的两列sp.ob,以便lon / lat与光栅匹配。

如果我这样做:

coords <- cbind(lon =lon.t , lat= lat.t)
sp.ob <- SpatialPoints(coords)

我得到一个4 x 4但是前4列中的所有lon然后所有lat在最后4列中,并且我认为如果我查看内容,这不会给我正确的lon / lat对:

sp.ob[1]

例如。

3 个答案:

答案 0 :(得分:1)

试试这个:

lon <- data.frame(matrix(rnorm(10000), 100, 100))
lat <- data.frame(matrix(rnorm(10000), 100, 100))

cbind(lon = unlist(lon), lat = unlist(lat))

或者:

cbind(lon = unlist(t(lon)), lat = unlist(t(lat)))

取决于所需的订单(按行或按列)

答案 1 :(得分:0)

我最初的问题是关于如何将单独的lon / lat数据帧组合成一个,以便我可以添加这些数据框来指定栅格中的相关坐标。根本问题是我有一个tiff图像,表示1000 x 1000像素的极地立体(南极)投影和经度和纬度的单独文件,每个1000 x 1000元素与像素图像匹配。 @Gilles指出了一个简单的数据帧转换(基本R!),我可以使用它来转换1000 x 1000 lon / lat数据帧,以一种形式获得x和y坐标,我可以将这种形式与rastered tiff的数据帧转换相结合给一个xyz列的文件。然后我可以使用rasterFromXYZ来完成我的任务。但是,坐标不是很规则,但'griddify'可以解决这个问题。我最初的问题的答案非常感谢!

答案 2 :(得分:0)

  

根本问题是我有一个代表a的tiff图像   极地立体(南极)投影1000 x 1000像素和   经度和纬度的单独文件,每个1000 x 1000个元素   匹配像素图像

您需要做的是

library(raster)
r <- raster("file.tif")

检查坐标参照系(投影)

crs(r)

如果已经正确设置了极地立体感,那么你很高兴; 否则你可以用适当的描述来设置它。像

这样的东西
crs(r) <- "+proj=stere +lat_0=-90 +lon_0=0  +lat_ts=-71 +datum=WGS84 +units=m"

如果您想转换为经度/纬度,请尝试:

x <- projectRaster(r, "+proj=longlat +datum=WGS84")

有关其他参数,请参阅?projectRaster