Skip to content

Commit b308b5e

Browse files
authored
docs: document the new map readouts, quick analysis, and startup preference (#1831)
* docs: document the new map readouts, quick analysis, and startup preference Seven features shipped over the last several PRs with no user-facing docs, and one Settings tab documented here no longer exists. New coverage: - The right-click **Quick analysis** menu as a whole. It was only ever a ticked roadmap line, so buffers, drive/walk-time isochrones, centroids, convex hull and bounding box from a click were undiscoverable from the docs. - The interactive viewshed (#1815), including what it deliberately does not model — curvature and refraction — and when to reach for the Whitebox tool instead. - The status bar, rewritten as a table of every readout. Coordinate notation (DD/DMS/DDM/UTM, #1814), the pointer elevation readout (#1813) with both its sources and its consent gate, and Eye alt (#1816) with its planetary scaling. - Measure headings (#1817): great-circle initial bearing, the 16-point compass label, and why a final-bearing row appears only on long lines. - The spectral profile now working on any multiband GeoTIFF/COG (#1818), added under Raster styling rather than left implicit in the NetCDF text. - Settings → Startup (#1810), with the two limits that surprise otherwise: only local projects are reopened, and a URL always wins. Corrections and gaps found on the way: - **Settings → Project Settings no longer exists** — no `settings.project` catalog entry and no reference anywhere in the app. Replaced with where the project name and path actually live now. - Settings → Map Preferences was missing Celestial body, Scale bar units and Coordinate format; the page also never named Appearance, Interface, Geocoding, AI Providers or Updates. Added a section index so every tab is reachable. - Self-hosting's "Reducing outbound requests" table gained the two services it omitted: Valhalla routing (`VITE_ROUTING_ENDPOINT`, previously undocumented anywhere) and the Open-Meteo elevation fallback. The coordinate examples are rendered output from `formatCoordinate`, not hand-computed, so the DMS seconds and UTM easting/northing are exact. Verified with `zensical build` (no issues) and a link checker over every internal link and anchor in the changed pages. * Address CodeRabbit review feedback - Correct the pointer-elevation privacy contract in interface.md, features.md and self-hosting.md. CodeRabbit is right: createPointerElevationResolver branches on whether `sampleMapTerrainPoint` returned a value, not on whether 3D terrain is enabled, so a terrain-enabled map with no sample for that point still falls through to Open-Meteo. Presenting "3D terrain on" as a guarantee of no outbound request was wrong. The real gate is `canUseRemote` — the consent prompt — so the docs now name declining consent (or leaving the readout off) as what actually keeps it off the network, and describe the terrain path as "whenever a usable sample is available" instead. - Stop implying network isochrones run from a layer row (processing.md). The clicked-point menu has buffer and drive/walk time; the layer-row menu has buffer, centroids, convex hull and bounding box. The tip conflated the two. - Say "last local project" in projects.md, matching settings.md and features.md — remote share links are deliberately never replayed on launch.
1 parent 49c89b0 commit b308b5e

9 files changed

Lines changed: 170 additions & 10 deletions

File tree

docs/features.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@ kepler.gl, see the [Comparison](comparison.md).
2828
- **Basemaps**: OpenFreeMap, Protomaps, EOX Sentinel-2 cloudless, and Openbasiskaart, with stacking of multiple raster basemaps, blank background support, and double-click to swap the core basemap from the layer panel
2929
- **Planetary basemaps**: Mars and the Moon (OpenPlanetaryMap), plus Mercury, Venus, the Galilean moons (Io, Europa, Ganymede, Callisto), Titan, Pluto, and Charon (USGS Astrogeology, reprojected to Web Mercator by the tiles Worker). A per-project ellipsoid drives distance, area, and scale measurements from that body's radius, and a planet switcher sits in the Layers panel
3030
- **Toggleable controls**: navigation, fullscreen, geolocation, globe, terrain, scale (metric, imperial, or nautical), attribution, and logo, plus a double-click terrain control for setting vertical exaggeration
31-
- **On-map helpers**: a right-click context menu for reading coordinates and quick actions, and a Gridlines coordinate-grid overlay with edge labels and a UTM easting/northing grid mode
31+
- **On-map helpers**: a right-click context menu that reads out and copies the clicked coordinate, opens it in Google Maps or Google Earth, and carries a **Quick analysis** submenu — buffers, drive- and walk-time isochrones, and a viewshed, each run on the clicked point with no dialog and no point layer to create first (the same submenu on a layer row runs buffers, centroids, convex hull, and bounding box over the whole layer) — plus a Gridlines coordinate-grid overlay with edge labels and a UTM easting/northing grid mode
32+
- **Interactive viewshed**: right-click anywhere and get what is visible from that spot within 2, 5, or 15 km, computed from the same public terrain tiles the map already renders — no DEM to find, download, or load, and 3D terrain need not even be on. The result is an ordinary image overlay layer, so it gets opacity, ordering, zoom-to, and project save for free. Earth curvature and refraction are not modelled; the Whitebox **Viewshed** tool remains the rigorous DEM-in-hand option
33+
- **Status bar readouts**: the pointer coordinate in decimal degrees, DMS, DDM, or UTM (click to cycle, or set it in Settings; UTM reuses the projection that draws the Gridlines grid, and falls back to degrees outside its valid latitude band), the ground elevation under the pointer, camera altitude above sea level as Google Earth-style **Eye alt** — scaled to the active celestial body, so it stays right on a Mars or Moon basemap — plus zoom, bearing, pitch, and the view bounding box
34+
- **Pointer elevation** resolved from the map's own 3D terrain whenever a usable sample is available there (instant, offline, nothing leaves the device), and from a public elevation API when terrain has no value to give — after the pointer settles, cached per cell, Earth-only, off by default, and gated behind an explicit consent notice, so declining is what keeps the readout off the network
3235
- **View menu**: viewport history navigation, a reset pitch and bearing control, a distinct north arrow, and View in Google Maps and View in Google Earth actions
3336
- Multi-map grid that splits the workspace into a grid of synchronized map views, so you can compare basemaps, layers, or time steps side by side, with any **secondary** pane switchable to an optional CesiumJS 3D globe via its 2D/3D toggle — the primary map is always MapLibre (camera-synced with the 2D maps; requires a Cesium Ion token — see [Optional 3D globe credentials](getting-started.md#optional-3d-globe-credentials-cesium-ion))
3437
- Timelapse mode that animates annual cloudless basemaps — EOX Sentinel-2 and NASA GIBS providers (Landsat/WELD and MODIS land cover) — with a provider picker and legend
@@ -97,6 +100,7 @@ kepler.gl, see the [Comparison](comparison.md).
97100
- Local grids are colormapped in the browser from the same colormap catalog the Style panel uses, added as image overlays, and fitted to the camera on add, so Zoom to layer has a real extent to fly to
98101
- A hyperspectral cube gains an RGB band combination picked by wavelength
99102
- Identify reads a pixel's value off the map and, for a cube, walks the band axis to chart a spectral signature against wavelength — up to six sampled points, each drawn as a numbered dot in its chart color, compared in a draggable and resizable window over the map and exported as PNG or CSV
103+
- The same spectral profile works on any **multiband GeoTIFF or COG**, not just NetCDF/HDF — click a stacked Landsat or Sentinel scene to compare the response of water, vegetation, and asphalt across every band. Reads are range requests for the tile containing the pixel rather than the whole scene, the click is reprojected into the raster's own CRS, and the chart plots against wavelength when the file declares one per band and against band number otherwise
100104
- A **3D image cube** view renders the scene as its six exterior faces with draggable slice cuts, reading windowed and strided so a full EMIT reflectance variable stays within what the browser can hold
101105

102106
## Attribute data and expressions
@@ -122,7 +126,7 @@ kepler.gl, see the [Comparison](comparison.md).
122126
## Map tools, printing, and media
123127

124128
- Controls menu
125-
- Measure (including terrain-aware 3D measurements), Bookmark, Minimap, View State, and a Search panel
129+
- Measure (including terrain-aware 3D measurements and a heading readout — a true great-circle initial bearing with a 16-point compass label, plus a final bearing on lines long enough for the great circle to converge), Bookmark, Minimap, View State, and a Search panel
126130
- Map annotation tools that draw text, arrows, and highlights on the map, saved with the project
127131
- Persistent mode banners for the Directions and Reverse Geocode tools
128132
- A Camera Tour recorder that captures an animated keyframe tour to video, with per-keyframe recapture, per-keyframe hold and transition duration controls, and saving or loading a named tour setup as JSON
@@ -209,6 +213,7 @@ kepler.gl, see the [Comparison](comparison.md).
209213
- QGIS project import (`.qgs` and `.qgz`) that rebuilds layers, nested layer groups, group visibility, layer order, styling, and the saved map view, reporting per-layer why anything was skipped rather than failing the whole import. See [Projects](user-guide/projects.md#importing-a-qgis-project)
210214
- ArcGIS Pro project import (`.aprx` and `.mapx`) that reads CIM JSON without ArcPy and restores the first 2D map's extent, local vector and GeoTIFF layers, nested groups, visibility, simple symbols, field labels, vector-tile portal items, and cached map services, with per-layer warnings for unsupported sources. See [Projects](user-guide/projects.md#importing-an-arcgis-pro-project)
211215
- Reusable project templates saved to a personal library, with an option to keep the basemap, groups, styles, legend, widgets, and layout while stripping the data layer content
216+
- Startup project preference on the desktop app: open the default workspace, reopen the last local project, or always open one chosen project. Remote share links are never replayed on launch, a project URL in the address bar takes precedence, and a startup project that has gone missing falls back to the default workspace with an explanation instead of an error. See [Settings](user-guide/settings.md#startup)
212217

213218
## Plugins
214219

docs/self-hosting.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,8 @@ the public internet:
367367
| --- | --- | --- |
368368
| 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. |
369369
| Geocoding | Public Nominatim | Point it at a self-hosted Nominatim or Pelias (see [Data Integrations](user-guide/data-integrations.md#geocoding)). |
370+
| 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. |
371+
| 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. |
370372
| Python (Pyodide) vector engine | Loads Pyodide from jsDelivr | Set `VITE_PYODIDE_INDEX_URL` to a mirrored copy of the Pyodide distribution. |
371373
| AI assistant | Off unless configured | Leave `GEOLIBRE_AI_URL` unset, or route it through your own proxy. |
372374
| Project sharing | `share.geolibre.app` | `GEOLIBRE_SHARE_URL=off`, or your own [projects server](server-api.md). |

docs/user-guide/interface.md

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,50 @@ On-map controls such as zoom, globe, fullscreen, and the Layer Control appear in
7777

7878
## The status bar
7979

80-
The status bar along the bottom shows the live cursor coordinates, zoom, bearing, and pitch, a button to expand the [Attribute Table](attribute-table.md), and a **Diagnostics** button (also under **Help**) that surfaces any runtime errors.
80+
The status bar along the bottom reports the live state of the map, from left to right:
81+
82+
| Readout | Description |
83+
| --- | --- |
84+
| **Coords** | The coordinate under the pointer. Click it to switch notation — see below. |
85+
| **Elev** | The ground elevation under the pointer. Off by default; see [Elevation readout](#elevation-readout). |
86+
| **GPS** | The current fix, while [GPS tracking](map-controls.md#gps-tracking) is running. |
87+
| **Zoom** | The map zoom level, to two decimals. |
88+
| **Eye alt** | The camera's altitude above sea level — the same quantity Google Earth Pro calls *Eye alt*. |
89+
| **Bearing** / **Pitch** | The camera rotation and tilt, in degrees. |
90+
| **BBox** | The bounding box of the current view (hidden on narrow windows). |
91+
92+
It also holds a button to expand the [Attribute Table](attribute-table.md) and a **Diagnostics** button (also under **Help**) that surfaces any runtime errors.
93+
94+
**Eye alt** is scaled to the active celestial body, so it stays correct on a Mars or Moon basemap rather than reporting an Earth-derived height, and it follows the **Scale bar units** preference (metres/kilometres, feet/miles, or nautical miles). See [Settings → Map Preferences](settings.md#map-preferences).
95+
96+
### Coordinate format
97+
98+
GeoLibre can report the pointer coordinate in four notations:
99+
100+
| Format | Example |
101+
| --- | --- |
102+
| **Decimal degrees** (default) | `-83.92074, 35.96064` |
103+
| **Degrees, minutes, seconds** | `35°57'38.3"N 83°55'14.66"W` |
104+
| **Degrees, decimal minutes** | `35°57.6384'N 83°55.2444'W` |
105+
| **UTM (zone, easting/northing)** | `17S 236594mE 3983527mN` |
106+
107+
Decimal degrees are written longitude-first, matching GeoJSON and the rest of the app; DMS and DDM lead with latitude, the way those notations are conventionally written.
108+
109+
Click the coordinates in the status bar to cycle through them, or set the notation in **Settings → Map Preferences → Coordinate format**. The choice is saved with the project.
110+
111+
The UTM readout uses the same projection that draws the [Gridlines](map-controls.md#camera-overlay-and-recording-tools) UTM grid, so the numbers in the status bar always agree with the grid on screen. Outside the UTM latitude band (below 80°S or above 84°N) there is no valid UTM coordinate, and the readout falls back to decimal degrees.
112+
113+
### Elevation readout
114+
115+
**Controls → Elevation** turns on the **Elev** readout. It is **off by default**, and it resolves the height under the pointer from one of two sources:
116+
117+
- **From the map's own 3D terrain**, whenever a usable sample is available there. This is instant, tracks the cursor live, and sends nothing off your device.
118+
- **From the public [Open-Meteo](https://open-meteo.com/) elevation API** when terrain returns no value for that point — because 3D terrain is off, but also when it is on and the terrain has no sample to give. The lookup waits until the pointer has been still for half a second, caches results per roughly 11 m cell, and runs only on Earth, never on a planetary basemap.
119+
120+
Because that fallback sends the coordinates under your pointer to a third-party service, GeoLibre asks for consent the first time you enable the readout. **Declining is what guarantees the readout never reaches the network** — turning 3D terrain on makes the remote lookup rare, but does not by itself rule it out. Decline and the readout still works wherever terrain can answer. While a lookup is in flight the readout is blank rather than showing the previous point's height.
121+
122+
!!! tip "Reading elevation along a line"
123+
For a profile rather than a single point, use the Elevation Profile plugin, or the [Measure tool](map-controls.md#component-tools), which reports terrain-aware 3D distances.
81124

82125
## Theme
83126

docs/user-guide/layers.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ The **Layers panel** on the left lists every layer in the project, from the topm
1515
Each layer exposes a set of actions:
1616

1717
- **Zoom to layer**: fit the map to the layer's extent (for layers whose bounds are known).
18-
- **Identify features**: click features on the map to see their attributes in a popup.
18+
- **Identify features**: click features on the map to see their attributes in a popup. On a raster layer this reads the pixel value instead, and on a multiband raster it also builds a [spectral profile](styling.md#spectral-profile).
1919
- **Labels**: toggle text labels for vector layers that have a label field.
2020
- **Metadata / Properties**: inspect the layer's source and configuration.
2121
- **Remove layer**: delete the layer from the project.

0 commit comments

Comments
 (0)