Map Navigation
Camera Controls
GeoLens uses standard CesiumJS camera controls:
| Input | Action |
|---|---|
| Left click + drag | Rotate / tilt the globe |
| Right click + drag | Zoom in or out |
| Scroll wheel | Zoom in or out |
| Middle click + drag | Pan the camera laterally |
| Double-click | Zoom to the clicked location |
| Ctrl + drag | Lock altitude and pan |
Automatic Camera Flying
Many features automatically fly the camera to a relevant location when activated:
| Feature | Flies To |
|---|---|
| NY Street Cameras | New York City area |
| Emergency Management events | Event location (on click) |
| CO₂ Sensors | Central Florida |
| Boundary Selection | Selected state or county |
| River Gauges | Gauge location (on click) |
Camera fly animations use viewer.camera.flyTo() or viewer.flyTo() with a configurable duration.
Map Maximize
Click the ⛶ button in the top-right of the map to expand the Cesium view to full-screen width (the sidebar is hidden). A small ☰ restore button appears in the bottom-left to bring the sidebar back.
Info Boxes
Clicking on most map entities (cameras, sensors, events, gauges) opens an info box — a floating panel positioned near the top-right of the map. Info boxes display details and interactive controls (charts, links, buttons). Only one info box is visible at a time; opening a new one closes the previous.
Info boxes can be closed by:
- Clicking the
×button on the info box - Clicking elsewhere on the map (Cesium's default entity deselect)
Map Base Layer
The default imagery is Cesium's built-in Bing Maps aerial. The base layer changes are reflected in weather and AQI panel updates (those panels reverse-geocode the current camera center).
Weather & AQI Auto-Update
When the Weather or Air Quality panels are open, panning the map triggers an automatic update (debounced to 1 second) to reflect the new map center location. The current center is extracted with:
const ray = viewer.camera.getPickRay(
new Cesium.Cartesian2(canvas.clientWidth / 2, canvas.clientHeight / 2)
);
const position = viewer.scene.globe.pick(ray, viewer.scene);