首页 > 解决方案 > 使用 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 格式?

标签: rjsonadjacency-matrix

解决方案


我使用零宽度缓冲区来清理 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")

推荐阅读