Version: [5450] Easy-OTP 0.7.0

0.7.0
* Analysis — RouteViaPoints (N-6):
- feat(analysis): RouteViaPoints — city tour planner: supply a START
point,
an END point, and an optional layer of via-points (landmarks) in any
order;
the plugin automatically computes a sensible visit order using
nearest-neighbour + 2-opt heuristic (pure Python, haversine distance),
then makes one OTP /plan query per segment (N+1 sequential queries).
- Transport mode selectable: WALK (default), BICYCLE, CAR,
TRANSIT,WALK.
TRANSIT,WALK requires a GTFS folder; other modes use a street-only
graph.
GTFS date validation warns when the analysis date falls outside the
service
calendar or on a weekend.
- Output: one LineString feature per leg, attributed with
segment_order,
from_label, to_label, duration_min, distance_m, mode, via_point_id.
TRANSIT,WALK routes produce multiple features per segment (one per
leg).
- Soft-fail: all unroutable segments collected and reported together
so the
user sees every problematic via-point at once.
- Soft warning when more than 20 via-points are supplied.
* Realtime — RT-3 generalization:
- feat(realtime): RecordGtfsRt duration capped at 1500 min (25h); new
span-check warning in BuildRealizedGtfs when an archive spans more
than ~one service day (RT3-1).
- feat(realtime): BuildRealizedGtfs supports multi-file static GTFS
via
STATIC_GTFS_EXTRA (e.g. Kraków's separate tram/bus feeds) (RT3-2).
- feat(realtime): frozen/stale GTFS-RT feed detection — hash-based
streak warning in RecordGtfsRt (FREEZE_WARNING_THRESHOLD), snapshot
deduplication in BuildRealizedGtfs (DEDUPLICATE_FROZEN_SNAPSHOTS)
(RT3-3).
- feat(realtime): reconcile repeated predictions for the same trip by
lead time — RECONCILE_LAST_SNAPSHOT (default True); documented,
intentional shift in P50/P85 output on existing archives (RT3-4).
- feat(realtime): MATCHING_MODE (AUTO/TRIP_ID/ROUTE_STOP_FALLBACK) —
route_id+stop_id fallback matching for feeds with a permanently
disjoint trip_id namespace vs. the static GTFS (Poznań/Kraków);
fails fast with a clear message instead of a silent empty result
(RT3-5).
- feat(realtime): SEGMENT_SOURCE_MODE (AUTO/PER_MESSAGE/
CROSS_SNAPSHOT) — stitches segment observations across snapshots for
next-stop-only GTFS-RT feeds (Poznań); PER_MESSAGE (today's
behaviour) is unchanged for already-working feeds (RT3-6).
0.6.0
* Analysis — Network & Accessibility (new algorithms):
- feat(analysis): GenerateIsochrones (N-1) — /isochrone polygons for
1..N
origins, FROM/TO direction, multiple cutoffs; optional street-only
graph
for non-transit modes (no GTFS needed).
- feat(analysis): GenerateIsochronesOverTime (N-2) — one point,
isochrones
across a time window; time field drives the Temporal Controller.
- feat(analysis): RunServiceCoverage (N-3) — multi-point service
coverage;
reachable-count raster + optional hex/square/own-layer aggregation.
- feat(analysis): RunOriginDestinationTimes (N-4) — per-origin
detailed
trip statistics to one destination (minutes); ThreadPoolExecutor;
404/snapping mitigations (maxWalkDistance lever, optional
snap-to-network,
errorId diagnostics).
- feat(analysis): RunTravelTimeMatrix (N-5) — N×M OD travel-time
matrix;
long/wide CSV (XLSX if openpyxl present), optional OD line layer.
- feat(core): isochrone_client and plan_client REST clients (urllib;
OTP 1.5 /isochrone and /plan endpoints).
0.5.0
* Analysis:
- feat(analysis): RunTemporalAccessibility now saves origin point as a
named
output vector layer (point geometry + CRS) with run metadata fields:
run_date, run_time, time_window, interval_min, router_id, arrive_by.
* i18n:
- feat(i18n): Polish (pl) UI translation — easy_otp_pl.qm compiled and
bundled; tr() context fixed to class name so Processing strings
translate.
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.

yes

GISBoost

2026-08-06T07:19:22.698815+00:00

3.22.0

3.99.0

None

no

Version management

Plugin details