103 cities. Untick all to reach every
town and village — 20,847 of them.
lonlat
halfm · cellm
cellm · padm
canopym
storey heightm — applies to EVERY building:levels
untagged buildings assumelevels
why pad extends the grid and not the city
pad extends the GRID beyond the boundary; it does not extend the
city. A siren at the edge is heard across the line, and a hill or a block
just outside still blocks sound coming back in — so the surface is built
over the padded rectangle and stays complete, while the boundary decides
only where a siren may stand and where coverage is counted.
Masking the geometry instead would delete real occluders and make
edge-of-city sites look better than they are.
Overpass rations requests, not area — and what 429 and 504 mean
Overpass is a shared free service and it rations REQUESTS, not area.
The AOI is fetched in ≤ 2 km tiles, one per second, with backoff — measured,
a 2 km box takes 1.7 s and a single 6 km query is refused outright. A
429 means this machine is rate limited: wait a minute, and note a
smaller AOI will NOT help. A 504 means the server timed out: a
smaller AOI will. Rebuilding repeatedly after a failure is the one thing
that makes it worse — a burst can get an IP dropped for minutes.
trees are walls here, at a guessed canopy height
Trees are walls here. OSM natural=wood and
landuse=forest are burned in at a NOMINAL canopy height,
because none of those polygons carries a height tag and no free DSM is
readable from a browser. At screening speed an opaque canopy is the
point, not an error — but it is a guess, and it never reaches the engine.
untagged: two thirds of central Vilnius carries no height
untagged is what a building with no height gets. Over central
Vilnius 66.7% of OSM buildings carry neither height
nor building:levels, and the generator is a tallest-first
walk — so in a poorly tagged AOI the ranking is partly a property of who
edited the map. The build reports the share it actually found.
sites
min roofm · apartm
what apart is for, and where its default comes from
apart is the least distance between two candidate SITES. It exists
only because generation is blind to coverage — it stops the tallest-first
walk clustering on one roof. Derived from physics when you leave it alone:
free-field reach at your threshold ÷ 3, so — here.
Smaller means MORE candidates, not a coarser map. Larger than the coverage
radius and the selection becomes a plain sort, because sites that far apart
cannot overlap.
at
right-size, losing at most% of covered people
what Evaluate sirens chooses, and what "optimal siren" means here
The catalogue is every distinct device in the Vilnius network (model,
rated power, declared level at 30 m), from the open-data layer via
tools/siting/siren_catalogue.py; add types to
siren_catalogue.json by hand. Every spectrum in it is a
declared placeholder — one level split flat across the bands,
omnidirectional — until a datasheet replaces it.
Placement is the same greedy as Evaluate, run with the loudest
ticked type, because a quieter siren never reaches a cell a louder one
does not. Then each kept site is right-sized: from the least
important site up, it is given the smallest ticked type that loses
no covered person given its neighbours. Without prices that is
the only defensible meaning of "optimal siren" — the same coverage
for the least rated power — and the saving is reported in watts. A
cost per type turns this into a cost objective the day one exists.
Right-sizing is re-done for the set that is ON: Keep best, a How-many
row, a site switched off or moved all re-size the rest. How many?
still counts sirens of the loudest type. The page's Lw
box is Evaluate's; this button uses the catalogue's levels, and at the
page's 40 dB threshold a 121 dB siren reaches tens of
kilometres in free field — the reach shown beside each type is at the
current threshold, so set the threshold you mean before pressing.
thresholddB · LwdB
maximise
sites at leastm apart (0 = no limit)
why the chosen sites cluster, and what sites apart costs
The greedy maximises what maximise says, and on covered
people that means it goes where the people are and keeps going. It is
not trying to spread. Two sirens 400 m apart in a dense district can
genuinely both earn their place, because at street level most of what one
covers is shadowed and the second one lights different streets.
Spreading is a planning decision, and it costs coverage. Measured
on a synthetic city with a dense core, 225 candidates, top 15,
Lw 113 dB at a 40 dB threshold:
0 m — 57.3% of people, nearest neighbours 379 / 485 m 600 m — 55.9%, 649 / 730 m 800 m — 53.4%, 812 / 900 m 1000 m — 44.5%, 1006 / 1095 m 1400 m — 29.7%, 1445 / 1490 m
So 600–800 m roughly doubles the spacing for one to four points
of coverage, and past 1000 m it falls off a cliff. The reason is
the source, not the objective: one siren at Lw
113 dB reached 1.29 km at the furthest and lit 0.51 km²
— a tenth of the open disc that radius would give, the rest being
shadow. A separation larger than a siren's own reach leaves holes by
construction. Raise Lw before raising this.
If what you want is territory rather than residents, that is the
covered area objective, not this control: the same 15 sites chosen
on area sat 886 / 1425 m apart and reached 28.3% of people against
57.3%.
what maximise weighs — and what the census may not be used for
maximise chooses what a covered cell is worth. Covered people
is now the 2021 census on a 100 m grid — real population, not a
stand-in — and it is the default wherever the census covers the AOI.
The census is used at its own 100 m resolution and is never
resampled. A census cell counts as covered when its centre is covered,
and it then contributes all of its residents. Nothing finer than
100 m is produced, drawn or stored — 100 m gridding is the
disclosure control on the underlying microdata, and a finer picture would
imply access nobody has.
Built density stays selectable as the thing it replaced, and
the two choices this page already made on AREA are due to be
re-measured against population: the ranking surface and the objective
itself. Both are recorded in docs/siting_workbench_state.md
as open. The numbers below are the built-density measurements and have not
yet been redone.
On area alone the
greedy reaches only 24.3% of the coverable densely built cells at
k=15, because a dense cell is expensive — mostly roof, and the streets
between are shadowed — so cheap open ground wins and the old town stays
dark. Built density raises that to 40.0% for 18% of the raw km²
(k=30: 46.0% → 63.8% for 13%). It is a crude stand-in for where people are,
not population; a population raster replaces this array and nothing
else.
what at changes, and why 80 m ranks like 20 m
at is the receiver PITCH — how finely the coverage grid is sampled.
Nothing to do with the spacing above. A coarse pitch is OPTIMISTIC about
people: measured on Alytus at 30 m against coarser pitches with the
same 102 sites (W128), the top 15 read +6.5 % / +14 % /
+17 % people covered at 60 / 120 / 240 m, and the greedy's
top 15 shared 8 / 10 / 5 of its sites with the 30 m ranking. The
reachable ceiling itself holds within 0.1 % at every pitch. Use a
coarse pitch to explore, the 30 m surface pitch before you commit to
a number — and read a coverage figure at 120 m as an upper bound.
(The earlier claim that 80 m ranks like 20 m was measured on AREA,
top five; on people it does not hold to that degree.)
buildings
buildings changes the picture and not one number
buildings changes the PICTURE and nothing else — km², the greedy and
every number below are identical in all three. A built cell holds no
receiver and never will: a level at 1.5 m inside a building is exactly
the trap the engine removed from its own output, and the city's published
map still has it. But a reader who does not know that sees lit streets
between dark blocks and concludes the buildings are not covered,
which is a different claim and a wrong one.
covered if their facade is gives each footprint one value — the
loudest point on its own perimeter, which is the quantity END facade
points report — and draws it at a lower opacity, so derived never looks
like evaluated. drawn, never coloured invents nothing and only stops
the blocks reading as holes.
Analytic. No GPU, no simulation.
for rung 2
what How many? answers, and what it cannot
It reads the greedy's own curve and says how many sites it took to reach
each share of the population, then a ceiling: what EVERY candidate
switched on at once reaches. The ceiling is the honest end of the
question. People outside it are not a selection problem — no ranking of
these candidates reaches them, and the answer is a louder
Lw, a lower threshold, or candidate sites where there are
none.
What it is not is a proof of the minimum. Choosing the best k of n
sites is maximum coverage, which is NP-hard, and the usual greedy
guarantee of 1 − 1/e does not even apply here: that needs
a submodular objective, and this one is not. Sound adds, so a site can
raise another site's marginal value by carrying cells closer to the
threshold. So these counts are what the greedy needed — an upper
bound on the true minimum, not the minimum.
The same non-submodularity is why the ceiling can sit above where the
greedy stopped: it halts when no SINGLE remaining site adds anything,
while two of them together still can. When that gap is non-zero it is
reported, because it is the measured size of what a greedy leaves on the
table.
A candidate is the highest surface in a 20 m cell, not a building.
A cell can straddle two abutting buildings, and can sit on an antenna or a
chimney rather than a mountable roof — cand_00 is the TV Tower. Nothing
here knows about ownership, access or structural capacity, which is what this
review is for.
reading and editing this list
Click a name to drop or restore it. Drag a marker onto another
roof — the roof height and source z follow the surface underneath.
On the map a solid marker is kept and a hollow red one is
dropped; kept sites always draw on top, and ranked ones above those.
dim
OpenStreetMap raster.
what this surface decides
This drives the RANKING as well as the colour. Elevation is what the
source's horizon depends on; above ground ranks the building and
cannot see a hill, which is why high ground gave few candidates. Measured,
30 sites: 28.40 / 27.10 / 27.03 km² for elevation / prominence / above
ground. But area is not people — elevation wins partly by covering
empty high ground while the dense centre loses sirens. The population
raster is now in (2021 census, 100 m) and this comparison has not been
re-run against it; expect it to move.
0 m——
0—
showing every roof
what decides whether a census cell is covered
Coverage is never tested over the whole 100 m census square. Each
census cell is decided by one receiver cell of the evaluation grid
— the one nearest its centre that can hold a receiver (street level,
inside the boundary, not a roof) — and it contributes all of its
residents when that cell is above the threshold. This overlay draws that
deciding cell for every census cell: green covered by the sirens
that are on, red not, grey no receiver cell within reach. A
black tick joins a census centre to its cell when the centre fell on a
roof and the count was moved to the nearest street cell.
Diagnostics
Ctrl+Alt+D opens this. It reads the page's own state — no
network, nothing recomputed — so it is safe to open while something is stuck.