Data sources and limits¶
Sources¶
| Data | Source | Cache |
|---|---|---|
| Elevation | AWS Terrain Tiles | ~/.cache/satprint/tiles |
| Imagery (GLB texture) | Esri World Imagery | ~/.cache/satprint/imagery |
| Buildings, bridges, roads and water | OpenFreeMap vector tiles, zoom 14, rebuilt from OSM about weekly | ~/.cache/satprint/vtiles |
| Buildings, fallback; roof shapes | Overpass API, 0.01° tiles | ~/.cache/satprint/osm |
| Buildings, optional | Overture Maps GeoParquet on S3, per release | ~/.cache/satprint/overture |
| Place search | Nominatim, one request per second | in memory |
None of them needs an API key. Every tile is cached on disk, so a second build of the same area downloads nothing.
Buildings¶
- A building with no
heightorbuilding:levelstag gets 8 m. - Where OSM maps a building as
building:partshapes, the parts replace its outline, so towers keep their setbacks. - Parts are extruded from the ground, ignoring
min_height, so nothing floats. - Roofs tagged
roof:shapedome, onion, cone or pyramidal get that shape. The roof height comes fromroof:height, thenroof:levelsat 3 m each, then the radius of the footprint, which makes a dome a hemisphere. Other shapes, such as gabled and hipped, are flat; at print scale a house roof is a fraction of a millimeter. - A shaped roof needs a footprint without holes that can see all its corners from its center, and must stand at least 0.3 mm tall in the model. Otherwise the building is flat at its full height.
- A shaped roof starts no lower than the flat roofs at least half its size that it overlaps, so a dome set into a taller wing does not sit in a pit.
- Smaller parts standing on a shaped roof, such as a lantern, cupola or statue on a dome, keep their place: the roof stops at the highest ring that still encloses them, and they stand in the hole that leaves. A part that would not reach that ring ends up inside the roof.
- Of two overlapping shaped roofs that are not standing on each other, the taller keeps its shape and the other is flat.
- The OpenFreeMap tiles carry no roof tags, so a small Overpass query fetches
the shaped buildings in the area and they replace their copies from the
tiles. If that query fails, the roofs are flat and the build reports
building_warning. - A few landmarks that roof tags cannot describe get exact shapes from
published dimensions, matched by their Wikidata ID or OSM ID
(
satprint/landmarks.py). So far: the Sphere in Las Vegas, a 157 m sphere cut by the ground at 112 m. - Landmarks that a prism cannot express supply a closed triangle mesh and are placed by a fixed position instead: the Gateway Arch in St. Louis, the Eiffel Tower in Paris (four legs, open between them, up to the second platform) and the Space Needle in Seattle and Christ the Redeemer in Rio de Janeiro (OSM maps the statue as a single point, so it is placed by that point). They replace the buildings OSM maps under them, and only when the whole landmark lies inside the area; a landmark cut by the edge keeps the OSM buildings. The Arch and the Needle honor the minimum feature size, so thin parts are thickened on small prints; the Eiffel Tower keeps its true proportions. Christ the Redeemer is enlarged in proportion on city-sized prints, until its arms reach the minimum, so it stands taller than life, as a symbol on a map does. The Arch, the Needle's saucer and the Eiffel Tower's archways are overhangs that may want slicer supports.
- Overlapping footprints are merged first: each overlap takes the tallest height covering it, so the solids touch but never pass through each other.
- Buildings sink 0.3 mm into the terrain so they fuse with it when sliced.
- A building that crosses a vector-tile edge arrives as two solids that meet at the edge.
Bridges¶
Bridges come from the same OpenFreeMap tiles as buildings: man_made=bridge
outlines, and road, rail and path lines tagged as bridges, which are drawn as
strips of a width per class (a motorway 12 m, a path 3 m, never narrower than
0.8 mm in the model). Only bridges over water from the tiles' water layer are
built.
- Each bridge is cut to the water plus a landing of about 30 m, at least 1 mm, on each bank, so long approaches and interchanges are left out.
- OSM has no deck heights. A landing is flat at the highest ground under it plus 0.2 mm. Over the water the deck height blends the landings' heights by distance, and rises to at least 1 mm above the water, easing in over 3 mm from the banks, so a low bridge arches.
- The span is a thin deck slab 0.6 mm thick, open underneath, held up by piers
1 mm thick at even spacing, no farther apart than
--bridge-piers(20 mm by default). They are not the real piers. There are no towers or cables. - Every part is a closed solid that touches the others only along shared vertical faces. Landings and piers sink 0.3 mm into the terrain. Bridges join the buildings solids, in the STL, the GLB and the 3MF.
- A deck between its piers is an overhang that may want slicer supports.
Roads¶
Roads come from the same OpenFreeMap tiles, the transportation layer's road
and path lines. Tunnels are left out, and so are rail, ferries and roads under
construction.
- Each line is a strip of its class width, the same widths as bridge decks, never narrower than 0.8 mm in the model. At print scale a 7 m street is a fraction of a nozzle wide, so most roads are drawn wider than they are.
- With
autodetail, a class is drawn once the model scale makes its streets print a few strip widths apart: motorways, trunk and primary roads always, secondary from about 0.003 mm per meter, tertiary from 0.008, minor streets from 0.03 (a city a few kilometers across at 100 mm), and service roads, tracks and paths from 0.1.majordraws motorway to secondary, andalldraws every class. - The strips are joined, water, building footprints and bridges are cut out, and the result is cut along the terrain mesh's triangles, or, on a fine grid, along a lattice of every few grid nodes about 0.6 mm apart, so roads do not add as many triangles as the terrain. Between lattice nodes the terrain strays from the lattice; the lattice is made finer until it strays no more than 0.3 mm under the roads, and the roads are raised and sunk by that much. The top is at least 0.4 mm above the terrain and the floor at least 0.3 mm below it everywhere. Each connected road network is one closed solid.
- A road over water is cut at the water; turn on bridges to span it. With bridges on, a road stops where it meets a bridge's landing.
Overpass¶
Choose Overpass with "Building data" in the web app or
--building-source overpass on the CLI, for the latest OSM edits. The default
"auto" uses it only if OpenFreeMap fails. Its tiles download two at a time,
busy answers are retried with backoff, and a server that times out is skipped
for 10 minutes. When some tiles fail, the rest stay cached, so generating again
fetches only the missing ones.
Overture Maps¶
Choose Overture with "Building data" in the web app or
--building-source overture on the CLI. Overture
Maps merges OSM with Microsoft and Google building
footprints, so it finds buildings OSM lacks, and it keeps the OSM height and
roof tags. It needs the overture extra:
pip install "satprint[overture]" # or: poetry install --extras overture
The extra brings pyarrow, about 190 MB; the Docker image includes it. Overture's STAC index picks the GeoParquet files on S3 that cover the area, so a query takes a few seconds. Results are cached per Overture release. "auto" never picks Overture.
Imagery¶
The texture is at most 2048 px on its longer side. Esri's terms of use govern
the imagery. Set "texture": false to skip it.
Limits¶
- Source resolution is about 30 m (SRTM) over most land and about 10 m at zoom 14 where available, so areas smaller than about 2 km look blocky. Smoothing helps.
- Elevation and imagery downloads are capped at 64 tiles per request. Shrink the area or lower the resolution if you hit the cap.
- Buildings, bridges and roads are limited to areas up to 40 km², and very small footprints are dropped.
- Bridges over water only. A bridge over a road, a railway or a valley is missing, and so is one whose water is not in the tiles' water layer.
- The multi-color split works one grid cell at a time, so a river narrower than a cell does not show.
- The GLB is for viewing. FDM slicers ignore textures, so print the STL or the 3MF.
- Built models live in memory, the last 32. A download link is valid until the server restarts.
Attribution¶
Terrain Tiles © Mapzen and AWS Open Data (SRTM, ASTER GDEM, GMTED2010, ETOPO1, NED, EU-DEM and others). Imagery © Esri, Maxar, Earthstar Geographics. Street map, buildings, bridges, roads, water and search © OpenStreetMap contributors, under the ODbL. Overture buildings © Overture Maps Foundation and OpenStreetMap contributors, under the ODbL.