【发布时间】:2021-08-22 09:18:22
【问题描述】:
我是地理数据的新手,所以也许这是一个愚蠢的问题。 我有两个多边形,我想做的是测试每个“病房”多边形包含在哪个“选区”多边形中。基本上,查看每个选区所在的选区。
但是,我遇到了来自 sf 的函数 st_within() 的问题,因为它仅在第一个几何体完全在第二个几何体中时才返回 TRUE。当较小的单位接触较大单位的边界时,这是一个问题。这是一个例子
我有一个称为“选区”的多面体和一个称为“病房”的多面体。你可以在这里找到它们:https://www.dropbox.com/sh/xu08wm79rym00zz/AADFDpyPe0EuDSDSY-6SvqpYa?dl=0
选区中有 2 个对象:
plot(constituencies$geometry)
wards <- st_transform(wards, crs = st_crs(constituencies))
test98 <- st_join(wards, constituencies, join=st_within)
结果会在选区名称和选区所在的标签上吐出许多 NA。
head(test98)
Simple feature collection with 6 features and 4 fields
geometry type: MULTIPOLYGON
dimension: XY
bbox: xmin: 531936.6 ymin: 180569.5 xmax: 533595.1 ymax: 182082.5
projected CRS: OSGB 1936 / British National Grid
WD98CD WD98NM name label geometry
1 00AAFA Aldersgate <NA> <NA> MULTIPOLYGON (((532104.9 18...
2 00AAFB Aldgate <NA> <NA> MULTIPOLYGON (((533319.2 18...
3 00AAFC Bassishaw Cities of London and Westminster 107 MULTIPOLYGON (((532587.3 18...
4 00AAFD Billingsgate Cities of London and Westminster 107 MULTIPOLYGON (((533167.9 18...
5 00AAFE Bishopsgate <NA> <NA> MULTIPOLYGON (((533410.7 18...
6 00AAFF Bread Street Cities of London and Westminster 107 MULTIPOLYGON (((532300.3 18...
当我绘制它们以查看哪些名称中有 NA(红色)时,您可以看到它是触及选区边界的那些:
plot(constituencies_short$geometry)
plot(test98$geometry[!is.na(test98$name),], col = "green", add = T)
plot(test98$geometry[is.na(test98$name),], col = "red", add = T)
我假设正在发生以下两种情况之一:1) 接触边界不能算作完全在几何范围内,或 2) 选区和选区的边界可能不完全匹配,因此选区并不完全在几何范围内。选区。
我的问题是:有没有一种方法可以完美匹配边界,然后测试哪些选区在哪些选区之内,或者有没有一种方法可以测试哪些选区不是全部,而是选区的大部分边界?
非常感谢!
【问题讨论】:
-
嗨,好问题!不幸的是,我无法打开您的数据集。你的一行代码突然出现在我面前:
st_crs(wards) == st_crs(constituencies)这通常是个坏主意,因为它只是覆盖了 CRS。试试st_transform(wards, st_crs(constituencies)吧! -
啊,非常感谢!会改正的。对链接感到羞耻,无法理解为什么会这样。你可以试试这个:drive.google.com/drive/folders/… 吗?
-
我可以加载这些,但这里的 CRS 似乎是相同的(但几何形状略有偏差)。你已经在这里操作过 CRS 了吗?我在之前的评论中也弄错了:您的代码行不会更改 CRS,它只是测试它们是否相等。对我来说,表达式是
TRUE,使用你的数据。 -
对不起,你是对的。我运行了“wards
-
您能提供未更改数据集的样本吗?此外,任何关于它们来自何处(使用哪个 CRS)的信息都有助于尝试正确对齐它们。