R:如何从SpatialPointsDataFrame写入XYZ文件?

时间:2013-06-27 11:32:02

标签: r spatial

我有一个SpatialPointsDataFrame,它有一个属性(为方便起见,我们称之为z)以及纬度/经度坐标。

我想将其写入XYZ文件(即具有三列的ASCII文件)。

最初我试过

write.table(spdf, filename, row.names=FALSE)

但是这首先在每一行写了z值,然后是坐标。所以它是ZXY格式而不是XYZ格式。也许并不是什么大不了的事,但对于那些不得不使用该文件的人来说很烦人。

目前我正在使用感觉真是太可怕的蠢事(如下所示),但我的问题是:是否有一种好的,直接的方式将SPDF写成XYZ,列的顺序正确?好像它应该很容易!

感谢您的任何建议。

Bodge:

dfOutput <- data.frame(x = coordinates(spdf)[,1], y = coordinates(spdf)[,2])
dfOutput$z <- data.frame(spdf)[,1]
write.table(dfOutput, filename, row.names=FALSE)

3 个答案:

答案 0 :(得分:3)

为什么不

library(sp)
spdf <- SpatialPointsDataFrame(coords=matrix(rnorm(30), ncol = 2), 
                               data=data.frame(z = rnorm(15)))


write.csv(cbind(coordinates(spdf), spdf@data), file = "example.csv", 
          row.names = FALSE)

答案 1 :(得分:2)

您可以使用writeOGR包中的rgdal写入.shp文件。或者,您可以fortify(来自ggplot2)您的数据并将其写为csv文件。

答案 2 :(得分:1)

紧跟着Noah对类似coordinates的方法的评论,但仅涉及数据值:raster包具有getValues()方法,用于返回SpatialPointsDataFrame的值。

library(raster)

spdf <- raster('raster.sdat')
write.table(
    cbind(coordinates(spdf), getValues(spdf)), 
    file = output_file, 
    col.names = c("X", "Y", "ZVALUE"),
    row.names = FALSE,
    quote = FALSE
    )