使用 R 获取 GeoJSON 中多边形的邻接矩阵

问题描述

我在 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")