[general]
name=Isobenefit Urbanism
qgisMinimumVersion=4.0
qgisMaximumVersion=4.99
description=Sketch walkable urban growth scenarios on real-world data, after D'Acci's Isobenefit Urbanism: every new home within a walk of a mixed-use centre and of green space.
version=0.15.0
author=Gareth Simons
email=gareth.simons@ucl.ac.uk

about=The Isobenefit Urbanism QGIS plugin explores walkable urban development against real-world datasets. It grows settlements by simple rules: every new home must sit within a walking distance of a mixed-use centre (shops, services) and of green space. The model follows Luca D'Acci's Isobenefit Urbanism (D'Acci 2019, Journal of Environmental Management; D'Acci & Voto 2023, SoftwareX) and reimplements the cellular automaton originally coded by Michele Voto, with documented departures and extensions (fixed existing fabric, OSM inputs, transit-oriented growth, centre post-processing). See the homepage for the full guide and worked scenarios.
    The plugin bundles an OpenStreetMap extraction tool, ships six worked scenarios in the repository's "scenarios" folder, and writes reproducible runs (each run saves a parameters sidecar that the dialog can reload).
    This plugin is marked experimental: enable "Show also Experimental Plugins" in the plugin manager settings to see it.
    On first use, the plugin offers to install its simulation engine (the "isobenefit" package from PyPI) into the QGIS Python environment; this needs an internet connection and a QGIS restart. No manual package installation is required.
    Licensed under the GNU AGPL-3.0-or-later (see the LICENSE file).

tracker=https://github.com/UCL/BSP-isobenefit-qgis-plugin/issues
repository=https://github.com/UCL/BSP-isobenefit-qgis-plugin
homepage=https://github-pages.ucl.ac.uk/BSP-isobenefit-qgis-plugin/
icon=icon.png
experimental=True
deprecated=False
server=False

