Skip to content

Commit a7bb5ae

Browse files
authored
docs: slim the README and move reference sections into the docs site (#1451)
* docs: slim the README and move reference sections into the docs site The README had grown to ~700 lines and buried the project behind setup, Docker, tooling, and a 67-item feature list. It now keeps only the intro, demos, documentation links, acknowledgements, citation, and license, and everything else lives on geolibre.app where it is navigable and searchable. * Address CodeRabbit review feedback - Correct the Docker sidecar section: every conversion kind is in WEB_RUNTIME_KINDS or WASM_ONLY_KINDS, so the browser build runs them all client-side. The old text claiming FlatGeobuf/PMTiles/COG need the sidecar was stale. State what the bundled sidecar actually backs (Raster tools, the optional GeoPandas engine). - Fix architecture.md, which claimed the container does not run the Python sidecar. The Dockerfile installs it and nginx reverse-proxies it at /sidecar. - Sharpen the features.md conversion bullet to distinguish the browser build from the desktop app rather than implying one engine everywhere. - Make the sidecar extras commands work from backend/geolibre_server, the directory the preceding snippet changes into. - Explain why the basemap example's deactivate() is a no-op, matching the shipped osm-basemap and carto-light plugins, and note that controls, listeners, and layers must be undone. - Separate importing a dependency's own stylesheet in main.tsx from adding app-specific overrides in index.css. - Point contributors at the strict docs build when they touch docs/.
1 parent f3b4ceb commit a7bb5ae

7 files changed

Lines changed: 510 additions & 624 deletions

File tree

README.md

Lines changed: 57 additions & 621 deletions
Large diffs are not rendered by default.

docs/architecture.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ flowchart LR
4242

4343
The 2D MapLibre map can be joined by a 3D globe rendered with [CesiumJS](https://cesium.com/platform/cesiumjs/), offered as a **split pane** rather than a whole-app engine swap. Because the store (`@geolibre/core`) is engine-agnostic — it holds plain `GeoLibreLayer` records and a `MapViewState`, not MapLibre objects — a second renderer plugs in by subscribing to the same store, exactly as the 2D `SecondaryMapCanvas` panes do. There is no engine abstraction layer: MapLibre stays the default and the primary map, and Cesium is a first-party view mode (not a plugin — the plugin API is MapLibre-typed).
4444

45-
- **Enabling it.** Each secondary pane in the map grid carries a 2D/3D toggle. The globe is only offered when a Cesium Ion token is configured — Cesium World Imagery and Terrain require one — so without a token the toggle is hidden and a project saved with a globe pane opens as the 2D map. The token is resolved through `getCesiumIonToken()` (`@geolibre/core`), which reads `VITE_CESIUM_TOKEN`/`CESIUM_TOKEN` from the build **or** from a runtime override, so it can be set at build time (`CESIUM_TOKEN`; see the [Environment variables](https://github.com/opengeos/GeoLibre/blob/main/README.md#environment-variables) section) or at runtime with no rebuild. Settings → Environment Variables has a dedicated masked **Cesium Ion token** field backed by device-local `DesktopSettings` (localStorage, never the shared project file); `useRuntimeEnvironmentVariables` projects it into `VITE_CESIUM_TOKEN` on the `window.__GEOLIBRE_RUNTIME_ENV__` global (empty values are not projected, so they cannot blank a build-time token). `MapGrid` re-resolves the token on the `geolibre:runtime-env-change` event, so the toggle appears as soon as one is entered.
45+
- **Enabling it.** Each secondary pane in the map grid carries a 2D/3D toggle. The globe is only offered when a Cesium Ion token is configured — Cesium World Imagery and Terrain require one — so without a token the toggle is hidden and a project saved with a globe pane opens as the 2D map. The token is resolved through `getCesiumIonToken()` (`@geolibre/core`), which reads `VITE_CESIUM_TOKEN`/`CESIUM_TOKEN` from the build **or** from a runtime override, so it can be set at build time (`CESIUM_TOKEN`; see [Optional 3D globe credentials](getting-started.md#optional-3d-globe-credentials-cesium-ion)) or at runtime with no rebuild. Settings → Environment Variables has a dedicated masked **Cesium Ion token** field backed by device-local `DesktopSettings` (localStorage, never the shared project file); `useRuntimeEnvironmentVariables` projects it into `VITE_CESIUM_TOKEN` on the `window.__GEOLIBRE_RUNTIME_ENV__` global (empty values are not projected, so they cannot blank a build-time token). `MapGrid` re-resolves the token on the `geolibre:runtime-env-change` event, so the toggle appears as soon as one is entered.
4646
- **Lazy loading.** The whole Cesium engine (~4.8 MB) is `import()`-ed only when a pane switches to the globe, kept in its own build chunk (`manualChunks`) and off the 2D boot path. A Vite plugin (`vite-plugins/copy-cesium-assets.ts`) stages Cesium's runtime Workers/Assets/Widgets into `public/cesium/` and the canvas sets `window.CESIUM_BASE_URL` so the engine finds them.
4747
- **Camera sync.** `packages/map/src/cesium-camera.ts` converts between MapLibre's Web-Mercator `MapViewState` (zoom, nadir-referenced pitch, bearing) and Cesium's camera (metric range, horizon-referenced pitch, heading), matched by **ground resolution** (metres per pixel) so the on-screen scale stays in step even when the panes differ in height. `CesiumCanvas` seeds its camera from the shared `mapView`, applies store changes to the globe, and writes the globe's own moves back — bidirectional, like the 2D panes — with a tolerance check that suppresses the apply→`moveEnd` echo so there is no jitter loop.
4848
- **Layer sync.** `CesiumLayerSync` (`packages/map/src/cesium-layer-sync.ts`) reconciles the store's `GeoLibreLayer[]` onto the globe the way `MapController.syncLayers` does for MapLibre, reusing the same per-pane visibility overrides and group effects as `SecondaryMapCanvas`. It renders the kinds where Cesium is the natural fit — GeoJSON (a draped `GeoJsonDataSource` styled from the layer's fill/stroke/opacity), XYZ/raster/WMTS and WMS (as `ImageryLayer`s), and 3D Tiles (a `Cesium3DTileset` primitive that consumes the layer's tileset URL, request headers, and altitude offset directly) — with live visibility/opacity, rebuild-on-source-change, and removal. Other layer kinds (PMTiles, MBTiles, Zarr, LiDAR, splats, deck.gl viz, …) are skipped on the globe and still render in the 2D panes; the exported `isCesiumSupportedLayerType` predicate lets the pane's layer menu tag those "2D only". COG/imagery-from-raster is a candidate for a later pass.
@@ -97,7 +97,7 @@ The root Dockerfile packages the browser version of the app. It uses a Node buil
9797

9898
The `Publish Container Image` GitHub Actions workflow builds the image for pull requests and publishes it to GitHub Container Registry for pushes to `main`, version tags, and manual runs. The upstream image name is `ghcr.io/opengeos/geolibre`.
9999

100-
The container does not run the Tauri desktop shell or the optional Python sidecar. Workflows that depend on desktop filesystem access still require the installed desktop app.
100+
The image also bundles the optional Python sidecar (uvicorn) and reverse-proxies it at `/sidecar`, so the browser reaches it same-origin with no CORS; set `GEOLIBRE_DISABLE_SIDECAR=1` to run nginx alone. The container does not run the Tauri desktop shell, so workflows that depend on desktop filesystem access still require the installed desktop app. See [Run with Docker](getting-started.md#run-with-docker) for what the bundled sidecar does and does not back.
101101

102102
## Security
103103

docs/demos.md

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
# Demos
2+
3+
A visual tour of what GeoLibre looks like in use. **Click any screenshot to open
4+
it at full resolution, or any animation to play the full-quality video.** For the
5+
complete capability list, see [Features](features.md); for hands-on
6+
walkthroughs, see the [Tutorials](tutorials/index.md).
7+
8+
## 3D Tiles
9+
10+
Photogrammetry and mesh datasets stream in as [3D Tiles](user-guide/adding-data.md)
11+
and render on deck.gl over the MapLibre map, including authenticated tilesets via
12+
custom request headers.
13+
14+
[![GeoLibre showing 3D Tiles rendered on a MapLibre map](https://files.opengeos.org/GeoLibre-demo.webp)](https://files.opengeos.org/GeoLibre-demo.webp)
15+
16+
[Open the live project](https://share.geolibre.app/giswqs/3d-tiles){ .md-button .md-button--primary }
17+
18+
## NYC buildings and subways
19+
20+
Manhattan building footprints extruded in 3D and colored by construction era,
21+
with the MTA subway lines and stations on top. The legend is
22+
[generated automatically](user-guide/styling.md) from the layers' symbology.
23+
24+
[![Manhattan buildings extruded in 3D and colored by construction era, with MTA subway lines and stations and an auto-generated legend](https://files.opengeos.org/nyc-buildings.webp)](https://files.opengeos.org/nyc-buildings.webp)
25+
26+
The animation below runs the [Time Slider](features.md#plugins) along the
27+
buildings' construction year, from 1850 to 2025, so Manhattan fills in era by
28+
era — the camera stays put and the data moves. Click it to play the
29+
full-quality video.
30+
31+
[![Animation of Manhattan buildings appearing by construction year as the Time Slider advances from 1850 to 2025](https://files.opengeos.org/nyc-buildings.gif)](https://files.opengeos.org/nyc-buildings.webm)
32+
33+
[Open the live project](https://share.geolibre.app/giswqs/nyc-buildings-and-subways){ .md-button .md-button--primary }
34+
35+
## Planetary basemaps
36+
37+
GeoLibre is not limited to Earth. Planetary basemaps from
38+
[OpenPlanetaryMap](https://openplanetary.org/) and
39+
[USGS Astrogeology](https://astrogeology.usgs.gov/) cover the Moon, Mars,
40+
Mercury, Venus, the Galilean moons (Io, Europa, Ganymede, Callisto), Titan,
41+
Pluto, and Charon. The USGS bodies are reprojected to Web Mercator by the tiles
42+
Worker, and each project carries its own ellipsoid, so distance, area, and scale
43+
measurements match the body you are mapping. Switch bodies from the planet
44+
switcher in the Layers panel.
45+
46+
The deep-space starfield behind each globe comes from the
47+
[Atmosphere Effects plugin](features.md#plugins).
48+
49+
<table>
50+
<tr>
51+
<td width="33%"><a href="https://files.opengeos.org/earth.webp"><img src="https://files.opengeos.org/earth.webp" alt="GeoLibre globe view of Earth over a starfield backdrop"></a></td>
52+
<td width="33%"><a href="https://files.opengeos.org/moon.webp"><img src="https://files.opengeos.org/moon.webp" alt="GeoLibre globe view of the Moon over a starfield backdrop"></a></td>
53+
<td width="33%"><a href="https://files.opengeos.org/mars.webp"><img src="https://files.opengeos.org/mars.webp" alt="GeoLibre globe view of Mars over a starfield backdrop"></a></td>
54+
</tr>
55+
<tr>
56+
<td align="center"><b>Earth</b><br>Street, satellite, and cloudless imagery</td>
57+
<td align="center"><b>Moon</b><br>Hillshaded Albedo (NASA / LOLA / USGS)</td>
58+
<td align="center"><b>Mars</b><br>Colour MOLA Elevation (NASA / MOLA)</td>
59+
</tr>
60+
<tr>
61+
<td width="33%"><a href="https://files.opengeos.org/mercury.webp"><img src="https://files.opengeos.org/mercury.webp" alt="GeoLibre globe view of Mercury over a starfield backdrop"></a></td>
62+
<td width="33%"><a href="https://files.opengeos.org/pluto.webp"><img src="https://files.opengeos.org/pluto.webp" alt="GeoLibre globe view of Pluto over a starfield backdrop"></a></td>
63+
<td width="33%"><a href="https://files.opengeos.org/venus.webp"><img src="https://files.opengeos.org/venus.webp" alt="GeoLibre globe view of Venus over a starfield backdrop"></a></td>
64+
</tr>
65+
<tr>
66+
<td align="center"><b>Mercury</b><br>MESSENGER Colour Mosaic (NASA / JHU APL / CIW)</td>
67+
<td align="center"><b>Pluto</b><br>New Horizons Mosaic (NASA / JHU APL / SwRI)</td>
68+
<td align="center"><b>Venus</b><br>Magellan C3-MDIR Colour (NASA / JPL)</td>
69+
</tr>
70+
</table>
71+
72+
## SQL Workspace
73+
74+
Run DuckDB Spatial SQL against loaded layers, local files, and remote URLs
75+
without leaving the map, then add the result as a layer or export it. PostGIS
76+
(PGlite) and Apache Sedona engines are available from the same panel.
77+
78+
[![The SQL Workspace panel docked beside the map, running a spatial query](https://data.geolibre.app/images/geolibre-sql-workspace.webp)](https://data.geolibre.app/images/geolibre-sql-workspace.webp)
79+
80+
See [SQL Workspace](user-guide/sql-workspace.md) and the
81+
[Spatial SQL tutorial](tutorials/spatial-sql.md).
82+
83+
## Chrome-free embeds
84+
85+
Any shared project can be embedded with `maponly` for a pure map with no
86+
toolbar, panels, or status bar.
87+
88+
[![Chrome-free maponly embed of a 3D Tiles project](https://data.geolibre.app/images/geolibre-embed-maponly.webp)](https://data.geolibre.app/images/geolibre-embed-maponly.webp)
89+
90+
See [Embedding & Sharing](user-guide/embedding.md) for every URL parameter.
91+
92+
## Video tutorials
93+
94+
- [GeoLibre 1.0: A Free, Open-Source Cloud-Native GIS That Runs Anywhere (Browser, Desktop & Jupyter)](https://youtu.be/87Cm0QagtxI) — a tour of the browser, desktop, and Jupyter builds.
95+
- [Geoprocessing in the Browser: 700+ Free GIS Tools in GeoLibre, Zero Install](https://youtu.be/W32bIQO_nG8) — the Whitebox toolbox running entirely on WebAssembly.
96+
97+
## Try it yourself
98+
99+
[Launch GeoLibre Web](https://web.geolibre.app/){ .md-button .md-button--primary }
100+
[Download the app](downloads.md){ .md-button }
101+
[Getting started](getting-started.md){ .md-button }

0 commit comments

Comments
 (0)