## [3.6.0] - 2026-07-09 The Batch Plan Auditor closes the loop (50 algorithms, 15 groups). ### Added - **Batch Plan Auditor** (Reporting group) — the whole standard battery in one run: network + demand + amenities + land use + facilities + greens in, and it chains the 15-minute access score, walkability audit, land-use balance, facility adequacy, green-space access and access equity; every score lands in one scenario snapshot JSON (ready for Scenario Compare A/B) plus an optional one-file Plan Performance Report. Each part optional; fully headless and model-designer friendly. - **Plan Dashboard**: Plan Performance Index **history sparkline** (grows with every saved snapshot) and an **Audit…** button opening the Batch Plan Auditor. - Scenario metric registry gains the auditor keys (walkability mean, low-walk share, weakest green coverage, access Gini) — direction-aware in comparisons. - `docs/METHODS.md` — the method, formula and primary source of every tool group. ### Testing - Engine unit checks grown to **350**; end-to-end assertions to **274**; dashboard harness to **24 checks** — on QGIS 3.44 LTR and QGIS 4.0.2. ## [3.5.0] - 2026-07-09 Urban Growth: change accounting, growth simulation and the sprawl scorecard (49 algorithms). ### Added - **NEW GROUP: Urban Growth.** - **Land-Cover Change Analysis** — the transition matrix of two class rasters: from/to pairs with cells + hectares, per-class gains/losses/persistence/net, optional class labels; the largest conversion named in the log. - **Urban Growth Simulation (CA)** — constrained cellular automaton (SLEUTH tradition): score = suitability × (base + weight × urban neighbourhood share); top scorers convert per step until the land demand is met; never-build constraints; deterministic for a given seed **across processes** (unit-tested). Output: year-of-conversion raster. - **Urban Sprawl Metrics** — SDG 11.3.1 LCRPGR (land consumption vs population growth) + patch count, largest-patch share, edge density. - Engine: pure-NumPy `engine/growth.py`; three new group-coloured tool icons. ### Testing - Engine unit checks grown to **345** (hand-counted transition matrices, gradient-following CA, constraint masks, cross-process determinism, hand-computed LCRPGR and edge lengths); end-to-end assertions to **266** on QGIS 3.44 LTR and QGIS 4.0.2. ## [3.4.0] - 2026-07-09 Environment Screening: road noise and green infrastructure (46 algorithms). ### Added - **Road Noise Screening** (Microclimate group) — screening-quality dB(A) grid: RLS-90-style emission from traffic volumes (hourly factor for AADT) and heavy shares; roads as line-calibrated point sources; energetic sum with 20 lg r spreading; fixed insertion loss behind buildings. Optional receivers report levels + a population exposure table (5 dB bands). Documented as screening, not compliance. - **NEW GROUP: Green Infrastructure.** - **Green Space Access** — the park-hierarchy standard (`min_ha=max_dist` ladder) on real network distances: per-demand pass/fail per class, classes met, per-class covered population, citywide m²/capita. - **Urban Green Connectivity** — crossable-gap patch graph: components, binary Probability-of-Connectivity index, per-patch dPC importance (the stepping-stone argument, quantified). - Engine: pure-NumPy `engine/noise.py` (the infinite-line calibration is a unit test) and `engine/green.py`; three new group-coloured tool icons. ### Testing - Engine unit checks grown to **331**; end-to-end assertions to **256** on QGIS 3.44 LTR and QGIS 4.0.2. ## [3.3.0] - 2026-07-09 Population & Housing: the demographic backbone of plan-making (43 algorithms). ### Added - **NEW GROUP: Population and Housing.** - **Population Projection (Cohort-Component)** — a Leslie-matrix projection from a plain age-group table: per-step survival, fertility and optional net migration as fields, any number of steps. Outputs step × age-group rows and per-step totals. Single-sex screening form; rates constant over the horizon. - **Housing Needs Assessment** — the standard needs identity, batchable: future households, vacancy allowance, replacement losses, backlog; every intermediate in a metric/value table. Negative need = surplus. - **Residential Capacity** — per-parcel buildable floorspace from FAR − existing floorspace → whole dwelling units (unit size, net-to-gross efficiency), with a district roll-up. The reality check against the housing need; feeds the Land-Use Allocation Optimizer. - Engine: pure-NumPy `engine/population.py` (`leslie_matrix`, `cohort_projection`, `housing_needs`, `residential_capacity`); `report.svg_pyramid` age-structure chart; three new group-coloured tool icons. ### Testing - Engine unit checks grown to **316** (hand-computed two-step Leslie projection, migration floors, needs identity, capacity clamps); end-to-end assertions to **242** on QGIS 3.44 LTR and QGIS 4.0.2. ## [3.2.0] - 2026-07-09 Visibility: viewsheds, isovists and landmark exposure (40 algorithms). ### Added - **NEW GROUP: Visibility.** - **Viewshed (DSM)** — line-of-sight sweep from observer points: observer/target heights, view radius, direction count; visibility-count raster output. Radial sweep with a running horizon angle, rays capped at the raster diagonal. - **Isovist Field** — Benedikt's 2-D visibility measures sampled on a point grid between buildings: visible area/perimeter, min/max/mean radial, circularity, occlusivity. The VGA companion to the space-syntax tools. - **Visual Exposure of Landmarks** — the inverse viewshed: outline samples (optional extra height for spires), per-cell count of visible outline points; difference before/after DSMs for skyline & heritage impact. - Engine: pure-NumPy `engine/visibility.py`; three new group-coloured tool icons. ### Testing - Engine unit checks grown to **304** (wall shadows, tall-target pokes, radius caps, corridor vs plaza isovists); end-to-end assertions to **233** on QGIS 3.44 LTR and QGIS 4.0.2. ## [3.1.0] - 2026-07-09 Transit: GTFS feeds become first-class citizens (37 algorithms). ### Added - **NEW GROUP: Transit.** - **GTFS Import and Service Stats** — loads a GTFS zip into QGIS with validation on the way in (named errors for missing files / malformed times). Stops as WGS84 points with daily departures + route counts; a route summary table (mode, trips, service span, longest stop sequence). Service day defaults to the feed's first active day. - **Transit Frequency Map** — departures per stop within a time window: departures/hour, mean headway minutes, distinct routes (the frequent-network map), plus per-route trips in the window. - **Transit Travel-Time Access** — door-to-door with public transport: walk to a stop on the street network, ride a RAPTOR-style timetable with up to N transfers, walk to each destination. Reports walk-only vs transit minutes, winning mode and minutes saved per destination. Overtaking trips treated FIFO (screening simplification, documented). - Engine: pure-stdlib+NumPy `engine/transit.py` — GTFS zip reader (utf-8-sig, past-midnight times as plain seconds, never datetimes), `calendar`/`calendar_dates` service resolution, `stop_frequencies`, RAPTOR `compile_day` (pattern grouping by route + stop sequence) and `earliest_arrival`; `paths.multi_source_offset` (egress Dijkstra whose sources start at their own arrival offsets); three new group-coloured tool icons. ### Testing - Engine unit checks grown to **287** (synthetic in-code GTFS: transfer chains, no-transfer cutoffs, late boarding, cancelled service days); end-to-end assertions to **221** on QGIS 3.44 LTR and QGIS 4.0.2. ## [3.0.0] - 2026-07-09 Scenarios & Walkability: the plan-evaluation loop closes and a tenth tool group opens (34 algorithms). ### Added - **Scenario Snapshot** (Reporting group) — captures the plan score metrics of the current project into a snapshot JSON. - PlanX output layers auto-detected by field signatures (access score, balance table, facility adequacy, demand coverage, density grid) or pinned explicitly. - Model-designer friendly: run the tools for alternative A, snapshot, rerun for B, snapshot, feed both files to Scenario Compare (A/B). - **NEW GROUP: Walkability.** - **Walkability Audit** — scores every street segment 0–100 from the classic walkability-index ingredients (Frank et al. 2010): intersection density, land-use mix entropy, destination counts, block length, slope. Editable weights and breakpoints; sub-scores + raw ingredients on every segment; missing inputs renormalised away. - **Pedestrian Route Quality** — routes over quality-weighted streets (weight = length × (1 + penalty × (100 − score)/100)); reports detour ratio vs the plain shortest path, length-weighted mean walk score and the share of the route on low-scoring segments. Nearest-destination or all-pairs. - Engine: pure-NumPy `engine/walkability.py`; `paths.shortest_path_tree` / `reconstruct_path` (predecessor Dijkstra that names the parallel edge taken); shared collector `planx/collect.py` feeding both the dashboard dock and the snapshot algorithm; three new group-coloured tool icons. ### Testing - Engine unit checks grown to **265**; end-to-end assertions to **205** on QGIS 3.44 LTR and QGIS 4.0.2. ## [2.13.0] - 2026-07-08 Equity Cross-Tabs & Scenario Compare: who holds the low values, and which plan alternative wins (31 algorithms). ### Added - **Demographic Equity Cross-Tabs** (Equity group) — cross-tabulates any per-unit value by population subgroup. - Population-weighted quantile classes (quintiles by default) or fixed breaks. - Representation ratio per group × class cell (1 = proportional; over-representation in the lowest class flags a disadvantaged group). - Per-group population/value shares, weighted mean/P10/median/P90, internal Gini, and the Duncan & Duncan dissimilarity index vs the rest. - Optional second group field crosses two demographics; the input comes back annotated with its value class and cell representation ratio for mapping. - **Scenario Compare (A/B)** (Reporting group) — the A/B view of the Plan Dashboard. - The dashboard dock gains **Save A / Save B** scenario snapshots (score metrics to JSON next to the project) and an in-dock comparison panel with direction-aware winners and coloured deltas. - Headless too: `planx:scenariocompare` diffs two snapshot JSON files into a comparison table and an optional one-file HTML comparison report. - Engine: pure-NumPy `equity.crosstab` / `equity.value_classes`; new pure-stdlib `engine/scenario.py` (snapshot / compare / verdict, direction registry); `report.compare_section` / `build_compare_html`; two new group-coloured tool icons. ### Testing - Engine unit checks grown to **250**; end-to-end assertions to **188** on QGIS 3.44 LTR and QGIS 4.0.2. ## [2.12.0] - 2026-07-08 Siting & Contiguity: Capacitated Facility Siting and Contiguous Land-Use Allocation (29 algorithms). ### Added - **Capacitated Facility Siting** (Optimization group) — chooses where to build p new facilities respecting per-site capacity constraints and travel limits. - First, a greedy construction phase selects sites that maximize newly served demand under a capacity-respecting allocation. - Then, a Teitz-Bart vertex substitution phase optimizes the locations by swapping sites to maximize total served demand (with total travel cost as a tiebreaker). - Existing facilities enter as fixed-open. - Outputs selected sites (with rank, load, utilization, marginal demand gain), allocation lines (demand to site connection with cost), and uncovered demand. - **Contiguous Land-Use Allocation** (Optimization group) — optional Hard Contiguity mode on the Land-Use Allocation algorithm to assign parcels to uses forming a single connected component per use. - Seed-based concurrent region-growing followed by boundary-swap local search preserving subgraph connectivity of affected uses. - Default is Soft (existing behaviour unchanged). - `engine/optimize.capacitated_siting` and `engine/allocate.allocate_contiguous` — pure NumPy. - A new group-coloured tool icon for Capacitated Facility Siting. ### Testing - Engine unit checks grown to **225**; end-to-end assertions to **174** on QGIS 3.44 LTR and QGIS 4.0.2.
yes
geo140195philo
2026-07-09T13:41:37.759887+00:00
3.22.0
4.99.0
None
no
Plugin Tags