changelog=
    0.15.0 Barriers can be crossed where people can walk. A carved motorway, railway or river corridor blocked movement along its whole length, with no bridge, level crossing or station footbridge anywhere, so it severed land a planner can plainly reach: at the Crews Hill scenario 238 hectares of developable ground sat 75 metres from the station and unreachable at any distance. The OSM download now writes a walkable-ways layer (footpaths, and the streets a pedestrian may use, excluding motorways and trunk roads), and the run dialog takes it as an input you can edit or replace with your own. It is applied after the unbuildable carve and after the slope limit, so a footbridge marks the motorway beneath it crossable. Those cells stay closed to development: a bridge does not make a railway a building site, only a route across it. Scenario panels draw a crossing as a gap in the barrier rather than as a fourth class of ground, and barriers are drawn solid and dark, since a reader who cannot see the wall reads the gap as available land.
    0.14.0 A slope limit, barriers carved by cell centre, walks that cannot cut a corner, and centres that are earned rather than drawn. The run dialog gains a steep-slopes layer and a slope limit in degrees: bands at or above the limit are unbuildable, which the shipped scenarios described but the plugin never applied, so a hillside scenario ran without its terrain constraint. Unbuildable land and barrier corridors are now burned by cell centre like every other layer instead of by every touched cell, which had carved up to a cell beyond each edge and, at Cambourne, doubled the carved area; existing built fabric is no longer carved away by a corridor that clips it. A walk can no longer pass diagonally between two blocked cells, so a carved corridor, a river or a steep band blocks it properly. Centres are earned, not drawn, and a settlement may thicken into its own bay. The minimum green span protected any short run of green between the candidate cell and the nearest built land, in each direction independently. Where growth formed a C, U or N, the arms of the same settlement read as the far side of a green corridor, so the bay they enclosed could never be filled: runs left narrow fingers with a permanent green slot on either side, and windows reported capacity findings that were artefacts of the rule. The span is now protected only where it separates the candidate from a DIFFERENT settlement, which is what a corridor between developments means; a run ending at the window edge no longer counts either. The park area rule and the green walk still govern what is built. Case studies gain what the rule was withholding: Cambourne reaches 100 percent of target (was 23), Crews Hill 102 (was 81), Pajarito 101 (was 81), and the transit corridor run no longer costs population. Centres are earned, not drawn. New centres previously appeared by a probability drawn per cell per iteration, which tied the number of settlements to the size of the window, the resolution of the grid and the pace of growth rather than to the population: a Cambourne window drew twenty-four times as many satellite centres as the published model's area-scaled rate, and post-processing then pruned three quarters of the grown population as unviable. Each new home is now charged to the centre it is nearest, and a centre founds its successor once that population reaches the service viability threshold, or once it has no room left to grow. Growth therefore creates the centres post-processing is willing to keep: at the Cambourne demonstration the plan now houses 100 percent of the target where it held 23 percent, and pruning removes a tenth of a percent of the grown population instead of three quarters. Three settings go with the change. The build probability and the neighbouring-centre probability are no longer exposed: the build draw paces growth and varies the ensemble, and no longer shapes the plan. Dispersed development becomes a choice of where an earned centre may go, attached to existing development or detached from it, in place of the off/moderate/aggressive probabilities. The service viability threshold now governs settlement size directly, so raising it yields fewer, larger settlements. Scenario files record allow_detached in place of dispersal and build_prob. A centre drawn as an area counts as one centre rather than one per covered cell, the nearest-centre assignment breaks ties on position so a layer's feature order cannot change a plan, and the build-out condition is tested directly rather than inferred from a quiet iteration, which at a low build rate used to found settlements that the population had not earned.
    0.13.1 The centre-seeding cap is removed. New centres previously stopped seeding once a run reached 80 percent of its population target, a guard that predates the viability rules: post-processing already removes a centre that ends up serving fewer than the service viability threshold, and prunes the growth no remaining centre reaches. Seeding now continues for the whole run and viability alone decides which centres survive. Windows whose late growth was dispersed keep less of the target than before, because centres that seed late gather too few homes and are pruned with the growth around them; concentrating growth (a transit corridor preference, lower dispersal, or a wider centre walk) recovers it.
    0.13.0 Transit-oriented growth, attached infill counted, doomed pockets ruled out up front. Two transit inputs now shape a run. Transit hubs (rail and tram stations, or any point the planner adds) each anchor a pinned mixed-use centre that seeds growth and survives post-processing, so a designated centre can be placed by hand. Transit corridors (bus stops as points, or a proposed route drawn as a line) attract growth: a corridor preference of 0 to 1 scales the development draws outside the walkable transit catchments (400 m of a stop by default, 1,200 m of a hub), so growth concentrates along existing or proposed transit; at the default of 0 the run is unchanged and the layers feed the run report only. The run log warns when the catchments cannot hold the target population. The Cambourne scenario ships a hand-drawn proposed corridor and bus rapid transit stop demonstrating both levers. Absorption is removed: a cluster of new development grown against existing fabric was anchored on the town's centres by the growth rules, so it stays new development whatever its size (previously it was folded into the existing fabric and dropped from the counts, which discarded large amounts of legitimate infill). Grid preparation now reclassifies unviable pockets as protected green: a connected patch of buildable land that touches no existing fabric and is smaller than the minimum settlement can never host viable development, so it is ruled out before the run instead of being grown and pruned. Delivered population and served coverage rise substantially in windows with existing fabric.
    0.12.22 Four outputs replace the two clustering options: the raw run (coloured by the density tiers it actually drew, in place), centres as grown, optimised placement, and fewest centres. Every processed option keeps every home within the centre walk: a placement move that would strand a home is discarded, a centre is added wherever new development lacks provision within the walk, and a centre is removed only while every home stays covered. A contiguous cluster of new development below the minimum settlement size is absorbed into the existing fabric when it touches it (stray free cells inside a town are usually unmapped roads or parks, not building sites) and reverts to green when detached. Loading parameters now lists exactly which fields changed with old and new values, and names any keys in the file it could not use. Downloaded OSM layers arrive pre-styled in a fixed colour scheme instead of random symbology. Requires engine 0.12.22 (the raw layer's drawn densities are recovered by re-running the selected ensemble member at its own seed).
    0.12.21 The run report is a set of fixed-width tables: the plan options side by side (population accommodated, coverage, walks, per-person provision), the achieved density mix per tier, and the centre audit with the weakest new centres; single-run mode now writes a report too. Rail and tram stations seed growth as centres by default (development gathers around a station, and post-processing pins and grows its centre); stations and stops that land on a carved corridor cell snap to the nearest walkable cell instead of dropping out of the anchor and access accounting. The dialog rejects a CRS whose area of use misses the extents layer and names the local UTM zone to pick, instead of failing mid-run with a raw transform error.
    0.12.20 Metadata made parseable by the plugin repository (a stray percent sign rejected the 0.12.19 upload); the release check now parses it the same way the repository does. A run's output layers load as one group named for the output folder and run, so successive runs stay organised in the layers pane.
    0.12.19 The run dialog, the message bar and the guide all point at the Isobenefit tab of the Log Messages panel, where a running simulation reports per-stage progress and warnings.
    0.12.18 Post-processing candidates run about twice as fast again (component labelling joins the walk field in the engine; the placement stack caches its columns), and the progress bar now gives the selection stage the larger share of the bar it actually occupies.
    0.12.17 Post-processing is engine-accelerated and barrier-aware: the walk field is computed by the Rust engine (a large window post-processes in under a minute), and scoring walks now detour around water and carved corridors exactly as growth does (they previously crossed them). Requires engine 0.12.17; the plugin prompts for the upgrade.
    0.12.16 With an OSM download in the project, the run dialog pre-fills the output folder as a scenarios folder beside the downloaded data, numbered upward when earlier runs exist. A chosen folder is never overwritten.
    0.12.15 One distance model: bounded grid walks everywhere, in growth and in scoring. Street-network routing removed (a new settlement has no streets yet, so a network metric measured new and existing fabric on different terms); the streets layer stays as map context and the source of carved barrier corridors. Centre placement is settlement-local: a centre is positioned only by homes in its own contiguous settlement, so it cannot be dragged to a periphery cell facing a green gap. Scenario panels colour slope-excluded land tan, distinct from water and corridors. Plugin unload no longer errors after a finished run.
    0.12.14 Centre refinement caches walk fields by coordinate across the whole ensemble: post-processing a many-centre window drops from ~40 s to ~3 s per candidate with identical results. Selection progress logs every candidate.
    0.12.13 The post-processing selection reports progress, honours Cancel, and runs in two phases when a street network is supplied (every run ranked by the grid walk, the leaders re-scored along the network), so large windows finish in minutes rather than sitting silent near the end of the bar.
    0.12.12 Defaults grounded in practice: 800 m centre walk (a ten-minute walk) and 400 m green walk (the WHO/Natural England everyday-green reach); the minimum settlement is now a population (default 1,000 people) rather than an area; new development must earn its own mixed-use centres (a nearby existing centre no longer stands in, so growth cannot sprawl centre-free along existing fabric); scenario downloads fixed on the website; one consolidated Dnipro scenario; distances, barriers and station handling documented in the guide.
    0.12.11 Growth no longer stands off carved road, rail and river corridors: a green strip bounded by unbuildable land is exempt from the minimum-span rule, so development can build up to a barrier while green corridors between developments stay protected. Seeding diagrams and probability mechanics documented on the website; growth troubleshooting added to the guide.
    0.12.10 First public beta, for QGIS 4. Earlier development history is recorded in the repository.

tags=pyqgis,simulation,planning,urban planning,urbanism,walkability,cellular automaton,openstreetmap,scenario,green space
