Two capabilities in one. Browse and ingest imagery over your rights-of-way from remote public catalogs — Element 84 Earth Search, Microsoft Planetary Computer, or any custom STAC API — and turn the utility's own folders of drone-flight rasters, vectors, and LiDAR into a spec-conformant STAC catalog your whole GIS team can query.
Draw your corridor as the AOI, set a date range, and go. The browser auto-detects whether a catalog speaks the OGC CQL2 Filter Extension or the older STAC query extension, and emits the right request from a single query — no hand-writing filters.
NeedsSigning asset hrefs are signed server-side so the browser can GET COGs directly.// single query → correct dialect per catalog { "collections": ["sentinel-2-l2a"], "intersects": { "type": "Polygon", "coordinates": [/* AOI */] }, "datetime": "2026-05-01/2026-06-30", "query": { "eo:cloud_cover": { "lt": 10 } } } → assets rendered as ArcGIS ImageryTileLayer
Ingest a folder of GeoTIFFs, COGs, Shapefiles, GeoJSON, GPKG, or LAS/LAZ/COPC — drone orthos from pole inspections, corridor LiDAR, post-storm collections — and serve it as a spec-conformant STAC API at /stac — landing page, conformance, collections, queryables, items, and GET + POST /search.
AssetMetadataExtractor pulls bbox, CRS, and projection from rasters (GDAL), vectors (OGR), and point clouds (native LasReader).
Catalog items persist in a local stac.gpkg — survives restarts, fully offline, ready for the storm room.
STAC API 1.0.0 core, collections, OGC API Features, item-search (+sort, +fields), and the query extension v0.3.0.
Reads queryables + collection summaries to build filter widgets — no field list hardcoded.
STAC assets stream into ImageryTileLayer / ImageryLayer for instant visualization.
The desktop proxy absorbs browser-hostile CORS, SAS signing, and bearer auth so the client just works.
Remote search is proxied under /api/stac; your own catalog lives under the spec path /stac with management under /api/stacserver.
| Surface | Endpoint | Purpose |
|---|---|---|
| Remote client | GET/POST /api/stac/sources | List / add / remove remote catalogs |
| Remote client | POST /api/stac/sources/{id}/search | Search a remote catalog (dialect auto) |
| Remote client | GET /api/stac/sources/{id}/collections | List collections + queryables |
| In-app server | GET /stac · /stac/conformance | STAC 1.0.0 landing + conformance |
| In-app server | GET /stac/collections/{cid}/items | Serve items from stac.gpkg |
| In-app server | GET+POST /stac/search | Spec item-search (sort + fields) |
| Management | POST /api/stacserver/collections/{cid}/ingest | Ingest local files into a collection |
STAC endpoints strictly follow the official STAC 1.0.0 core and API specifications with complete conformance documentation.
# ingest a folder of rasters + clouds POST /api/stacserver/collections/{cid}/ingest { "paths": ["D:/imagery/*.tif", "D:/clouds/*.laz"] } # then any STAC client can query it GET /stac/collections/{cid}/items POST /stac/search { "bbox": [...] } ● spec-conformant · offline · on :5059
Browsers can't talk to most STAC APIs directly — CORS, Planetary Computer SAS signing, and bearer auth all block the client. The desktop host sits in between and absorbs all of it, so your GIS team searches and renders corridor imagery without ever leaving the map.
Both STAC roles — consumer and provider — ship in a single in-app feature, fully offline-capable. Every inspection flight becomes discoverable imagery the next storm season.