ライブラリのdirichlet()
関数によって生成されたボロノイ テッセレーション (別名ディリクレ テッセレーションまたはティーセン ポリゴン) に基づいて、隣接するポリゴンのテーブルを作成しようとしています。spatstat
たとえば、下の図では、右上と右下のタイルにはそれぞれ 2 つの隣接タイルがあり、中央右のタイルには 4 つの隣接タイルがあり、残りの 2 つのタイルにはそれぞれ 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
} } }