nptscot / rnetmatch

Match the features in 2 route networks enabling joins
MIT License
5 stars 1 forks source link

R* Tree visualization #23

Closed JosiahParry closed 7 months ago

JosiahParry commented 7 months ago

Objective is to create an informative visualization of the R-trees and the candidate matching process. Should find a network portion that is best for this.

All overlapping bounding boxes are compared

library(sf)
library(rsgeo)

rnet_y = stplanr::route_network_small

# The target object
rnet_x = stplanr::rnet_subset(stplanr::osm_net_example[1], rnet_y)

x <- as_rsgeo(sf::st_transform(rnet_x, 27700))
y <- as_rsgeo(st_transform(rnet_y, 27700))

# axis-aligned-bounding-box for x
xbb <- bounding_rect(x)

# creating bounding rects for y
# need to expand them
ybb <- bounding_rect(explode_lines(y))

# define function to expand the AABB
expand_aabb <- function(x, DT) {
  crds <- coords(x)
  # xmin, max, max, min, min
  # ymin min max max min
  crds[,1] <- crds[,1] + (c(-1, 1, 1, -1, -1)  * DT)
  crds[,2] <- crds[,2] + (c(-1, -1, 1, 1, -1)  * DT)
  rsgeo::geom_polygon(crds$x, crds$y, crds$polygon_id)
}

library(ggplot2)

ggplot() +
  geom_sf(
    data = st_as_sfc(xbb), 
    fill = "#76b5c5", alpha = 0.25, lwd = 0
  ) + 
  geom_sf(
    data = st_as_sfc(expand_aabb(ybb, 5)),
    fill = "#e28743", alpha = 0.25,lwd = 0
  ) +
  theme_void()

Robinlovelace commented 7 months ago

Nice Viz!