【发布时间】:2014-08-12 03:03:23
【问题描述】:
我正在尝试基于由 spatstat 库的 dirichlet() 函数生成的 Voronoi 镶嵌(又名 Dirichlet 镶嵌或泰森多边形)创建多边形邻居表。例如,在下图中,右上角和右下角的瓷砖各有 2 个邻居,中间右侧的瓷砖有 4 个邻居,其余两个瓷砖各有 3 个邻居。我想捕获表中的邻居对,理想情况下捕获它们共享的边界线的长度:例如,'Tile1'、'Tile2'、'shared_edge_length'。
最初,我尝试使用intersect.tess()、intersect.own() 和polyclip 函数循环并比较镶嵌中的每一对多边形,但我猜这些不起作用,因为瓷砖是根据定义,尽管共享边缘,但在区域上不重叠。是否有一个简单的功能来实现这一点(替代方法是循环遍历$bdry 点)? regeos 包似乎有 gTouches,但我找不到 spatstat 的类似内容。
这是我目前不起作用的方法:
library(spatstat)
points <- ppp(x=c(-77.308703, -77.256582, -77.290600, -77.135668, -77.097144),
y=c(39.288603, 39.147019, 39.372818, 39.401898, 39.689203),
window=owin(xrange=c(-77.7,-77), yrange=c(39.1, 39.7)))
vt <- dirichlet(points) # Dirichlet tesselation
plot(vt)
tilesA <- tiles(vt)
n_tiles <- length(tilesA)
boundary_calcs <- data.frame('area1_id'=numeric(), 'area2_id'=numeric(), 'neighbor'=logical()) # Store boundary pairs
for (i in 1:n_tiles) {
for (j in 1:n_tiles) {
intersection <- intersect.owin(tilesA[[i]], tilesA[[j]], fatal=FALSE) # does not work
if (!is.empty(intersection)) {
boundary_calcs[nrow(boundary_calcs)+1, ] <- c(i, j, TRUE) # add to data table as new row
} } }
【问题讨论】:
标签: r maps polygon voronoi spatstat