{
  "_id": "6a6756e348315b1c32541d99",
  "Type": "Package",
  "Package": "gps2gtfs",
  "Title": "High-Performance GPS to GTFS Converter",
  "Version": "0.2.0",
  "Authors@R": "c(\nperson(\"Egor\", \"Kotov\", , \"kotov.egor@gmail.com\", role = c(\"aut\", \"cre\", \"cph\"),\ncomment = c(ORCID = \"0000-0001-6690-5345\")),\nperson(\"Aaivu\", role = \"cph\")\n)",
  "Description": "Preprocesses raw GPS trajectory data of public transit and\ntransforms it to GTFS format. Provides a high-performance R\nport of the 'gps2gtfs' Python package by Aaivu (Ratneswaran et\nal., 2023) <doi:10.1109/ICCT56969.2023.10075789>, whose\nsoftware description is published in Ratneswaran et al. (2025)\n<doi:10.1016/j.simpa.2025.100780>. Heavy computational tasks\nare offloaded to an extremely fast compiled Rust backend or a\nC++ (Rcpp) backend. Automatic backend selection prefers Rust,\nthen Rcpp, and falls back to a slower pure R implementation\nutilizing 'data.table' and 'sf'.",
  "License": "MIT + file LICENSE",
  "VignetteBuilder": "knitr",
  "Config/testthat/edition": "3",
  "Config/rextendr/version": "0.5.0",
  "Encoding": "UTF-8",
  "LazyData": "true",
  "RoxygenNote": "7.3.3",
  "SystemRequirements": "Cargo (Rust's package manager), rustc >= 1.65.0, xz",
  "Config/pak/sysreqs": "xz-utils libclang-dev",
  "Repository": "https://e-kotov.r-universe.dev",
  "Date/Publication": "2026-07-27 10:25:10 UTC",
  "RemoteUrl": "https://github.com/e-kotov/gps2gtfs",
  "RemoteRef": "HEAD",
  "RemoteSha": "2e64149022ce82079c744a6ead140797cfc08c89",
  "NeedsCompilation": "yes",
  "Packaged": {
    "Date": "2026-07-27 12:54:39 UTC",
    "User": "root"
  },
  "Author": "Egor Kotov [aut, cre, cph] (ORCID:\n<https://orcid.org/0000-0001-6690-5345>),\nAaivu [cph]",
  "Maintainer": "Egor Kotov <kotov.egor@gmail.com>",
  "_user": "e-kotov",
  "_type": "src",
  "_file": "gps2gtfs_0.2.0.tar.gz",
  "_fileid": "https://r2.ropensci.org/d412e0588ccd619daf08f67d0f9a0d93021753528b6bd27eb3cf8a91375367f2",
  "_filesize": 845816,
  "_sha256": "d412e0588ccd619daf08f67d0f9a0d93021753528b6bd27eb3cf8a91375367f2",
  "_expires": "2026-11-04T13:02:25.000Z",
  "_created": "2026-07-27T12:54:39.000Z",
  "_published": "2026-07-27T13:02:27.546Z",
  "_jobs": [
    {
      "job": 89983034205,
      "time": 231,
      "config": "linux-devel-arm64",
      "r": "4.7.0",
      "check": "NOTE",
      "artifact": "8653662510"
    },
    {
      "job": 89983034204,
      "time": 213,
      "config": "linux-devel-x86_64",
      "r": "4.7.0",
      "check": "NOTE",
      "artifact": "8653653723"
    },
    {
      "job": 89983034247,
      "time": 177,
      "config": "linux-release-arm64",
      "r": "4.6.1",
      "check": "NOTE",
      "artifact": "8653635415"
    },
    {
      "job": 89983034158,
      "time": 167,
      "config": "linux-release-x86_64",
      "r": "4.6.1",
      "check": "NOTE",
      "artifact": "8653631360"
    },
    {
      "job": 89983034185,
      "time": 117,
      "config": "macos-oldrel-arm64",
      "r": "4.5.3",
      "check": "NOTE",
      "artifact": "8653663574"
    },
    {
      "job": 89983034207,
      "time": 231,
      "config": "macos-oldrel-x86_64",
      "r": "4.5.3",
      "check": "NOTE",
      "artifact": "8653724628"
    },
    {
      "job": 89983034202,
      "time": 144,
      "config": "macos-release-arm64",
      "r": "4.6.1",
      "check": "NOTE",
      "artifact": "8653622970"
    },
    {
      "job": 89983034179,
      "time": 290,
      "config": "macos-release-x86_64",
      "r": "4.6.1",
      "check": "NOTE",
      "artifact": "8653746380"
    },
    {
      "job": 89981785857,
      "time": 320,
      "config": "source",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "8653548420"
    },
    {
      "job": 89983034193,
      "time": 192,
      "config": "wasm-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "8653642942"
    },
    {
      "job": 89983034186,
      "time": 68,
      "config": "windows-devel-x86_64",
      "r": "4.7.0",
      "check": "FAIL",
      "artifact": ""
    },
    {
      "job": 89983034147,
      "time": 68,
      "config": "windows-oldrel-x86_64",
      "r": "4.5.3",
      "check": "FAIL",
      "artifact": ""
    },
    {
      "job": 89983034219,
      "time": 61,
      "config": "windows-release-x86_64",
      "r": "4.6.1",
      "check": "FAIL",
      "artifact": ""
    }
  ],
  "_host": "GitHub-Actions",
  "_buildurl": "https://github.com/r-universe/e-kotov/actions/runs/30267514023",
  "_status": "success",
  "_upstream": "https://github.com/e-kotov/gps2gtfs",
  "_commit": {
    "id": "2e64149022ce82079c744a6ead140797cfc08c89",
    "author": "Egor Kotov <kotov.egor@gmail.com>",
    "committer": "Egor Kotov <kotov.egor@gmail.com>",
    "message": "Require an explicit stop_direction_map instead of guessing by order\n\nWhen stops_data labels its directions with anything other than the terminal\nIDs, the two labels were paired with the two terminals in order of\nappearance - and that order follows however the caller happened to build\nstops_data. A coin flip, and losing it reverses every direction in the\noutput while still producing plausible stop times, because each ping then\nmatches the opposite-direction stop across the street.\n\nReporting the guess, as the previous commit did, does not stop a wrong feed\nbeing produced; it only annotates one. Refuse instead, listing both\ncandidate maps ready to paste.\n\nThe pairing is not recoverable from the data. On the shipped Kandy fixture\nthe two direction groups are disjoint stop sets (13 and 14 stops, 0 shared)\nyet sit at the same mean distance from both terminals - 5.2 km to BT01 and\n6.1 km to BT02 for both - because both span the same corridor. Deriving it\nfrom travel orientation instead is out of scope for now. The answer exists\nsolely in the caller's head, so ask for it.\n\nLabels that are already terminal IDs (every g2g_stops_from_gtfs() caller),\ndirection_col mode and layover segmentation are untouched.\n\nTwo tests were rewritten rather than patched. \"explicit direction maps\noverride fixture input order\" passed the same map the implicit pairing\nwould have produced, so it asserted nothing; it now checks that swapping\nthe map changes which stops each direction matches. \"stop directions accept\ntext and numeric labels\" asserted the implicit pairing directly; its real\nintent survives with explicit maps.\n\nTests: 531 pass, 0 fail, 0 error, 0 warning.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>\n",
    "time": 1785147910
  },
  "_maintainer": {
    "name": "Egor Kotov",
    "email": "kotov.egor@gmail.com",
    "login": "e-kotov",
    "mastodon": "@EgorKotov@datasci.social",
    "bluesky": "@ekotov.pro",
    "linkedin": "in/egorkotov",
    "orcid": "0000-0001-6690-5345",
    "twitter": "@EgorKotov",
    "description": "Spatial Data Scientist, Postdoctoral Reseacher at @tu-dortmund and UPF",
    "uuid": 8681379
  },
  "_distro": "resolute",
  "_registered": true,
  "_dependencies": [
    {
      "package": "R",
      "version": ">= 4.2",
      "role": "Depends"
    },
    {
      "package": "Rcpp",
      "role": "LinkingTo"
    },
    {
      "package": "data.table",
      "role": "Imports"
    },
    {
      "package": "Rcpp",
      "version": ">= 1.0.0",
      "role": "Imports"
    },
    {
      "package": "gtfsio",
      "role": "Suggests"
    },
    {
      "package": "gtfsrealtime",
      "role": "Suggests"
    },
    {
      "package": "knitr",
      "role": "Suggests"
    },
    {
      "package": "rmarkdown",
      "role": "Suggests"
    },
    {
      "package": "sf",
      "role": "Suggests"
    },
    {
      "package": "testthat",
      "version": ">= 3.0.0",
      "role": "Suggests"
    }
  ],
  "_owner": "e-kotov",
  "_selfowned": true,
  "_usedby": 0,
  "_updates": [
    {
      "week": "2026-23",
      "n": 2
    },
    {
      "week": "2026-27",
      "n": 1
    },
    {
      "week": "2026-29",
      "n": 8
    },
    {
      "week": "2026-30",
      "n": 10
    },
    {
      "week": "2026-31",
      "n": 2
    }
  ],
  "_tags": [],
  "_stars": 0,
  "_contributors": [
    {
      "user": "e-kotov",
      "count": 23,
      "uuid": 8681379
    }
  ],
  "_userbio": {
    "uuid": 8681379,
    "type": "user",
    "name": "Egor Kotov",
    "followers": 225,
    "description": "Spatial Data Scientist, Postdoctoral Reseacher at @tu-dortmund and UPF"
  },
  "_downloads": {
    "count": 0,
    "source": "https://cranlogs.r-pkg.org/downloads/total/last-month/gps2gtfs"
  },
  "_devurl": "https://github.com/e-kotov/gps2gtfs",
  "_searchresults": 1,
  "_cargo": true,
  "_topics": [
    "rust",
    "cargo",
    "cpp"
  ],
  "_rbuild": "4.6.1",
  "_assets": [
    "extra/citation.cff",
    "extra/citation.html",
    "extra/citation.json",
    "extra/citation.txt",
    "extra/contents.json",
    "extra/gps2gtfs.html",
    "extra/NEWS.html",
    "extra/NEWS.txt",
    "LICENSE",
    "manual.pdf"
  ],
  "_cranurl": false,
  "_exports": [
    "g2g_clean_gps",
    "g2g_diagnostics",
    "g2g_extract_trips",
    "g2g_extract_trips_and_stop_times",
    "g2g_shapes_from_trips",
    "g2g_stops_from_gtfs",
    "g2g_stops_from_positions",
    "g2g_terminals_from_gtfs"
  ],
  "_datasets": [
    {
      "name": "g2g_data_gps",
      "title": "GPS Trajectory Subset",
      "object": "g2g_data_gps",
      "class": [
        "data.table",
        "data.frame"
      ],
      "fields": [
        "id",
        "vehicle_id",
        "timestamp",
        "latitude",
        "longitude",
        "speed"
      ],
      "rows": 2167,
      "table": true,
      "tojson": true
    },
    {
      "name": "g2g_data_stops",
      "title": "Bus Stops Data",
      "object": "g2g_data_stops",
      "class": [
        "data.table",
        "data.frame"
      ],
      "fields": [
        "stop_id",
        "route_id",
        "direction",
        "address",
        "latitude",
        "longitude"
      ],
      "rows": 27,
      "table": true,
      "tojson": true
    },
    {
      "name": "g2g_data_terminals",
      "title": "Bus Terminals Data",
      "object": "g2g_data_terminals",
      "class": [
        "data.table",
        "data.frame"
      ],
      "fields": [
        "terminal_id",
        "terminal_name",
        "latitude",
        "longitude"
      ],
      "rows": 2,
      "table": true,
      "tojson": true
    }
  ],
  "_help": [
    {
      "page": "g2g_clean_gps",
      "title": "Clean Raw GPS Data",
      "topics": [
        "g2g_clean_gps"
      ]
    },
    {
      "page": "g2g_data_gps",
      "title": "GPS Trajectory Subset",
      "topics": [
        "g2g_data_gps"
      ]
    },
    {
      "page": "g2g_data_stops",
      "title": "Bus Stops Data",
      "topics": [
        "g2g_data_stops"
      ]
    },
    {
      "page": "g2g_data_terminals",
      "title": "Bus Terminals Data",
      "topics": [
        "g2g_data_terminals"
      ]
    },
    {
      "page": "g2g_diagnostics",
      "title": "Extraction coverage diagnostics",
      "topics": [
        "g2g_diagnostics"
      ]
    },
    {
      "page": "g2g_extract_trips",
      "title": "Extract Trips from GPS Trajectories",
      "topics": [
        "g2g_extract_trips"
      ]
    },
    {
      "page": "g2g_extract_trips_and_stop_times",
      "title": "Extract Trips and Stop Times from GPS Trajectories",
      "topics": [
        "g2g_extract_trips_and_stop_times"
      ]
    },
    {
      "page": "g2g_shapes_from_trips",
      "title": "Build shapes.txt-Shaped Traces from a Pipeline Trajectory",
      "topics": [
        "g2g_shapes_from_trips"
      ]
    },
    {
      "page": "g2g_stops_from_gtfs",
      "title": "Derive a Stops Table from a Static GTFS Feed",
      "topics": [
        "g2g_stops_from_gtfs"
      ]
    },
    {
      "page": "g2g_stops_from_positions",
      "title": "Estimate Stop Coordinates from Vehicle Positions",
      "topics": [
        "g2g_stops_from_positions"
      ]
    },
    {
      "page": "g2g_terminals_from_gtfs",
      "title": "Derive Trip Terminals from a Static GTFS Feed",
      "topics": [
        "g2g_terminals_from_gtfs"
      ]
    }
  ],
  "_rundeps": [
    "data.table",
    "Rcpp"
  ],
  "_sysdeps": [
    {
      "shlib": "libstdc++",
      "package": "libstdc++6",
      "source": "gcc",
      "version": "16-20260322-1ubuntu1",
      "name": "c++",
      "homepage": "http://gcc.gnu.org/",
      "description": "GNU Standard C++ Library v3"
    }
  ],
  "_vignettes": [
    {
      "source": "gtfs-realtime.Rmd",
      "filename": "gtfs-realtime.html",
      "title": "GTFS-Realtime Vehicle Positions to GTFS, natively",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Reading an archived feed",
        "A worked example",
        "Terminals and stops from a baseline feed",
        "Extracting trips and stop times",
        "From inference tables to a valid GTFS feed",
        "Shapes: the geometry actually driven",
        "Notes for real archives"
      ],
      "created": "2026-07-18 06:49:06",
      "modified": "2026-07-21 08:57:10",
      "commits": 3
    }
  ],
  "_score": 2.6989700043360187,
  "_indexed": true,
  "_nocasepkg": "gps2gtfs",
  "_universes": [
    "e-kotov"
  ],
  "_binaries": [
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.2.0",
      "date": "2026-07-27T12:58:21.000Z",
      "distro": "resolute",
      "arch": "aarch64",
      "commit": "2e64149022ce82079c744a6ead140797cfc08c89",
      "fileid": "https://r2.ropensci.org/ac5133bf53c9ac5c305457122c94e298457fd9a1bd333e4b33f10109a665de8f",
      "status": "success",
      "check": "NOTE",
      "buildurl": "https://github.com/r-universe/e-kotov/actions/runs/30267514023"
    },
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.2.0",
      "date": "2026-07-27T12:57:58.000Z",
      "distro": "resolute",
      "arch": "x86_64",
      "commit": "2e64149022ce82079c744a6ead140797cfc08c89",
      "fileid": "https://r2.ropensci.org/219f8b9a25f3bac342567609aef0fea694a316af07ae26d9ee48274a38194e53",
      "status": "success",
      "check": "NOTE",
      "buildurl": "https://github.com/r-universe/e-kotov/actions/runs/30267514023"
    },
    {
      "r": "4.6.1",
      "os": "linux",
      "version": "0.2.0",
      "date": "2026-07-27T12:57:26.000Z",
      "distro": "resolute",
      "arch": "aarch64",
      "commit": "2e64149022ce82079c744a6ead140797cfc08c89",
      "fileid": "https://r2.ropensci.org/34928ccc8ecc6ae72efd68a9805706ac8806ef14ef4f03d142d315d8975b0748",
      "status": "success",
      "check": "NOTE",
      "buildurl": "https://github.com/r-universe/e-kotov/actions/runs/30267514023"
    },
    {
      "r": "4.6.1",
      "os": "linux",
      "version": "0.2.0",
      "date": "2026-07-27T12:57:17.000Z",
      "distro": "resolute",
      "arch": "x86_64",
      "commit": "2e64149022ce82079c744a6ead140797cfc08c89",
      "fileid": "https://r2.ropensci.org/6e379dea55609d5278484a4741c2cc02751fa70e2982ff159d8fa0140441eb51",
      "status": "success",
      "check": "NOTE",
      "buildurl": "https://github.com/r-universe/e-kotov/actions/runs/30267514023"
    },
    {
      "r": "4.5.3",
      "os": "mac",
      "version": "0.2.0",
      "date": "2026-07-27T12:58:30.000Z",
      "arch": "aarch64",
      "commit": "2e64149022ce82079c744a6ead140797cfc08c89",
      "fileid": "https://r2.ropensci.org/0d24a4a45460a7a6c436cb12777249b607c7a8576dddb5cb66ae7ab11706f1b8",
      "status": "success",
      "check": "NOTE",
      "buildurl": "https://github.com/r-universe/e-kotov/actions/runs/30267514023"
    },
    {
      "r": "4.5.3",
      "os": "mac",
      "version": "0.2.0",
      "date": "2026-07-27T12:59:52.000Z",
      "arch": "x86_64",
      "commit": "2e64149022ce82079c744a6ead140797cfc08c89",
      "fileid": "https://r2.ropensci.org/9e83b2baad8601b4e87a1e2ff946c6460ee97dc6bb4e71829c00037c76e27404",
      "status": "success",
      "check": "NOTE",
      "buildurl": "https://github.com/r-universe/e-kotov/actions/runs/30267514023"
    },
    {
      "r": "4.6.1",
      "os": "mac",
      "version": "0.2.0",
      "date": "2026-07-27T12:56:59.000Z",
      "arch": "aarch64",
      "commit": "2e64149022ce82079c744a6ead140797cfc08c89",
      "fileid": "https://r2.ropensci.org/80ea654114de9a5ed1173d69bb352845798ae3939b058d6daba36ad7cf931640",
      "status": "success",
      "check": "NOTE",
      "buildurl": "https://github.com/r-universe/e-kotov/actions/runs/30267514023"
    },
    {
      "r": "4.6.1",
      "os": "mac",
      "version": "0.2.0",
      "date": "2026-07-27T13:00:10.000Z",
      "arch": "x86_64",
      "commit": "2e64149022ce82079c744a6ead140797cfc08c89",
      "fileid": "https://r2.ropensci.org/09d90bf029cabb83cd4386dd253c9265d91eb1004b3778ed6921bdf5b29d9c6e",
      "status": "success",
      "check": "NOTE",
      "buildurl": "https://github.com/r-universe/e-kotov/actions/runs/30267514023"
    },
    {
      "r": "4.6.0",
      "os": "wasm",
      "version": "0.2.0",
      "date": "2026-07-27T12:57:46.000Z",
      "arch": "emscripten",
      "commit": "2e64149022ce82079c744a6ead140797cfc08c89",
      "fileid": "https://r2.ropensci.org/ad7c8b5eceb52b0aff8efeb961f529f763497c70f2a1fbc57345b5dfc20df32b",
      "status": "success",
      "buildurl": "https://github.com/r-universe/e-kotov/actions/runs/30267514023"
    }
  ]
}