使用R将坐标表转换为形状文件

时间:2014-05-21 13:20:09

标签: r shapefile

我在UTM区48中有一个点坐标数据集。

  x           y       
615028.3  2261614    
615016.3  2261635    
614994.4  2261652    

CSV文件here

我想加载CSV并使用R创建shapefile。我的代码是:

library(maptools)
library(rgdal)
library(sp)

    UTMcoor=read.csv(file="https://dl.dropboxusercontent.com/u/549234/s1.csv")
    coordinates(UTMcoor)=~X+Y
    proj4string(UTMcoor)=CRS("++proj=utm +zone=48") # set it to UTM
    LLcoor<-spTransform(UTMcoor,CRS("+proj=longlat")) #set it to Lat Long
    plot(LLcoor)
    points(LLcoor$X,LLcoor$Y,pch=19,col="blue",cex=0.8) #to test if coordinate can be plot as point map
    writeOGR(UTMcoor, dsn="c:/todel" ,layer="tsb",driver="ESRI Shapefile")
    writeSpatialShape("LLcoor","test")

在最后一个命令(writeSpatialShape)中,R给出以下错误:

Error in writeSpatialShape("LL2", "test") : 
  x is acharacterobject, not a compatible Spatial*DataFrame

当我从控制台读取LLcoor时,它似乎已经是一个Spatial DataFrame。使用writeOGR(RGdal包)编写形状文件也会产生类似的错误。非常感谢任何提示。

2 个答案:

答案 0 :(得分:4)

你的例子出了问题。倒数第二行也失败了。

无论如何,你的错误很清楚。您提供变量名称&#34; LL2&#34;而不是变量本身。但在您的示例中,LLcoorUTMcoor的格式都不适合writeOGRwriteSpatialShape。您需要先将它们转换为SpatialDataframe,例如:

UTMcoor.df <- SpatialPointsDataFrame(UTMcoor, data.frame(id=1:length(UTMcoor)))

答案 1 :(得分:1)

在@Matthew Plourde的建议之后,我使用了SpatialPointsDataFrame函数将UMTcoor转换为空间数据帧。这解决了我的问题。

writeOGR中还有一些小细节在我的原始脚本中不正确,第一个参数中的数据帧不应放在双括号中。

library(maptools)
library(rgdal)
library(sp)

filePath="https://dl.dropboxusercontent.com/u/549234/s1.csv"
UTMcoor=read.csv(file=filePath)
coordinates(UTMcoor)=~X+Y
proj4string(UTMcoor)=CRS("++proj=utm +zone=48") # set it to UTM
UTMcoor.df <- SpatialPointsDataFrame(UTMcoor, data.frame(id=1:length(UTMcoor)))
LLcoor<-spTransform(UTMcoor.df,CRS("+proj=longlat"))
LLcoor.df=SpatialPointsDataFrame(LLcoor, data.frame(id=1:length(LLcoor)))
writeOGR(LLcoor.df, dsn="c:/todel" ,layer="t1",driver="ESRI Shapefile")
writeSpatialShape(LLcoor.df, "t2")