Giter VIP home page Giter VIP logo

Comments (2)

mpadge avatar mpadge commented on July 30, 2024

The follow reprex shows an example of this in action:

devtools::load_all (".", export_all = TRUE)
#> Loading gtfsrouter
gtfs <- extract_gtfs ("vbb.zip")
#> ▶ Unzipping GTFS archive
#> ✔ Unzipped GTFS archive
#> ▶ Extracting GTFS feed✔ Extracted GTFS feed 
#> ▶ Converting stop times to seconds✔ Converted stop times to seconds 
#> ▶ Converting transfer times to seconds✔ Converted transfer times to seconds
gtfs <- gtfs_timetable (gtfs, day = "tuesday")

from <- "Berlin Hauptbahnhof"
start_time <- 8 * 3600
start_stns <- station_name_to_ids (from, gtfs, FALSE)
end_time <- start_time + 3600

add_ids <- function (isotrips, gtfs) {
    isotrips$isotrips <- lapply (isotrips$isotrips, function (i) {
                                     i$stop_num <- match (i$stop_id, gtfs$stop_ids$stop_ids)
                                     i$time <- hms::hms (i$earliest_arrival)
                                     return (i) })
    return (isotrips)   }
iso_fastest <- get_isotrips (gtfs, start_stns, start_time, end_time, minimise_transfers = FALSE)
iso_fastest <- add_ids (iso_fastest, gtfs)
iso_min_tr <- get_isotrips (gtfs, start_stns, start_time, end_time, minimise_transfers = TRUE)
iso_min_tr <- add_ids (iso_min_tr, gtfs)

i <- which (!vapply (seq_along (iso_fastest$isotrips), function (i)
                     identical (iso_fastest$isotrips [[i]], iso_min_tr$isotrips [[i]]),
                     logical (1)))
index <- which (!names (iso_fastest$isotrips [[i]]) %in%
                c ("parent_station", "stop_lon", "stop_lat", "earliest_arrival", "stop_num"))
iso_fastest$isotrips [[i]] [, index]
#>         stop_id                                   stop_name  route_id   trip_id
#> 1  060003201213                     S+U Berlin Hauptbahnhof 10157_109 141444939
#> 2  060100001755              S+U Friedrichstr. Bhf (Berlin) 10157_109 141444939
#> 3  060100002733                 S Hackescher Markt (Berlin)      <NA>      <NA>
#> 4  070301008805                 S Hackescher Markt (Berlin) 17452_900 144790566
#> 5  070301008806         Berlin, Spandauer Str./Marienkirche 17452_900 144790566
#> 6  070301008807 S+U Alexanderplatz Bhf/Gontardstr. (Berlin) 17452_900 144790566
#> 7  070301008808            U Alexanderplatz (Berlin) [Tram] 17452_900 144790566
#> 8  070301008809            Berlin, Mollstr./Otto-Braun-Str. 17452_900 144790566
#> 9  070301009407                   Berlin, Am Friedrichshain 17452_900 144790566
#> 10 070301009408                        Berlin, Hufelandstr. 17452_900 144790566
#> 11 070301009409     Berlin, Greifswalder Str./Danziger Str. 17452_900 144790566
#> 12 070301009410                S Greifswalder Str. (Berlin) 17452_900 144790566
#> 13 070301009411                    Berlin, Thomas-Mann-Str. 17452_900 144790566
#>            trip_headsign     time
#> 1      S Strausberg Nord 08:01:12
#> 2      S Strausberg Nord 08:03:54
#> 3                   <NA> 08:05:24
#> 4  Berlin, Zingster Str. 08:12:00
#> 5  Berlin, Zingster Str. 08:13:00
#> 6  Berlin, Zingster Str. 08:16:00
#> 7  Berlin, Zingster Str. 08:18:00
#> 8  Berlin, Zingster Str. 08:21:00
#> 9  Berlin, Zingster Str. 08:22:00
#> 10 Berlin, Zingster Str. 08:24:00
#> 11 Berlin, Zingster Str. 08:25:00
#> 12 Berlin, Zingster Str. 08:27:00
#> 13 Berlin, Zingster Str. 08:28:00
iso_min_tr$isotrips [[i]] [, index]
#>         stop_id                                   stop_name  route_id   trip_id
#> 1  070301008860                     S+U Berlin Hauptbahnhof 17459_900 144797099
#> 2  070301008861                       Berlin, Invalidenpark 17459_900 144797099
#> 3  070301008882  U Naturkundemuseum (Berlin) [Chausseestr.] 17459_900 144797099
#> 4  070301009372         Berlin, Torstr./U Oranienburger Tor 17459_900 144797099
#> 5  070301009403               S Oranienburger Str. (Berlin) 17459_900 144797099
#> 6  070301008812                       Berlin, Monbijouplatz 17459_900 144797099
#> 7  070301008805                 S Hackescher Markt (Berlin) 17452_900 144790566
#> 8  070301008806         Berlin, Spandauer Str./Marienkirche 17452_900 144790566
#> 9  070301008807 S+U Alexanderplatz Bhf/Gontardstr. (Berlin) 17452_900 144790566
#> 10 070301008808            U Alexanderplatz (Berlin) [Tram] 17452_900 144790566
#> 11 070301008809            Berlin, Mollstr./Otto-Braun-Str. 17452_900 144790566
#> 12 070301009407                   Berlin, Am Friedrichshain 17452_900 144790566
#> 13 070301009408                        Berlin, Hufelandstr. 17452_900 144790566
#> 14 070301009409     Berlin, Greifswalder Str./Danziger Str. 17452_900 144790566
#> 15 070301009410                S Greifswalder Str. (Berlin) 17452_900 144790566
#> 16 070301009411                    Berlin, Thomas-Mann-Str. 17452_900 144790566
#>            trip_headsign     time
#> 1  Berlin, Zingster Str. 08:00:00
#> 2  Berlin, Zingster Str. 08:02:00
#> 3  Berlin, Zingster Str. 08:04:00
#> 4  Berlin, Zingster Str. 08:05:00
#> 5  Berlin, Zingster Str. 08:07:00
#> 6  Berlin, Zingster Str. 08:08:00
#> 7  Berlin, Zingster Str. 08:12:00
#> 8  Berlin, Zingster Str. 08:13:00
#> 9  Berlin, Zingster Str. 08:16:00
#> 10 Berlin, Zingster Str. 08:18:00
#> 11 Berlin, Zingster Str. 08:21:00
#> 12 Berlin, Zingster Str. 08:22:00
#> 13 Berlin, Zingster Str. 08:24:00
#> 14 Berlin, Zingster Str. 08:25:00
#> 15 Berlin, Zingster Str. 08:27:00
#> 16 Berlin, Zingster Str. 08:28:00

