带有 poly2nb() 的邻居列表适用于 2004 年人口普查形状文件,但不适用于 2011 年
neighbour list with poly2nb() works on 2004 census shapefile but not on 2011
我正在尝试从多边形列表构建伦敦低层超级输出区域 (LSOA) 的邻居列表。我从 London Datastore 获得了我的 shapefile,在这里下载:https://data.london.gov.uk/dataset/statistical-gis-boundary-files-london
当我读入 2004 shapefile (LSOA_2004_London_Low_Resolution.shp
) 时,它完美地工作:
ldn <- st_read("statistical-gis-boundaries-london/ESRI/LSOA_2004_London_Low_Resolution.shp")
#make into sp
ldn_sp <- as(ldn, "Spatial")
#create a list of neighbours using the Queen criteria (default, if you want rook chage to queen = FALSE)
w <- poly2nb(ldn_sp)
plot(ldn_sp, border = "grey60")
plot(w, coordinates(ldn_sp), pch = 19, cex = 0.6, add = TRUE)
当我阅读 2011 shapefile (LSOA_2011_London_gen_MHW.shp
) 时,似乎认为大多数 LSOA 都没有邻居。
当我使用具有相同代码的 2011 版本时,我得到了这个:
ldn <- st_read("statistical-gis-boundaries-london/ESRI/LSOA_2011_London_gen_MHW.shp")
ldn_sp <- as(ldn, "Spatial")
w <- poly2nb(ldn_sp)
plot(ldn_sp, border = "grey60")
plot(w, coordinates(ldn_sp), pch = 19, cex = 0.6, add = TRUE)
有人知道我做错了什么吗?显然应该有邻居的 LSOA 显示为 0 个链接。我不知道为什么...!
看起来 shapefile 的组合方式存在问题 - LSOA_2011_London_gen_MHW.shp
中的多边形未完全共享边界。
在 poly2nb
中使用 snap 参数将强制函数将特定定义距离内的边界视为连续的,例如:
w <- poly2nb(ldn_sp, snap=10)
在上面的示例中,10 = 十进制度数,因为您的原始数据采用 WGS84 格式 - 可能需要转换为 BNG 并设置一个合理的小距离(以米为单位)以进行捕捉。您需要稍微试验一下,但在上面的快速而肮脏的示例中,10 进制度数似乎会生成一些近似于预期邻居列表的东西。
我正在尝试从多边形列表构建伦敦低层超级输出区域 (LSOA) 的邻居列表。我从 London Datastore 获得了我的 shapefile,在这里下载:https://data.london.gov.uk/dataset/statistical-gis-boundary-files-london
当我读入 2004 shapefile (LSOA_2004_London_Low_Resolution.shp
) 时,它完美地工作:
ldn <- st_read("statistical-gis-boundaries-london/ESRI/LSOA_2004_London_Low_Resolution.shp")
#make into sp
ldn_sp <- as(ldn, "Spatial")
#create a list of neighbours using the Queen criteria (default, if you want rook chage to queen = FALSE)
w <- poly2nb(ldn_sp)
plot(ldn_sp, border = "grey60")
plot(w, coordinates(ldn_sp), pch = 19, cex = 0.6, add = TRUE)
当我阅读 2011 shapefile (LSOA_2011_London_gen_MHW.shp
) 时,似乎认为大多数 LSOA 都没有邻居。
当我使用具有相同代码的 2011 版本时,我得到了这个:
ldn <- st_read("statistical-gis-boundaries-london/ESRI/LSOA_2011_London_gen_MHW.shp")
ldn_sp <- as(ldn, "Spatial")
w <- poly2nb(ldn_sp)
plot(ldn_sp, border = "grey60")
plot(w, coordinates(ldn_sp), pch = 19, cex = 0.6, add = TRUE)
有人知道我做错了什么吗?显然应该有邻居的 LSOA 显示为 0 个链接。我不知道为什么...!
看起来 shapefile 的组合方式存在问题 - LSOA_2011_London_gen_MHW.shp
中的多边形未完全共享边界。
在 poly2nb
中使用 snap 参数将强制函数将特定定义距离内的边界视为连续的,例如:
w <- poly2nb(ldn_sp, snap=10)
在上面的示例中,10 = 十进制度数,因为您的原始数据采用 WGS84 格式 - 可能需要转换为 BNG 并设置一个合理的小距离(以米为单位)以进行捕捉。您需要稍微试验一下,但在上面的快速而肮脏的示例中,10 进制度数似乎会生成一些近似于预期邻居列表的东西。