The following analysis is based on 10 random locations for which 1 hour isochrone split in 20 min ranges was requested.

Data import

library("openrouteservice")
setwd("~/Projects/benchmarks/isochrones2")

load("results_master_3intervals.Rda")
master_3intervals <- results
load("results_master_5intervals.Rda")
master_5intervals <- results

load("results_fix_3intervals.Rda")
fix_3intervals <- results
load("results_fix_5intervals.Rda")
fix_5intervals <- results

load("results_31c6d5_3intervals.Rda")
intermediate_3intervals <- results
load("results_31c6d5_5intervals.Rda")
intermediate_5intervals <- results

Performance comparison: 3 intervals

query_times_master_3intervals = sapply(master_3intervals, function (isochrone) median(attr(isochrone, "query_time")))
query_times_fix_3intervals = sapply(fix_3intervals, function (isochrone) median(attr(isochrone, "query_time")))
query_times_intermediate_3intervals = sapply(intermediate_3intervals, function (isochrone) median(attr(isochrone, "query_time")))

maxtime = max(query_times_master_3intervals, query_times_fix_3intervals, query_times_intermediate_3intervals)

plot (query_times_master_3intervals, query_times_fix_3intervals, xlim = c(0, maxtime), ylim = c(0, maxtime), yaxs = "i",
      main = "query times [s]", xlab = "master", ylab = "fix (black) / @31c6d5 (blue)")
points (query_times_master_3intervals, query_times_intermediate_3intervals, col = "blue")
abline(0,1, col = "red")

Performance comparison: 5 intervals

query_times_master_5intervals = sapply(master_5intervals, function (isochrone) median(attr(isochrone, "query_time")))
query_times_fix_5intervals = sapply(fix_5intervals, function (isochrone) median(attr(isochrone, "query_time")))
query_times_intermediate_5intervals = sapply(intermediate_5intervals, function (isochrone) median(attr(isochrone, "query_time")))

maxtime = max(query_times_master_5intervals, query_times_fix_5intervals, query_times_intermediate_5intervals)

plot (query_times_master_5intervals, query_times_fix_5intervals, xlim = c(0, maxtime), ylim = c(0, maxtime), yaxs = "i",
      main = "query times [s]", xlab = "master", ylab = "fix (black) / @31c6d5 (blue)")
points (query_times_master_5intervals, query_times_intermediate_5intervals, col = "blue")
abline(0,1, col = "red")

Differences in geometries between versions

  • Blue: master (reference)
  • Red: fix @31c6d5
  • Green: fix
library(leaflet)
library(htmltools)
html <- list()

for (id in seq_along(query_times_master_3intervals)) {
  ref <- master_3intervals[[id]]
  leaflet(height = 800) %>%
    addTiles() %>%
    fitBBox(ref$bbox) %>%
    addGeoJSON(ref, color = c("#00f")) %>%
    addGeoJSON(fix_3intervals[[id]], color = c("#0f0")) %>%
    addGeoJSON(intermediate_3intervals[[id]], color = c("#f00")) -> widget
  
  html <- c(html, list(h2(paste0("Location #", id)), widget))
}
tagList(html)

Location #1

Location #2

Location #3

Location #4

Location #5

Location #6

Location #7

Location #8

Location #9

Location #10