[general]
name=Easy-OTP
qgisMinimumVersion=3.22
description=Automated temporal accessibility analysis using OpenTripPlanner.
about=Automates temporal accessibility analysis for public transport using OpenTripPlanner 1.5.0. Generates per-minute travel-time surfaces, counts continuous service-time minutes per hexagonal grid cell, and classifies cells into four categories. Analysis algorithms: RunTemporalAccessibility (depart-at and arrive-by modes, optional XLSX report), CountFromExistingSurfaces, CompareTemporalAccessibility (delta analysis), GenerateHexGrid, PrepareStudentLayer, PopulationOverlay. Realtime algorithms: RunRealtimeAccessibility (RT-1, live GTFS-RT feed integrated into OTP), RecordGtfsRt (RT-2, GTFS-RT TripUpdates archiver for offline analysis), BuildRealizedGtfs (RT-3, reconstructs a realized static GTFS — P50 median and P85 85th-percentile feeds — from a RecordGtfsRt snapshot archive; output feeds can be passed directly to RunTemporalAccessibility; requires google.protobuf bootstrapped on first use). Setup: DownloadJre (Eclipse Temurin 8 + OTP 1.5.0 jar, SHA-256 verified), DownloadTransitData (Geofabrik OSM + Transitland GTFS), TestOtpServer.
version=0.4.0
author=Michal Kaczorowski
email=michal.kaczorowsx@gmail.com
license=GPL-2.0-or-later
category=Analysis
icon=resources/icon.svg
experimental=True
deprecated=False
hasProcessingProvider=yes
tags=accessibility,otp,opentripplanner,transit,gtfs,isochrone,public transport,travel time,population,jre,java
homepage=https://github.com/GISBoost/easy-OTP
repository=https://github.com/GISBoost/easy-OTP
tracker=https://github.com/GISBoost/easy-OTP/issues
changelog=0.4.0
    * Realtime (new section):
    - feat(realtime): RT-3 BuildRealizedGtfs — reconstruct realized static GTFS
      (P50 median + P85 85th-percentile feeds) from a RecordGtfsRt snapshot archive;
      aggregation per stop-pair segment (route_id, direction_id, from_stop_id,
      to_stop_id); output feeds work directly with RunTemporalAccessibility.
      Requires google.protobuf (bootstrapped on first use via dependencies.py).
    - feat(realtime): RT-2 RecordGtfsRt — GTFS-RT TripUpdates snapshot archiver;
      polls a feed at a configurable interval (15–600 s) and writes raw .pb files
      plus a recording.json manifest; cancel-safe and partial-archive-safe.
    - feat(realtime): RT-1 RunRealtimeAccessibility — live GTFS-RT TripUpdates feed
      integrated into OTP stop-time-updater; tri-state RT effectiveness detection
      (effective / not-applied / inconclusive).
    * Other fixes:
    - fix(deps): install openpyxl via in-process urllib wheel download (no admin,
      works around SSL absence in QGIS 3.22 pip subprocess).
    - fix(ux): OTP server runs in a visible, closeable Java console window; graph
      build phase stays windowless.
    0.3.5
    - chore: lower qgisMinimumVersion to 3.22 (verified API/Python compatibility;
      all PyQGIS APIs used since ≤3.14, all Processing IDs since ≤3.16).
    - A-1: arriveBy toggle in RunTemporalAccessibility — analyse arrive-by
      accessibility in addition to depart-at mode.
    - A-3: Optional XLSX summary report for RunTemporalAccessibility and
      CountFromExistingSurfaces (requires openpyxl).
    - A-2: CompareTemporalAccessibility — delta raster and classified hex-grid
      difference between two accessibility scenarios; supports NoData semantics
      for cells present in only one scenario.
    - fix(security): safe zip extraction and nosec annotations for Bandit HIGH
      findings (B202, B324, B310, B103).
    - pre-publish: add icon placeholder SVG, easy_otp/LICENSE, rewrite metadata
      about/changelog, remove qgisMaximumVersion.
    0.2.0
    - R1a: Prepare student layer — import GUS NSP 2021 Excel into a polygon layer
      (handles raw / wrong / done data states).
    - R1b: Population overlay — areal interpolation of demographics onto the hex
      grid; preserves fractional counts (Float field, fixes the integer rounding
      bug present in the reference QGIS model).
    - R2: Download transit data — automated OSM (Geofabrik) and GTFS (Transitland)
      acquisition with 7-day OSM cache and continental-feed filtering.
    - R3: Download JRE — automated Eclipse Temurin 8 download (Adoptium API,
      SHA-256 verified) plus the OTP 1.5.0 shaded jar; both paths saved to
      QSettings for hands-off setup.
    - Fix: service-time category thresholds now scale proportionally for
      analysis windows shorter than 06:00–22:00 (a shorter window previously
      forced almost every cell into "inaccessible"). Full-window runs are
      unchanged. A warning is logged whenever scaling is applied.
    0.1.0
    - Initial release: TestOtpServer, GenerateHexGrid,
      RunTemporalAccessibility, CountFromExistingSurfaces.
