flowchart TB N[/"S1 streets<br/>walkable, inside the area"/]:::data --> P["POINTS<br/>a viewpoint every 10 m"]:::step B[/"OpenStreetMap<br/>building outlines"/]:::data --> R["RAYS<br/>360 sight lines,<br/>stopped at the first outline<br/>or at 300 m"]:::step P --> R R --> M["MEASURES<br/>area, perimeter, longest<br/>and mean line, compactness"]:::step M --> S["SEGMENTS<br/>the mean of their viewpoints,<br/>and the middle view kept"]:::step S --> K["CHECK<br/>viewpoints inside an outline,<br/>views leaving the map"]:::step K --> OUT[/"points, segments,<br/>views, checkpoints"/]:::out OUT --> TE["TESTS"]:::test classDef data fill:none,stroke:#8a8a8a,color:#e6e6e6 classDef rule fill:none,stroke:#8a8a8a,stroke-dasharray:4 3,color:#a6a6a6 classDef step fill:none,stroke:#e6e6e6,color:#e6e6e6 classDef out fill:none,stroke:#e6e6e6,stroke-width:2px,color:#ffffff classDef test fill:none,stroke:#fe83cc,color:#fe83cc
How S8 is built
Blueprint
The sources
| Source | What S8 takes from it |
|---|---|
| S1 Streets | the walkable segments inside the area, and their lines |
| OpenStreetMap buildings, through the Overpass API, fetched 2026-10-14, ODbL | 1,682 building outlines over the area and 150 m around it; 14 buildings recorded as relations have no outline in the file and stop nothing |
Viewpoints
Each walkable segment inside the area is cut into steps of about 10 m, and a viewpoint stands at the middle of each step. A segment shorter than 10 m gets one viewpoint. The viewpoint stands on the street’s centreline, where the S1 line runs.
Sight lines
From each viewpoint, 360 sight lines leave at every degree. Each one stops at the first building edge it crosses, or at 300 m. A line that passes exactly through a building’s corner counts as stopped there, so it cannot slip between two edges.
Measures
| Measure | What it says |
|---|---|
| area | the surface enclosed by the ends of the 360 lines, in m² |
| perimeter | the length of that outline |
| longest and mean sight line | how far one can see at most, and on average |
| compactness | 4π × area / perimeter², 1 for a circle, small for a long thin corridor |
| open share | the share of lines that reach 300 m |
| beyond share | the share of lines that end outside the box of buildings S8 read, where the view is unknown |
Benedikt (1979) defined the isovist and several of these measures; Batty (2001) uses compactness to compare the shapes of isovists across a plan. Turner and others (2001) carry isovists into visibility graphs, which S8 does not build.
Assumptions
| Assumption | Why I accept it for now | What would replace it |
|---|---|---|
| only building outlines block a view | they are the only obstacles mapped openly for the whole area | the city’s 3D buildings, trees with their crowns, the rail and road structures |
| the view is flat, at eye level | the outlines carry no reliable height for walls and podiums | a 3D model of the street |
| a viewpoint stands on the centreline | S1 gives the street as one line | the sidewalks of S6, when S9 needs sides |
| 300 m reach | far enough for the length of a block in the old grid and the width of the canal | a stress test shows what changes |
Tests
Seven checks
Each check asks one plain question of what S8 wrote. Six must pass, and all six do; the seventh only reports.
| Question | Answer | |
|---|---|---|
| T1 | Does every walkable segment inside the area have a viewpoint at least every 10 m or so? | yes, 1,798 viewpoints on 231 segments |
| T2 | Does every sight line stop at the first building edge or at the radius, and does the area follow? | yes, every 25th viewpoint worked out again in plain Python, one line at a time |
| T3 | Do the measures of every viewpoint agree with each other? | yes |
| T4 | Is every segment the mean of its viewpoints, with its middle view kept for the Lab? | yes |
| T5 | Is every viewpoint inside a building, and every view beyond the mapped buildings, a checkpoint, and nothing else? | yes, 1 checkpoint |
| T6 | Does S8 measure from the map alone, leaving out the counts, space syntax and the trees? | yes |
| T7 | What does S8 give? | report |
T2 first failed on 16 viewpoints, by up to 9 m². The check started from the positions written in the file, rounded to the centimetre, and a centimetre was enough to let a line graze past a corner it had hit before. T2 now places the viewpoints again from S1. A smaller gap of 0.1 m² remained: the area was summed in coordinates of about five million metres, which loses decimals. S8 now sums it from the viewpoint outwards, and the two agree.
Stress tests
| Change | What moves | |
|---|---|---|
| X1 | the same input twice | nothing: identical |
| X2 | reach of 100, 200, 300 and 500 m | median area 11,800 to 44,100 m²; the order of the streets against 300 m holds at 0.95 to 0.99 |
| X3 | 90, 180, 360 and 720 sight lines | at 720 the streets move by 0.9 % (median), 4 % at most; at 90, 7 % and 30 % |
| X4 | a viewpoint every 5, 10 and 20 m | the streets move by under 1 % (median); a few short ones by 14 to 45 % |
| X5 | one OpenStreetMap outline in ten left out, three draws | median area up by 13 to 78 %; the streets move by 4 to 21 % (median); order 0.90 to 0.99 |
X5 is the one that matters: S8 depends on how complete OpenStreetMap is, and a missing building widens a view more than any setting of S8 does. I read the order of the streets, and treat single areas as approximate.