如何解决来自状态多边形的相邻邮政编码
第一次在 SO 上发帖
我有一个 shapefile,其中包含每个邮政编码的几何形状以及州名。我想弄清楚州边界上有哪些邮政编码。 我想实现这一点的方法是组合每个州的所有邮政编码并得出一个州的几何形状,然后找到每个州的相邻邮政编码。
我使用以下方法将邮政编码组合成州:
state_shape <- shapefile %>% group_by(State) %>% summarise(geometry = sf::st_union(geometry))
但是当我尝试使用 poly2nb
state_nb <- poly2nb(st_geometry(state_shape))
Error in poly2nb(st_geometry(state_shape)) : polygon geometries required
我知道要找到边界邮政编码,我必须在 poly2nb 中传递邮政编码几何图形,但错误仍然存在。
解决方法
考虑这个例子,它建立在广泛可用的北卡罗来纳州 shapefile 上,该文件与 {sf} 包一起分发。
示例的作用是:
-
首先分解县,然后将生成的多边形转换为多线串,从而创建北卡罗来纳州的边界线
-
在县和边界上运行
sf::st_touches()
,稀疏设置为 false;结果是一个逻辑向量,可用于对原始 shapefile 进行子集化(过滤掉与 NC 边界共享边界的县) -
使用{ggplot2}以图形格式呈现结果;接壤的县是蓝色的,其余的只是空白
library(sf) library(dplyr) library(ggplot2) # all NC counties (from shapefile distributed with {sf}) shape <- st_read(system.file("shape/nc.shp",package="sf")) # border,via dplyr::summarise() & cast as a linestring border <- shape %>% summarise() %>% st_cast("MULTILINESTRING") # logical vector of length nrow(shape) neighbours <- sf::st_touches(shape,border,sparse = F) # report results ggplot() + geom_sf(data = shape[neighbours,],fill = "blue") + # border counties geom_sf(data = shape,fill = NA,color = "grey45") # all counties for context
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。