The IMINT analyst's daily deliverable isn't just a screenshot — it's a standardized map-sheet product with marginalia, classification, a geo-accurate graticule, and (for area coverage) a multi-sheet atlas. Production Cartography extends the WYSIWYG Layout Designer with doctrinal templates (INTREP / IPB / AGM), a geo-accurate neatline graticule, and an atlas-series orchestrator. The RemoteView production-cartography parity — the one residual gap for the imagery-analyst customer.
Four built-in seed layouts in the Layout Designer — each a finished map sheet with the doctrinal marginalia blocks, ready to bind to a captured map frame and print.
Each is a fully editable LayoutDocument — duplicate any seed into a user layout and tune the element positions, sizes, and content for your unit's house style.
# the doctrinal seeds are built-in layouts GET /api/layouts → [{ "id":"intrep-overlay", "name":"INTREP Overlay", … }, { "id":"ipb-overlay", … }, { "id":"agm-map-sheet", … }, { "id":"strip-map", … }, …] # render a finished sheet (PNG/PDF/GeoTIFF) POST /api/layouts/render { "format":"pdf", "layout":{ "id":"intrep-overlay", … }, "dpi":300, "elements":{ "map":{ "mapDataUrl":"data:image/png;…", "extent":[-76.5,38.9,-76.4,39.0] } } } → application/pdf (the finished sheet)
The neatline element reads the bound map frame's captured extent and draws a real lat/lon graticule at the configured density (1° / 30′ / 10′ / 1′) — interior grid lines, edge tick marks, and DD or DMS edge labels with a white halo for legibility over any map. No longer a cosmetic uniform grid; a geo-referenced one.
Interior lines + edge ticks at every multiple of the density within the extent. Longitude lines run top→bottom; latitude lines run left→right.
Edge values in decimal degrees or degrees-minutes-seconds with hemisphere, drawn with a 4-direction white halo so they read over any basemap.
The neatline overlays a specific mapFrame element by id and reads its captured extent:[w,s,e,n] — the graticule matches the view, not a guess.
MGRS cell labels (server-side MGRS graticule) are the deferred Phase 3; lat/lon is the 90% case and ships now.
The atlas orchestrator turns one layout into a multi-sheet series covering an area of interest — the QGIS Atlas analog, for spatial tiling rather than feature iteration.
Sheet boundaries snap to whole-degree or standard-fraction lines (the map-sheet convention), so adjacent series align and sheets tile cleanly.
Each sheet's seriesIndex element (the locus diagram) shows the series grid with the current sheet highlighted — every sheet knows where it sits in the series.
Each sheet renders via the unchanged /api/layouts/render path (PDF / PNG / GeoTIFF); the series render returns the per-sheet render set for concatenation.
# tile the AGM sheet across an AOI at 0.25° (~1:50k) POST /api/layouts/agm-map-sheet/atlas { "aoi":[[−76.5,38.9],[−76.0,38.9],[−76.0,39.2],[−76.5,39.2]], "sheetSizeDeg":0.25 } → { "seriesId":"atlas-a1b2c3d4", "cols":3, "rows":2, "sheets":[{ "sheetId":"…-sheet-001", "sheetNumber":1, "col":1, "row":1, "extent":[−76.5,38.75,−76.25,39.0] }, …] }
Built on the reporting + exploitation stack — the analyst's finished product, in their unit's format.
Get Started