Skip to content

Commit e5f8f09

Browse files
authored
docs(processing): explain the two toolboxes and fix stale menu paths (#1929)
* docs(processing): explain the two toolboxes and fix stale menu paths The Processing menu carries two independent tool collections whose category names collide: the Whitebox toolbox catalog (Conversion, Hydrology, LiDAR, Network, Projection, Raster, Remote Sensing, Terrain, Vector as direct children of the menu) and GeoLibre's own dialogs under the GeoLibre Toolbox submenu. Nothing in the docs said so, so 'Processing / Vector / GeoLibre (WASM)' and 'Processing / GeoLibre Toolbox / Vector' read as duplicates. - New 'Two toolboxes in one menu' section on the Processing Tools page: the menu tree as rendered, a side-by-side table of what each toolbox is and where it runs, and the specific Vector-vs-Vector pair spelled out. Also notes that the dialog's Source filter ('GeoLibre tools' / 'Whitebox tools') splits the Whitebox catalog only, which is a third thing again. - Reorganized the page under 'GeoLibre Toolbox' and 'Whitebox Toolbox' headings and documented the families that had no entry at all: Network, Spatial Statistics, DGGS, Geocode Addresses, Batch & Models, Object Detection, Segment Everything, plus the Raster Analysis group and the Vector Movement and Data quality groups. - Corrected the Conversion section: every conversion tool now has a client-side engine, so the per-tool 'Sidecar' engine column was wrong; Raster to PMTiles was missing entirely. - Updated the menu paths that moved under GeoLibre Toolbox across the docs, README, and the sidecar README, and repointed the README's #geoprocessing-toolbox anchor at #whitebox-toolbox. - Added a Troubleshooting entry for users who land there after seeing the same category name twice. * docs(processing): scope the conversion allowlist claim, note colliding tool names Two points from review. The conversion sidecar's path allowlist is opt-in, not unconditional: GEOLIBRE_CONVERSION_ROOTS is unset on desktop (app/conversion.py: 'Unset means no restriction (the default for the desktop app)') and set by the Docker image, whose sidecar is reachable same-origin through the nginx proxy. The page inherited a flat 'hardened with a path allowlist' claim that read as always-on; it now says which deployment sets it and why. Reviewing a (mistaken) claim that the tutorials' Conversion paths pointed at the wrong toolbox turned up a sharper case of this PR's own subject: a few individual tool *names* collide across the toolboxes, not just category names. The WASM catalog carries vector_to_pmtiles / write_pmtiles displayed as 'Vector to PMTiles' and 'Raster to PMTiles', which are also the names of two ConversionDialog tools, so both menus show a 'Vector to PMTiles' leaf that opens a different dialog. Called out in 'The two paths that look alike', with a note that these docs mean the GeoLibre Toolbox one. The existing paths are correct and unchanged. * docs(processing): correct the separator reference and the result-is-a-layer claim Two minor review points, both right. 'Everything above the first separator' put AI Assistant inside the Whitebox block; the Whitebox section is the block between the first and second separators. 'the result is added to the map styled and ready' held for the analysis dialogs but not for Conversion, which writes a file. Split the two.
1 parent 6b854a2 commit e5f8f09

18 files changed

Lines changed: 229 additions & 67 deletions

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ GeoLibre is built with **Tauri v2**, **React**, **TypeScript**, **MapLibre GL JS
3131
- **[Get it on Google Play](https://play.google.com/store/apps/details?id=org.geolibre.app)** — the native Android app
3232
- **[Use the Python package](https://geolibre.app/python/)** — embed and control the full app in Jupyter notebooks
3333
- **[Use the R package](https://r.geolibre.app/)** — build interactive maps in RStudio, Quarto, R Markdown, and Shiny
34-
- **[1,000+ geoprocessing tools](https://geolibre.app/user-guide/processing/#geoprocessing-toolbox)** — the full toolbox, in the browser
34+
- **[1,000+ geoprocessing tools](https://geolibre.app/user-guide/processing/#whitebox-toolbox)** — the full toolbox, in the browser
3535
- **[Get started](https://geolibre.app/getting-started/)** — install, run from source, and configure
3636
- **[Features](https://geolibre.app/features/)** — the complete feature list
3737

@@ -106,7 +106,7 @@ Switch bodies from the planet switcher in the Layers panel. See [Demos](https://
106106

107107
[![The GeoLibre Whitebox toolbox running locally with WebAssembly, listing the full catalog of 1,000+ tools with the Regularize Building Footprints tool selected](https://assets.geolibre.app/images/whitebox.webp)](https://assets.geolibre.app/images/whitebox.webp)
108108

109-
**Processing → Whitebox** opens a toolbox of **1,000+ geoprocessing tools** that
109+
**Processing → Whitebox Toolbox** opens a toolbox of **1,000+ geoprocessing tools** that
110110
execute in the browser through a WebAssembly runtime with native raster and
111111
vector I/O. There is no Python sidecar to install and no server to call — the
112112
tools, your data, and the results all stay on your machine, so the full toolbox
@@ -130,7 +130,7 @@ the Processing menu:
130130
| **Projection** | 4 | reprojection for raster and vector data |
131131

132132
Any tool is deep-linkable with a `?tool=` URL parameter that preselects it and
133-
pre-fills its form. See the [Processing Tools guide](https://geolibre.app/user-guide/processing/#geoprocessing-toolbox)
133+
pre-fills its form. See the [Processing Tools guide](https://geolibre.app/user-guide/processing/#whitebox-toolbox)
134134
for details, and [Geoprocessing in the Browser](https://youtu.be/W32bIQO_nG8) for
135135
a video walkthrough.
136136

backend/geolibre_server/README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,10 @@ WBW_EXTERNAL_PYTHON=/path/to/python
5050

5151
## Conversion runtime
5252

53-
The **Processing → Conversion** menu uses a dedicated managed runtime
54-
(DuckDB + rio-cogeo + freestiler), bootstrapped the same way as Whitebox: the
55-
sidecar finds or installs `uv`, creates a virtual environment, and installs the
56-
conversion packages on first use.
53+
The **Processing → GeoLibre Toolbox → Conversion** menu uses a dedicated managed
54+
runtime (DuckDB + rio-cogeo + freestiler), bootstrapped the same way as Whitebox:
55+
the sidecar finds or installs `uv`, creates a virtual environment, and installs
56+
the conversion packages on first use.
5757

5858
- **Vector → GeoParquet** and **CSV → GeoParquet** also run entirely in the
5959
browser with DuckDB-WASM, so they work in the web build with **no sidecar**.

docs/android.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ Vector tools (Turf.js / in-browser GeoPandas via Pyodide), the SQL Workspace
2828
Tools that depend on a **local desktop process** are hidden on mobile, because
2929
Android has no Python sidecar or local helper binaries:
3030

31-
- Processing → **Raster**, **Conversion**, **AI Segmentation**
31+
- Processing → GeoLibre Toolbox → **Raster**, **Conversion**, **AI Segmentation**
3232
(all need the Python sidecar)
3333
- Add Data → **PostgreSQL** (served by the local Martin tile server)
3434

docs/architecture.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ The FastAPI app in `backend/geolibre_server` backs the format Conversion tools,
7272

7373
The Whitebox toolbox does **not** depend on it: its 1,000+ tools run in the browser on the `geolibre-wasm` WebAssembly runtime by default, and the sidecar is an opt-in alternative engine that can read native file paths for batch runs over a directory.
7474

75-
The Vector tools (Processing → Vector) run client-side with Turf.js and need no sidecar. All of the tools can optionally run on the sidecar's `/vector` endpoints, backed by GeoPandas and Shapely, for projection-aware results; the sidecar reports availability through `/vector/status`, and the dialog falls back to the client engine when the optional `vector` extra is not installed.
75+
The Vector tools (Processing → GeoLibre Toolbox → Vector) run client-side with Turf.js and need no sidecar. All of the tools can optionally run on the sidecar's `/vector` endpoints, backed by GeoPandas and Shapely, for projection-aware results; the sidecar reports availability through `/vector/status`, and the dialog falls back to the client engine when the optional `vector` extra is not installed.
7676

7777
A third Vector engine, **Python (Pyodide)**, runs the same GeoPandas/Shapely code **in the browser** via [Pyodide](https://pyodide.org) (CPython compiled to WebAssembly), so the GeoPandas path is available on the web build with no server. The geometry logic is a framework-free module, `backend/geolibre_server/geolibre_server/vector_ops.py`, that both the sidecar and the browser run — a Vite plugin (`vite-plugins/copy-vector-ops.ts`) copies it into the app bundle, and a classic Web Worker (`public/pyodide/pyodide-worker.js`) loads Pyodide from a CDN, installs `geopandas`, and calls `run_vector_tool` over a JSON-string boundary. One source of truth means the Sidecar and Pyodide engines return identical results. The Pyodide runtime is downloaded lazily on first use; the `VITE_PYODIDE_INDEX_URL` env var points it at a self-hosted mirror for offline/production deployments.
7878

docs/downloads.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ shipping them broken. Here is how the two macOS builds compare:
132132
| Feature | Homebrew / DMG | Mac App Store |
133133
| --- | --- | --- |
134134
| Whitebox toolbox (1,000+ WebAssembly tools) | Yes | Yes |
135-
| Processing → Vector, browser-engine Conversion, client raster tools | Yes | Yes |
135+
| Processing → GeoLibre Toolbox → Vector, browser-engine Conversion, client raster tools | Yes | Yes |
136136
| SQL Workspace (DuckDB-WASM, PGlite/PostGIS, in-browser Apache Sedona on CereusDB) | Yes | Yes |
137137
| Python sidecar engines (GeoPandas vector, rasterio raster, GDAL conversion, SamGeo segmentation, the SedonaDB sidecar behind the Apache Sedona engine) | Yes | No |
138138
| Add Data → PostgreSQL / PostGIS (martin tile server) | Yes | No |

docs/features.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ kepler.gl, see the [Comparison](comparison.md).
200200
- Spatial Statistics toolbox, including Emerging Hot Spot Analysis that builds a space-time cube from timestamped points, runs Getis-Ord Gi\* per time slice, and classifies each cell as a new, intensifying, persistent, diminishing, sporadic, oscillating, or historical hot or cold spot
201201
- Processing batch runner with model and pipeline chaining, to run a sequence of tools as one job
202202
- Processing History panel that lists every tool run, re-runs any of them with one click, and copies the equivalent Python code
203-
- Raster Georeferencer (Processing → Georeferencing) that pins a non-georeferenced image to the map with ground control points using a least-squares affine fit, reporting per-GCP and RMS residuals
203+
- Raster Georeferencer (Processing → GeoLibre Toolbox → Raster → Georeferencing) that pins a non-georeferenced image to the map with ground control points using a least-squares affine fit, reporting per-GCP and RMS residuals
204204
- Network analysis tools for isochrones, service areas, origin–destination (OD) cost matrices, and sequential routes (directions) through an ordered set of waypoints
205205
- Geocoding tools for forward, batch, and reverse geocoding through a multi-provider abstraction
206206
- AI Segmentation (SamGeo) that turns imagery into vector features with [segment-geospatial](https://github.com/opengeos/segment-geospatial) and Meta's SAM 3 — text prompts ("trees", "buildings") or automatic segmentation, proxied to a separate `samgeo-api` model server (GPU recommended). See [AI Segmentation](user-guide/segmentation.md)

docs/index.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,13 +79,13 @@ Run DuckDB Spatial SQL in the browser against loaded layers, local files, and re
7979
<div class="feature-card" markdown>
8080
### Vector tools
8181

82-
Geometry tools under Processing → Vector — buffer, centroids, convex hull, dissolve, bounding box, simplify, smooth, regular grid, clip, overlay (intersect/difference/union), spatial and attribute joins, selection, Voronoi/Delaunay, and H3 grids and binning — run in the browser with Turf.js, with an optional GeoPandas sidecar engine. A Spatial Statistics toolbox and a batch runner with model/pipeline chaining round out Processing.
82+
Geometry tools under Processing → GeoLibre Toolbox → Vector — buffer, centroids, convex hull, dissolve, bounding box, simplify, smooth, regular grid, clip, overlay (intersect/difference/union), spatial and attribute joins, selection, Voronoi/Delaunay, and H3 grids and binning — run in the browser with Turf.js, with an optional GeoPandas sidecar engine. A Spatial Statistics toolbox and a batch runner with model/pipeline chaining round out Processing.
8383
</div>
8484

8585
<div class="feature-card" markdown>
8686
### Raster tools
8787

88-
Raster tools under Processing → Raster — hillshade, slope, aspect, reproject, resample, clip, polygonize, contour, zonal and focal statistics, raster calculator, reclassify, mosaic, and a Spectral Index toolbox (NDVI, NDWI, EVI with band presets) — run on a rasterio sidecar with a client-side fallback. Includes a Georeferencer and single-band or RGB raster styling.
88+
Raster tools under Processing → GeoLibre Toolbox → Raster — hillshade, slope, aspect, reproject, resample, clip, polygonize, contour, zonal and focal statistics, raster calculator, reclassify, mosaic, and a Spectral Index toolbox (NDVI, NDWI, EVI with band presets) — run on a rasterio sidecar with a client-side fallback. Includes a Georeferencer and single-band or RGB raster styling.
8989
</div>
9090

9191
<div class="feature-card" markdown>

docs/ios.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ Tools that depend on a **local desktop process** are hidden on mobile because
4545
iOS has no Python sidecar or local helper binaries and its sandbox forbids
4646
spawning subprocesses:
4747

48-
- Processing → **Raster**, **Conversion**, **AI Segmentation**
48+
- Processing → GeoLibre Toolbox → **Raster**, **Conversion**, **AI Segmentation**
4949
(all need the Python sidecar). The Whitebox geoprocessing toolbox runs in
5050
WebAssembly, needs no sidecar, and stays available.
5151
- Add Data → **PostgreSQL** (served by the local Martin tile server)

docs/self-hosting.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ the public internet:
371371
| --- | --- | --- |
372372
| Basemaps | OpenFreeMap / CARTO tiles | Use the Basemaps plugin's **custom style URL** and serve your own style plus a PMTiles basemap from your server, or use a blank background. Add the host to the CSP if it is not your own origin. |
373373
| Geocoding | Public Nominatim | Point it at a self-hosted Nominatim or Pelias (see [Data Integrations](user-guide/data-integrations.md#geocoding)). |
374-
| Routing and isochrones | Public FOSSGIS Valhalla (`valhalla1.openstreetmap.de`) | Set `VITE_ROUTING_ENDPOINT` to your own Valhalla server. This covers Processing → Network and the **Drive time** / **Walk time** [quick actions](user-guide/map-controls.md#quick-analysis-from-a-clicked-point). Add the host to the CSP. |
374+
| Routing and isochrones | Public FOSSGIS Valhalla (`valhalla1.openstreetmap.de`) | Set `VITE_ROUTING_ENDPOINT` to your own Valhalla server. This covers Processing → GeoLibre Toolbox → Network and the **Drive time** / **Walk time** [quick actions](user-guide/map-controls.md#quick-analysis-from-a-clicked-point). Add the host to the CSP. |
375375
| Pointer elevation readout | Public Open-Meteo elevation API, whenever 3D terrain has no sample for the point | Leave the readout off (it is off by default), or decline the consent prompt GeoLibre shows before the first remote lookup — that is the gate the resolver checks. Enabling 3D terrain makes the remote call rare but does not rule it out, since a point terrain cannot answer still falls through. |
376376
| Python (Pyodide) vector engine | Loads Pyodide from jsDelivr | Set `VITE_PYODIDE_INDEX_URL` to a mirrored copy of the Pyodide distribution. |
377377
| AI assistant | Off unless configured | Leave `GEOLIBRE_AI_URL` unset, or route it through your own proxy. |

docs/tutorials/cloud-native-data.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,14 @@ A Cloud-Optimized GeoTIFF is a regular GeoTIFF organized so clients can read jus
3333

3434
## Convert local data to cloud-native
3535

36-
Use **Processing → Conversion** to write cloud-native files. See [Processing Tools](../user-guide/processing.md#conversion).
36+
Use **Processing → GeoLibre Toolbox → Conversion** to write cloud-native files. See [Processing Tools](../user-guide/processing.md#conversion).
3737

3838
- **Vector to GeoParquet** and **CSV to GeoParquet** run in the browser with DuckDB-WASM.
3939
- **Vector to FlatGeobuf**, **Vector to PMTiles**, and **Raster to COG** run on the Python sidecar (desktop app).
4040

4141
For example, to publish a local GeoJSON as GeoParquet:
4242

43-
1. Open **Processing → Conversion → Vector to GeoParquet**.
43+
1. Open **Processing → GeoLibre Toolbox → Conversion → Vector to GeoParquet**.
4444
2. Choose the input file and an output path.
4545
3. Run the conversion, then add the resulting GeoParquet back to the map to verify it.
4646

0 commit comments

Comments
 (0)