Java 如何从R包转换样本数据集;spatstat";变成一个形状文件
我已经用Java编写了一个内核密度估计器,它以ESRI形状文件的形式接收输入,并输出估计曲面的GeoTIFF图像。为了测试这个模块,我需要一个示例shapefile,不管出于什么原因,我被告知从R中包含的样本数据中检索一个。问题是,没有一个样本数据是shapefile 因此,我尝试使用shapefiles包的functionJava 如何从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。不幸的是,这比我想象的要难。有人有这样做的经验吗?如果你能
convert.to.shapefile(4)
将R中spatstat包中包含的bei数据集转换为shapefile。不幸的是,这比我想象的要难。有人有这样做的经验吗?如果你能帮我一把,我将不胜感激
谢谢,
瑞安
参考资料:
,
一般的解决方案是:
- 将
或“ppp”
分类对象从“owin”
包转换为适当的分类对象sp
- 使用package
中的rgdal
函数写出ShapefilewriteOGR()
例如,如果我们考虑<代码>仓鼠<代码>数据集,从<代码> 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"