ポリゴン内のラインデータの抽出(切取り)

何回も調べたりしているため、メモ。

ポリゴン内のライン長さを出したいときがある。 その際はラインをポリゴンでインターセクトする必要がある。

関数はrgeos::gIntersection()を利用する。

sp::over()関数で行うと意図と異なる結果となるため注意。
(適切な方法で行えば実行できるだろうが。。。)

library(stplanr)
library(magrittr)
data(routes_fast)
data(zones)
  • よい例
plot(zones[3,], col = "yellow")
plot(routes_fast, col ="grey90", add = T, lwd = 5)

rgeos::gIntersection(spgeom1 = routes_fast,
                     spgeom2 = zones[3,]) %>%
  plot(add = T, col = "blue")

f:id:jerrarrdan:20170418235229p:plain

  • ダメな例
plot(zones[3,], col = "yellow")
plot(routes_fast, col ="grey90", add = T, lwd = 5)

tmp <-
  sp::over(x = routes_fast, y = zones[3, ])

plot(routes_fast[!is.na(tmp$geo_code), ], add = T, col = "red",
     lwd = 1)

f:id:jerrarrdan:20170418235238p:plain