Java 如何从R包转换样本数据集;spatstat";变成一个形状文件

Java 如何从R包转换样本数据集;spatstat";变成一个形状文件,java,r,gis,shapefile,Java,R,Gis,Shapefile,我已经用Java编写了一个内核密度估计器,它以ESRI形状文件的形式接收输入,并输出估计曲面的GeoTIFF图像。为了测试这个模块,我需要一个示例shapefile,不管出于什么原因,我被告知从R中包含的样本数据中检索一个。问题是,没有一个样本数据是shapefile 因此,我尝试使用shapefiles包的functionconvert.to.shapefile(4)将R中spatstat包中包含的bei数据集转换为shapefile。不幸的是,这比我想象的要难。有人有这样做的经验吗?如果你能

我已经用Java编写了一个内核密度估计器,它以ESRI形状文件的形式接收输入,并输出估计曲面的GeoTIFF图像。为了测试这个模块,我需要一个示例shapefile,不管出于什么原因,我被告知从R中包含的样本数据中检索一个。问题是,没有一个样本数据是shapefile

因此,我尝试使用shapefiles包的function
convert.to.shapefile(4)
将R中spatstat包中包含的bei数据集转换为shapefile。不幸的是,这比我想象的要难。有人有这样做的经验吗?如果你能帮我一把,我将不胜感激

谢谢, 瑞安

参考资料: , 一般的解决方案是:

  • “ppp”
    “owin”
    分类对象从
    sp
    包转换为适当的分类对象
  • 使用package
    rgdal
    中的
    writeOGR()
    函数写出Shapefile

例如,如果我们考虑<代码>仓鼠<代码>数据集,从<代码> SPATSTAT< /代码>:

require(spatstat)
require(maptools)
require(sp)
require(rgdal)
data(hamster)
首先,将此对象转换为
SpatialPointsDataFrame
对象:

ham.sp <- as.SpatialPointsDataFrame.ppp(hamster)
此对象在
@data
插槽中有一个变量:

> head(ham.sp@data)
     marks
1 dividing
2 dividing
3 dividing
4 dividing
5 dividing
6 dividing
假设我们现在想把这个变量写成ESRI Shapefile,我们使用
writeOGR()

这将在当前工作目录中创建的目录
仓鼠
中创建多个
标记.xxx
文件。这组文件就是ShapeFile

我没有对
bei
数据集执行上述操作的原因之一是,它不包含任何数据,因此我们无法将其强制为
SpatialPointsDataFrame
对象。我们可以使用
bei.extra
(与
bei
同时加载)中的数据,但这些额外数据或在常规网格中。所以我们必须

  • bei.extra
    转换为
    SpatialGridDataFrame
    对象(比如
    bei.spg
  • bei
    转换为
    SpatialPoints
    对象(例如
    bei.sp
  • overlay()
  • 这将为我们提供一个
    空间点数据框架
    ,可以使用上面的
    writeOGR()
    写出该框架

正如您所看到的,这只是为了给您一个Shapefile。我展示的
仓鼠
数据示例是否足够?如果没有,我可以找出我的明天,并运行
bei

的步骤
spatstat
maptools
包中的
空间对象的转换器函数可用于此。shapefile至少由每个对象的点(或直线或多边形)和属性组成

library(spatstat)
library(sp)
library(maptools)
data(bei)
bei
强制到
Spatial
对象,因为
ppp
对象上没有“标记”,所以此处仅指向没有属性的点

spPoints <- as(bei, "SpatialPoints")

在这一点上,你应该明确地考虑代码< BE> <代码>所使用的坐标系,以及是否可以用<代码> WKT CRS(众所周知的文本坐标参考系)来表示。您可以将其指定给
Spatial
对象,作为
SpatialPointsDataFrame
的另一个参数,或者在使用
proj4string(spDF)创建之后,为什么要特别指定
bei
数据集?嘿,第一次我只是将代码扔到了那里,所以我现在添加了一些注释,向两个响应者解释一些事情,你的解决方案应该有效。。。我唯一的问题是我在MacOSX上运行这个,rgdal不支持它。今天下午我会在办公室里找一台windows机器来测试这些。再次感谢!
library(spatstat)
library(sp)
library(maptools)
data(bei)
spPoints <- as(bei, "SpatialPoints")
dummyData <- data.frame(dummy = rep(0, npoints(bei)))
spDF <- SpatialPointsDataFrame(spPoints, dummyData)
library(rgdal)
writeOGR(obj = spDF, dsn = ".", layer = "bei", driver = "ESRI Shapefile")
list.files(pattern = "^bei")

[1] "bei.dbf" "bei.shp" "bei.shx"