和包中的Spatial
对象有转换器函数可用于此目的。shapefile 至少由每个对象的点(或线或多边形)和属性组成。spatstat
maptools
library(spatstat)
library(sp)
library(maptools)
data(bei)
强制bei
到一个Spatial
对象,这里只是没有属性的点,因为对象上没有“标记” ppp
。
spPoints <- as(bei, "SpatialPoints")
shapefile 至少需要一列属性数据,因此请创建一个虚拟文件。
dummyData <- data.frame(dummy = rep(0, npoints(bei)))
使用SpatialPoints
对象和虚拟数据,生成一个SpatialPointsDataFrame
.
spDF <- SpatialPointsDataFrame(spPoints, dummyData)
在这一点上,您绝对应该考虑使用的坐标系bei
是什么以及您是否可以用WKT CRS
(众所周知的文本坐标参考系)来表示它。Spatial
您可以将它作为另一个参数分配给对象SpatialPointsDataFrame
,或者在 create with 之后分配proj4string(spDF) <- CRS("+proj=etc...")
(但这是一个完全独立的问题,我们可以在上面写页面)。
加载rgdal
包(这是最通用的选项,因为它支持多种格式并使用 GDAL 库,但由于系统依赖性可能不可用。
library(rgdal)
(如果没有,请writePolyShape
在maptools
包装中使用)。rgdal
语法是对象,然后是“数据源名称”(这里是当前目录,可以是 .shp 或文件夹的完整路径),然后是层(对于 shapefile,是不带扩展名的文件名),以及然后是输出驱动程序的名称。
writeOGR(obj = spDF, dsn = ".", layer = "bei", driver = "ESRI Shapefile")
请注意,如果“bei.shp”已经存在,则写入将失败,因此必须先删除unlink("bei.shp")
。
列出所有以“bei”开头的文件:
list.files(pattern = "^bei")
[1] "bei.dbf" "bei.shp" "bei.shx"
请注意,没有用于ppp
对象的通用“as.Spatial”转换器,因为必须决定这是否是带有标记的点模式等等 - 尝试编写一个报告虚拟数据是否为需要等等。
有关这些数据表示之间差异的更多信息和详细信息,请参阅以下小插图:
图书馆(SP);小插图(“sp”)库(spatstat);小插图(“spatstat”)