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
Plugin Tags