Created on 2020-11-24 by the reprex package (v0.3.0)

Setting minimise_transfers = TRUE replaces former trip with one transfer with alternative that takes 01:12 longer, but has no transfers.

from gtfsrouter.

mpadge avatar mpadge commented on July 30, 2024

Re-opening because the minimal transfer versions have one potential issue. Removing the condition that trips must be the shortest opens the possibility of circular trips. The following code, extending directly from the reprex above, demonstrates:

from <- "Berlin Hauptbahnhof"
start_time <- 8 * 3600
start_stns <- station_name_to_ids (from, gtfs, FALSE)
end_time <- start_time + 3600 + 1800

iso_min_tr <- get_isotrips (gtfs, start_stns, start_time, end_time, minimise_transfers = TRUE)
iso_min_tr <- add_ids (iso_min_tr, gtfs)

ends <- vapply (iso_min_tr$isotrips, function (i) tail (i$stop_name, 1), character (1))
index <- grep ("S Westkreuz", ends)
cindex <- which (!names (iso_min_tr$isotrips [[1]]) %in%
                c ("parent_station", "stop_lon", "stop_lat", "earliest_arrival", "stop_num"))
iso_min_tr$isotrips [[index]] [, cindex]
#>         stop_id                            stop_name  route_id   trip_id
#> 1  060003201214              S+U Berlin Hauptbahnhof 10170_109 141456259
#> 2  060003102224                  S Bellevue (Berlin) 10170_109 141456259
#> 3  060003103234                S Tiergarten (Berlin) 10170_109 141456259
#> 4  060023201256 S+U Zoologischer Garten Bhf (Berlin) 10170_109 141456259
#> 5  060024203304              S Savignyplatz (Berlin) 10170_109 141456259
#> 6  060024101338        S Charlottenburg Bhf (Berlin) 10170_109 141456259
#> 7  060024102371                 S Westkreuz (Berlin)      <NA>      <NA>
#> 8  060024100801                 S Westkreuz (Berlin) 10155_109 141441866
#> 9  060024106801            S Messe Nord/ICC (Berlin)      <NA>      <NA>
#> 10 060024106802            S Messe Nord/ICC (Berlin) 10155_109 141441562
#> 11 060024100802                 S Westkreuz (Berlin) 10155_109 141441562
#>                trip_headsign     time
#> 1              S Spandau Bhf 08:00:12
#> 2              S Spandau Bhf 08:02:48
#> 3              S Spandau Bhf 08:04:54
#> 4              S Spandau Bhf 08:06:54
#> 5              S Spandau Bhf 08:08:48
#> 6              S Spandau Bhf 08:10:48
#> 7                       <NA> 08:12:36
#> 8                  S Westend 08:16:48
#> 9                       <NA> 08:18:00
#> 10 S Königs Wusterhausen Bhf 08:18:30
#> 11 S Königs Wusterhausen Bhf 08:20:12

Created on 2020-11-24 by the reprex package (v0.3.0)

from gtfsrouter.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.