问题描述
我在 GeoJSON 文件中有一组多边形。他们是波士顿的街区。我想生成一个 CSV 格式的邻接矩阵,如果 i 区与 j 区相邻(即它们正在接触),则元素 j,j 为 1。
我在互联网上找到了一段 R 代码,用于我的数据集 (Uber Movement Dataset),如下所示:
library(rgeos)
library(rgdal)
polys <- readOGR("D:/boston_taz.json")
adj <- gtouches(polys,byid = TRUE)
并得到以下错误:
> library(rgeos)
> library(rgdal)
> polys <- readOGR("D:/boston_taz.json")
OGR data source with driver: GeoJSON
Source: "D:\boston_taz.json",layer: "boston_taz"
with 2728 features
It has 7 fields
> adj <- gtouches(polys,byid = TRUE)
Error in RGEOSBinPredFunc(spgeom1,spgeom2,byid,"rgeos_touches") :
rgeos_binpredfunc: comparison Failed
由于我是 R 的新手,有什么问题以及如何将结果矩阵导出为 .csv 格式?
解决方法
我使用零宽度缓冲区来清理 R 中的拓扑问题,我的问题解决了。
library(rgeos)
library(rgdal)
polys <- readOGR("D:/boston_taz.json")
polys2 <- gBuffer(polys,byid=TRUE,width=0)
adj <- gTouches(polys2,byid = TRUE,returnDense=TRUE,checkValidity=TRUE)
write.csv(adj,"adj.csv")