feat(geo): adopt Mapbox building calibration (3.1 m per level) #26
+8
-33
@@ -80,10 +80,7 @@ LD_LIBRARY_PATH="$B/blender/lib" "$B/blender/blender" -b --factory-startup \
|
|||||||
```
|
```
|
||||||
|
|
||||||
- `Road_Hollywood`: 8 120 verts, 7 812 faces, carriageway −10.5…+10.5 m, DEM elevations plus a 2 cm lift so it does not z-fight the terrain.
|
- `Road_Hollywood`: 8 120 verts, 7 812 faces, carriageway −10.5…+10.5 m, DEM elevations plus a 2 cm lift so it does not z-fight the terrain.
|
||||||
- `Sidewalk_South` 4.0 m wide, `Sidewalk_North` 5.3 m wide. The kerb upstand is
|
- `Sidewalk_South` 4.0 m wide, `Sidewalk_North` 5.3 m wide. The kerb upstand is **full at the road-side edge and tapers to zero at the building-side edge**, so the walk surface meets the terrain flush (before `0.1.1` the outer lip stood the full kerb height above the DEM — a 15.8 cm ledge).
|
||||||
**full at the road-side edge and tapers to zero at the building-side edge**, so
|
|
||||||
the walk surface meets the terrain flush (before `0.1.1` the outer lip stood the
|
|
||||||
full kerb height above the DEM — a 15.8 cm ledge).
|
|
||||||
- `Kerb_South`, `Kerb_North`: vertical faces, mostly **0.13 m** — the 0.15 m assumption minus nothing on the road side — and flushed to 0 within ±2.5 m of each signalised crossing with a 1.5 m blend. Measured from the built mesh: 256 steps at 0.13 m, 15 flush, a few in transition.
|
- `Kerb_South`, `Kerb_North`: vertical faces, mostly **0.13 m** — the 0.15 m assumption minus nothing on the road side — and flushed to 0 within ±2.5 m of each signalised crossing with a 1.5 m blend. Measured from the built mesh: 256 steps at 0.13 m, 15 flush, a few in transition.
|
||||||
|
|
||||||
Crown check on the built mesh at mid-block: gutter −10.5 m → +0.99, −5 m → +1.38, centre → +1.52, +5 m → +1.58, +10.5 m → +1.52. The crown sits just north of the centreline, as the cross-sections said.
|
Crown check on the built mesh at mid-block: gutter −10.5 m → +0.99, −5 m → +1.38, centre → +1.52, +5 m → +1.58, +10.5 m → +1.52. The crown sits just north of the centreline, as the cross-sections said.
|
||||||
@@ -107,31 +104,19 @@ Objects are appended from the source files, not regenerated, and grouped into `S
|
|||||||
A downward raycast on a 1 m grid along both sidewalks and the designated crossing, ignoring blockout meshes so marquees and canopies overhead do not count as ground:
|
A downward raycast on a 1 m grid along both sidewalks and the designated crossing, ignoring blockout meshes so marquees and canopies overhead do not count as ground:
|
||||||
|
|
||||||
| Route | Samples | Holes | Z range | Worst step |
|
| Route | Samples | Holes | Z range | Worst step |
|
||||||
| ----------------- | ------: | ----: | ------------- | ---------: |
|
| ----------------- | ------: | ----: | ------------- | ----------------: |
|
||||||
| South sidewalk | 279 | 0 | −0.48 … +3.06 | 13.4 cm (s=198) |
|
| South sidewalk | 279 | 0 | −0.48 … +3.06 | 13.4 cm (s=198) |
|
||||||
| North sidewalk | 279 | 0 | +0.06 … +3.76 | 6.9 cm (s=33) |
|
| North sidewalk | 279 | 0 | +0.06 … +3.76 | 6.9 cm (s=33) |
|
||||||
| Crossing at 130 m | 26 | 0 | +1.14 … +1.80 | 9.0 cm (off −8.5) |
|
| Crossing at 130 m | 26 | 0 | +1.14 … +1.80 | 9.0 cm (off −8.5) |
|
||||||
|
|
||||||
At `--sample 0.25` the same routes measure 11.6 cm / 8.0 cm / 3.4 cm. The
|
At `--sample 0.25` the same routes measure 11.6 cm / 8.0 cm / 3.4 cm. The pre-check now prints the grade and the **location** of the worst step, and its coverage no longer shrinks with `--sample`.
|
||||||
pre-check now prints the grade and the **location** of the worst step, and its
|
|
||||||
coverage no longer shrinks with `--sample`.
|
|
||||||
|
|
||||||
No holes anywhere, so nothing drops the player on either side. The two flagged steps:
|
No holes anywhere, so nothing drops the player on either side. The two flagged steps:
|
||||||
|
|
||||||
- ~~15.8 cm at s≈207, the sidewalk's outer edge~~ — **fixed in `0.1.1`**: the
|
- ~~15.8 cm at s≈207, the sidewalk's outer edge~~ — **fixed in `0.1.1`**: the sidewalk upstand now tapers to zero at the building side, so the outer edge is flush with the terrain (north route 15.1 → 6.9 cm).
|
||||||
sidewalk upstand now tapers to zero at the building side, so the outer edge is
|
- ~~10–13 cm steps at the crossings, ~10 % ramp over 1.5 m~~ — **fixed in `0.1.1`**: the ramp run is now derived from a target grade (`--max-ramp-grade`, default 8 %), giving 1.63 m instead of the fixed 1.5 m (8.7 %). Measured at 0.25 m sampling the crossing now steps 3.4 cm (~1.4 % of the route) at the kerb line.
|
||||||
flush with the terrain (north route 15.1 → 6.9 cm).
|
|
||||||
- ~~10–13 cm steps at the crossings, ~10 % ramp over 1.5 m~~ — **fixed in `0.1.1`**:
|
|
||||||
the ramp run is now derived from a target grade (`--max-ramp-grade`, default 8 %),
|
|
||||||
giving 1.63 m instead of the fixed 1.5 m (8.7 %). Measured at 0.25 m sampling the
|
|
||||||
crossing now steps 3.4 cm (~1.4 % of the route) at the kerb line.
|
|
||||||
|
|
||||||
**Remaining finding (not a crossing, not the outer edge):** the south route still
|
**Remaining finding (not a crossing, not the outer edge):** the south route still measures a **13.4 cm step at s≈198 m** (11.6 cm at 0.25 m sampling) and the north route 8.0 cm at s≈251 m. Neither is at a crossing and neither is the outer lip, so this is a local discontinuity in the sidewalk strip — most likely the DEM sampling or a centreline vertex near the block ends. Tracked under the `0.1.1` "audit any collision gaps" item rather than left undocumented.
|
||||||
measures a **13.4 cm step at s≈198 m** (11.6 cm at 0.25 m sampling) and the north
|
|
||||||
route 8.0 cm at s≈251 m. Neither is at a crossing and neither is the outer lip, so
|
|
||||||
this is a local discontinuity in the sidewalk strip — most likely the DEM sampling
|
|
||||||
or a centreline vertex near the block ends. Tracked under the `0.1.1` "audit any
|
|
||||||
collision gaps" item rather than left undocumented.
|
|
||||||
|
|
||||||
This is a pre-check, not the `0.1.0` release check: the release check is traversal in the engine.
|
This is a pre-check, not the `0.1.0` release check: the release check is traversal in the engine.
|
||||||
|
|
||||||
@@ -152,19 +137,9 @@ Blender works in metres, and the imported meshes match the OSM geometry, so the
|
|||||||
|
|
||||||
Widths agree to a few centimetres; depths differ by up to 0.4 m because Blosm assembles **multipolygon relations**, not the raw way I measured. Placement after the frame correction agrees with the UTM control points to 0.1–0.5 m per building — the residual is relation assembly and Blosm's edge straightening, not projection.
|
Widths agree to a few centimetres; depths differ by up to 0.4 m because Blosm assembles **multipolygon relations**, not the raw way I measured. Placement after the frame correction agrees with the UTM control points to 0.1–0.5 m per building — the residual is relation assembly and Blosm's edge straightening, not projection.
|
||||||
|
|
||||||
Buildings **without** a `height` tag get levels × **3.1 m**. The storey height was
|
Buildings **without** a `height` tag get levels × **3.1 m**. The storey height was 3.2 m until 2026-11-09, when a cross-check of every block building against Mapbox's building data (`Geo/tools/mapbox_buildings.py`) showed our figure running 0.6 m high per six levels — i.e. 3.1 m per level — and that calibration was adopted. The few buildings where Mapbox disagreed with a pure `levels × 3.1 m` fallback carry an explicit override in `Geo/tools/block_height_report.py::HEIGHT_OVERRIDES`.
|
||||||
3.2 m until 2026-11-09, when a cross-check of every block building against
|
|
||||||
Mapbox's building data (`Geo/tools/mapbox_buildings.py`) showed our figure
|
|
||||||
running 0.6 m high per six levels — i.e. 3.1 m per level — and that calibration
|
|
||||||
was adopted. The few buildings where Mapbox disagreed with a pure
|
|
||||||
`levels × 3.1 m` fallback carry an explicit override in
|
|
||||||
`Geo/tools/block_height_report.py::HEIGHT_OVERRIDES`.
|
|
||||||
|
|
||||||
Blosm adds roof mass on top of `levels × levelHeight`: the two `levels`-derived
|
Blosm adds roof mass on top of `levels × levelHeight`: the two `levels`-derived frontage buildings both land ~1.9 m above their table height (6922 39.1 m against 37.2 m, El Capitan Theatre 20.5 m against 18.6 m). That offset is the roof, not a height error — the table records the tagged height, the mesh records the storey plus its roof.
|
||||||
frontage buildings both land ~1.9 m above their table height (6922 39.1 m against
|
|
||||||
37.2 m, El Capitan Theatre 20.5 m against 18.6 m). That offset is the roof, not a
|
|
||||||
height error — the table records the tagged height, the mesh records the storey
|
|
||||||
plus its roof.
|
|
||||||
|
|
||||||
## Relation completeness
|
## Relation completeness
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user