★ New

Exploit drone photos where they were taken.

An Oriented Imagery Catalog (OIC) ties each drone photo to the camera pose it was captured at — so you can click a point on the map and see every photo that covered it, from the right angle. 3D Map Explorer registers OICs, auto-derives entries from FMV frame captures or drone EXIF, persists them to GeoPackage, and exposes each catalog as an ArcGIS Feature Service the Oriented Imagery Viewer consumes directly.

Oriented Imagery CatalogFMV frame deriveEXIF derive GeoPackage persistenceArcGIS Feature ServiceFeatureLayer URL
What it does

Register once, point the viewer at a FeatureLayer URL.

OrientedImageryService is an in-memory catalog registry backed by an optional GeoPackage store — so catalogs survive restarts. Each catalog is exposed as an ArcGIS Feature Service at /api/oic/{id}/featureserver/0, which is exactly the URL the Oriented Imagery Viewer expects for its FeatureLayer. Two ways to populate a catalog:

  • Programmatic — register a catalog via POST /api/oic, then point the viewer at the FeatureLayer URL.
  • Auto-derive from FMVPOST /api/orientedimagery/derive/fmv/{clipId} derives oriented entries from Full Motion Video frame captures (KLV camera pose already embedded).
  • Auto-derive from photosPOST /api/orientedimagery/derive/photos derives entries from drone photo EXIF/XMP metadata.
POST /api/oic/{id}/images
// register catalog → add images → serve
POST /api/oic
{ "id": "sortie-12", "name": "North Ridge" }

// auto-derive entries from drone photos
POST /api/orientedimagery/derive/photos

// viewer FeatureLayer URL
GET /api/oic/sortie-12/featureserver/0/query
→ ArcGIS FeatureSet of oriented images
Oriented Imagery Viewer showing drone photos keyed to their capture poses over the map
Two paths in

From FMV captures or raw drone photos

The richest oriented-imagery source is FMV — every frame already carries full camera pose in its KLV metadata. For still photography, EXIF/XMP camera tags provide the pose. Either way the catalog schema is ready, so you populate it from whichever source your sortie produced.

🎬

FMV derive

derive/fmv/{clipId} — captures KLV frame poses at a configurable interval.

🖼️

Photo derive

derive/photos — pulls camera pose from EXIF/XMP metadata.

💾

GPKG persistence

Optional OicGpkgStore — catalogs persist across restarts; best-effort load.

🗺️

Feature Service

Each catalog emits an ArcGIS Feature Service — query + FeatureLayer URL.

🧩

Viewer-ready

FeatureLayer URL drops straight into the Oriented Imagery Viewer.

🔁

Full lifecycle

Register, list, get, add images, delete — CRUD over REST.

REST API surface

Build and serve oriented catalogs

CapabilityEndpointNotes
List catalogsGET /api/orientedimagery/catalogs · /api/oicAliases
Get catalogGET /api/orientedimagery/catalogs/{id} · /api/oic/{id}
Register catalogPOST /api/oicCreate catalog
Delete catalogDELETE /api/oic/{id}
Add imagesPOST /api/oic/{id}/imagesAdd oriented image entries
Derive from FMVPOST /api/orientedimagery/derive/fmv/{clipId}KLV frame poses (?intervalSec)
Derive from photosPOST /api/orientedimagery/derive/photosEXIF/XMP pose extraction
Feature ServiceGET /api/oic/{id}/featureserver[/0[/query]]ArcGIS FeatureLayer URL for the viewer

Catalog + Feature Service reflect OrientedImageryRoutes.cs and OrientedImageryService.cs. Derive-from-photos EXIF/XMP pose extraction depends on complete camera metadata in the source images; partial EXIF yields partial poses.

Part of the UAS loop

Plan → Preflight → Fly → Process → Exploit

Every drone photo, in context

Oriented Imagery Catalogs auto-derived from FMV or EXIF, persisted to GeoPackage, served as an ArcGIS Feature Service — the exploitation layer over your drone sorties.