{"name": "Easy-OTP", "package_name": "easy_otp", "version": "0.5.0", "experimental": true, "qgis_min": "3.22.0", "qgis_max": "3.99.0", "downloads": 30, "uploaded_by": "GISBoost", "upload_datetime": "2026-06-30T13:36:22.097310", "changelog": "0.5.0\n* Analysis:\n- feat(analysis): RunTemporalAccessibility now saves origin point as a named\noutput vector layer (point geometry + CRS) with run metadata fields:\nrun_date, run_time, time_window, interval_min, router_id, arrive_by.\n* i18n:\n- feat(i18n): Polish (pl) UI translation \u2014 easy_otp_pl.qm compiled and\nbundled; tr() context fixed to class name so Processing strings translate.\n0.4.0\n* Realtime (new section):\n- feat(realtime): RT-3 BuildRealizedGtfs \u2014 reconstruct realized static GTFS\n(P50 median + P85 85th-percentile feeds) from a RecordGtfsRt snapshot archive;\naggregation per stop-pair segment (route_id, direction_id, from_stop_id,\nto_stop_id); output feeds work directly with RunTemporalAccessibility.\nRequires google.protobuf (bootstrapped on first use via dependencies.py).\n- feat(realtime): RT-2 RecordGtfsRt \u2014 GTFS-RT TripUpdates snapshot archiver;\npolls a feed at a configurable interval (15\u2013600 s) and writes raw .pb files\nplus a recording.json manifest; cancel-safe and partial-archive-safe.\n- feat(realtime): RT-1 RunRealtimeAccessibility \u2014 live GTFS-RT TripUpdates feed\nintegrated into OTP stop-time-updater; tri-state RT effectiveness detection\n(effective / not-applied / inconclusive).\n* Other fixes:\n- fix(deps): install openpyxl via in-process urllib wheel download (no admin,\nworks around SSL absence in QGIS 3.22 pip subprocess).\n- fix(ux): OTP server runs in a visible, closeable Java console window; graph\nbuild phase stays windowless.\n0.3.5\n- chore: lower qgisMinimumVersion to 3.22 (verified API/Python compatibility;\nall PyQGIS APIs used since \u22643.14, all Processing IDs since \u22643.16).\n- A-1: arriveBy toggle in RunTemporalAccessibility \u2014 analyse arrive-by\naccessibility in addition to depart-at mode.\n- A-3: Optional XLSX summary report for RunTemporalAccessibility and\nCountFromExistingSurfaces (requires openpyxl).\n- A-2: CompareTemporalAccessibility \u2014 delta raster and classified hex-grid\ndifference between two accessibility scenarios; supports NoData semantics\nfor cells present in only one scenario.\n- fix(security): safe zip extraction and nosec annotations for Bandit HIGH\nfindings (B202, B324, B310, B103).\n- pre-publish: add icon placeholder SVG, easy_otp/LICENSE, rewrite metadata\nabout/changelog, remove qgisMaximumVersion.\n0.2.0\n- R1a: Prepare student layer \u2014 import GUS NSP 2021 Excel into a polygon layer\n(handles raw / wrong / done data states).\n- R1b: Population overlay \u2014 areal interpolation of demographics onto the hex\ngrid; preserves fractional counts (Float field, fixes the integer rounding\nbug present in the reference QGIS model).\n- R2: Download transit data \u2014 automated OSM (Geofabrik) and GTFS (Transitland)\nacquisition with 7-day OSM cache and continental-feed filtering.\n- R3: Download JRE \u2014 automated Eclipse Temurin 8 download (Adoptium API,\nSHA-256 verified) plus the OTP 1.5.0 shaded jar; both paths saved to\nQSettings for hands-off setup.\n- Fix: service-time category thresholds now scale proportionally for\nanalysis windows shorter than 06:00\u201322:00 (a shorter window previously\nforced almost every cell into \"inaccessible\"). Full-window runs are\nunchanged. A warning is logged whenever scaling is applied.\n0.1.0\n- Initial release: TestOtpServer, GenerateHexGrid,\nRunTemporalAccessibility, CountFromExistingSurfaces.", "external_deps": null, "download_url": "https://plugins.qgis.org/plugins/easy_otp/version/0.5.0/download/"}