TB-scale seamless mosaic — without the preprocessing wait.

Select any number of registered Cloud-Optimized GeoTIFFs and the builder composes them into a single virtual mosaic served as one ImageServer layer. A lightweight VRT file references the sources — GDAL reads through on every window request, so there's no pixel copy, no reprojection bake, no preprocessing step. The RemoteView "Virtual Mosaic" capability: terabytes of adjacent or overlapping scenes presented as one layer, on demand.

VRT — no pixel copyN COGs → 1 layerUnion extent Highest-res cell sizeServed via exportImage
A VRT, not a copy

The mosaic is a tiny XML file

A GDAL Virtual Raster (VRT) is just metadata — an XML pointing at the source rasters, with the destination windows that map each source's footprint into the mosaic's pixel space. The builder hand-authors it (no gdalbuildvrt CLI dependency) so it works with the minimal GDAL runtime that ships in the box.

  • Union extent — the mosaic's geographic bounds are the union of all source footprints; the cell size is the highest-resolution source (no detail loss).
  • Per-source geo-probe — each input is opened via GDAL to read its GeoTransform, dimensions, and projection; mixed-CRS inputs are handled.
  • One routePOST /api/mosaic {cogIds[]} builds + registers the mosaic as a new COG id and returns the ImageServer URL.
/api/mosaic
# compose N registered COGs into one layer
POST /api/mosaic
{
  "cogIds": [
    "wv3-tile-a",
    "wv3-tile-b",
    "wv3-tile-c",
    "s2-mosaic-d"
  ]
}

→ {
    "cogId": "mosaic_a1b2c3d4",
    "outputCogUrl":
      "/arcgis/rest/services/mosaic_a1b2c3d4/ImageServer",
    "sourceCogIds": [ "wv3-tile-a", … ]
  }

# served unchanged — the math path opens any GDAL dataset
GET …/mosaic_a1b2c3d4/ImageServer/exportImage?bbox=…
Why VRT, not a baked mosaic?

No duplication, no staleness, no bake time

A traditional mosaic copies and warps every source into one giant file — hours of preprocessing, doubled storage, and a stale product the moment a new scene arrives. A VRT is the opposite: it's a live view over the sources.

Instant

Building the mosaic is writing a few KB of XML — milliseconds, not hours. The sources are read on demand for each exportImage window.

💾

Zero duplication

No pixel is copied. A mosaic over 4 TB of source COGs is a 2 KB .vrt file. Storage cost is effectively zero.

🔄

Never stale

Re-register a source COG (swap its content under the same id) and the mosaic reflects the new bytes immediately — the VRT reads through on every request.

Served via the ImageServer exportImage math path, not the range-proxy /api/cog/files/{id} path — a VRT isn't a true tiled COG, so the render path (which opens any GDAL dataset) is the right serving surface.

Mosaic the whole catalog — in milliseconds.

Pair with IMINT exploitation and stereo → DSM for a complete image-intelligence stack.

Get Started