在R中创建Shapefile

时间:2013-04-12 02:51:26

标签: r gis shapefile

我正在尝试在R中创建一个shapefile,稍后我将导入Fusion Table或其他一些GIS应用程序。

首先,我导入了一个包含加拿大所有人口普查区的空白shapefile。我已经根据CT的唯一ID将其他数据(以表格格式)附加到shapefile,并且我已经映射了我的结果。目前,我只需要在温哥华的那些,我想导出一个只包含Vancouver CTs的shapefile以及我新添加的属性数据。

这是我的代码(由于隐私原因,某些部分被省略):

shape <- readShapePoly('C:/TEST/blank_ct.shp') #Load blank shapefile
shape@data = data.frame(shape@data, data2[match(shape@data$CTUID, data2$CTUID),]) #data2 is my created attributes that I'm attaching to blank file
shape1 <-shape[shape$CMAUID == 933,] #selecting the Vancouver CTs

我见过其他使用它的例子: writePolyShape 来创建shapefile。我试过了,它在一定程度上起作用了。它创建了.shp,.dbf和.shx文件。我错过了.prj文件,我不知道如何创建它。是否有更好的方法来创建shapefile?

非常感谢任何有关此事的帮助。

2 个答案:

答案 0 :(得分:8)

使用rgdalwriteOGRrgdal将保留投影信息

类似

library(rdgal)

shape <- readOGR(dsn = 'C:/TEST', layer = 'blank_ct')
# do your processing
shape@data = data.frame(shape@data, data2[match(shape@data$CTUID, data2$CTUID),]) #data2 is my      created attributes that I'm attaching to blank file
shape1 <-shape[shape$CMAUID == 933,]
writeOGR(shape1, dsn = 'C:/TEST', layer ='newstuff', driver = 'ESRI Shapefile')

请注意,dsn是包含.shp文件的文件夹,layer是没有.shp扩展名的shapefile的名称。它将读取(readOGR)并写入(writeOGR)所有组件文件(.dbf.shp.prj等)

答案 1 :(得分:4)

问题解决了!再次感谢那些帮助的人!

这是我最终做的事情:

正如Mnel所写,这一行将创建shapefile。

writeOGR(shape1, dsn = 'C:/TEST', layer ='newstuff', driver = 'ESRI Shapefile')

但是,当我运行此行时,它会返回此错误:

Can't convert columns of class: AsIs; column names: ct2,mprop,mlot,mliv

这是因为我的属性数据不是数字,而是字符。幸运的是,我的属性数据是所有数字,所以我运行transform()来解决这个问题。

shape2 <-shape1
shape2@data <- transform(shape1@data, ct2 = as.numeric(ct2),
mprop = as.numeric(mprop),
mlot = as.numeric(mlot),
mliv = as.numeric(mliv))

我再次尝试了writeOGR()命令,但我仍然没有得到我正在寻找的.prj文件。问题是我在导入文件时没有指定shapefile的坐标系。由于我已经知道坐标系是什么,所以我所要做的就是在导入时定义它。

readShapePoly('C:/TEST/blank_ct.shp',proj4string=CRS("+proj=longlat +datum=WGS84")

之后,我重新运行了我想用shapefile做的所有事情,以及用于导出的writeOGR行。就是这样!