我在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包)编写形状文件也会产生类似的错误。非常感谢任何提示。
答案 0 :(得分:4)
你的例子出了问题。倒数第二行也失败了。
无论如何,你的错误很清楚。您提供变量名称&#34; LL2&#34;而不是变量本身。但在您的示例中,LLcoor
和UTMcoor
的格式都不适合writeOGR
或writeSpatialShape
。您需要先将它们转换为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")