制作接触 R 中每个多边形相同边界的相邻多边形列表
Making a list of neighbor polygons touching same border of each polygon in R
我有一个形状文件,其中包含不同地区的地理空间地图。我已经将它加载到 R 中。它的 CRS 是 NAD83,椭圆是 GRS80。
我正在尝试为地图中的每个领土列出所有接触边界的领土。
当我输入 head(shapefile) 时,它显示如下内容:
Territory Year
0 ACE 1803
1 FAS 1814
2 CAT 1865
3 TAT 1834
4 GAL 1833
5 UBE 1877
我已经试过了:
gTouches(shapefile, byid = TRUE)
它有效,但不是我想要的格式。我也试过
shapefile.knn <- knearneigh(coordinates(shapefile), k=7)
plot(knn2nb(shapefile.knn), coordinates(shapefile), col="red", add=TRUE)
它也有效,但我想找到触及每个领土边界的邻近领土,这似乎只需要最近的邻居,而不依赖于它们是否触及边界。我还想为每个领土名称列出这些相邻领土名称。
我遇到了这个 link:http://grokbase.com/t/r/r-sig-geo/072fxj7bhr/how-to-find-neighbor-polygons-and-analysis-of-their-attributes
在这个 link 中,一个人要求的东西与我想要的类似,所以我尝试了分享给她的代码,看看它是否适合我,但我只做到了这一点:
nbs <- poly2nb(as(shapefile, "SpatialPolygons"))
wts <- nb2listw(nbs, style = "W")
我不确定 how/what 在此之后要做什么,我什至不确定它是否会引导我达到我想要的目的。在网站上,他们使用滞后功能。我试过了:
shapefile$W_var <-lag(wts, shapefile$var)
但它没有工作并说,"Error: n
must be a nonnegative integer scalar, not NULL of length 0"。我怀疑这是因为我的 shapefile 中没有名为 "var" 的列,但我不确定他们试图引用哪种类型的列。
非常感谢任何帮助,谢谢!
要获取相邻的多边形编号列表,您需要使用:
list.nb <- gTouches(shapefile, byid = TRUE, returnDense = FALSE)
数字是多边形在 shapefile 中的位置。因此,您可以通过简单的向量提取来获取名称:shapefile$Territory[number]
。在您的情况下,您需要在完整列表中应用此:
list.Territories <- lapply(list.nb, function(x) shapefile$Territory[x])
我有一个形状文件,其中包含不同地区的地理空间地图。我已经将它加载到 R 中。它的 CRS 是 NAD83,椭圆是 GRS80。
我正在尝试为地图中的每个领土列出所有接触边界的领土。
当我输入 head(shapefile) 时,它显示如下内容:
Territory Year
0 ACE 1803
1 FAS 1814
2 CAT 1865
3 TAT 1834
4 GAL 1833
5 UBE 1877
我已经试过了:
gTouches(shapefile, byid = TRUE)
它有效,但不是我想要的格式。我也试过
shapefile.knn <- knearneigh(coordinates(shapefile), k=7)
plot(knn2nb(shapefile.knn), coordinates(shapefile), col="red", add=TRUE)
它也有效,但我想找到触及每个领土边界的邻近领土,这似乎只需要最近的邻居,而不依赖于它们是否触及边界。我还想为每个领土名称列出这些相邻领土名称。
我遇到了这个 link:http://grokbase.com/t/r/r-sig-geo/072fxj7bhr/how-to-find-neighbor-polygons-and-analysis-of-their-attributes
在这个 link 中,一个人要求的东西与我想要的类似,所以我尝试了分享给她的代码,看看它是否适合我,但我只做到了这一点:
nbs <- poly2nb(as(shapefile, "SpatialPolygons"))
wts <- nb2listw(nbs, style = "W")
我不确定 how/what 在此之后要做什么,我什至不确定它是否会引导我达到我想要的目的。在网站上,他们使用滞后功能。我试过了:
shapefile$W_var <-lag(wts, shapefile$var)
但它没有工作并说,"Error: n
must be a nonnegative integer scalar, not NULL of length 0"。我怀疑这是因为我的 shapefile 中没有名为 "var" 的列,但我不确定他们试图引用哪种类型的列。
非常感谢任何帮助,谢谢!
要获取相邻的多边形编号列表,您需要使用:
list.nb <- gTouches(shapefile, byid = TRUE, returnDense = FALSE)
数字是多边形在 shapefile 中的位置。因此,您可以通过简单的向量提取来获取名称:shapefile$Territory[number]
。在您的情况下,您需要在完整列表中应用此:
list.Territories <- lapply(list.nb, function(x) shapefile$Territory[x])