Spatial Engine Geospatial engine · v0.1

Same files as the industry standard. Up to 9× faster. Up to 90% less RAM.

Spatial Engine converts and reprojects satellite, aerial, radar and elevation imagery: the heavy, everyday work behind maps, analytics platforms and imagery pipelines. It writes the same GeoTIFF, COG and MRF files as GDAL, the open-source toolkit the industry standardised on.

Built on the Bitruvius codecs (TurboLERC, TurboJXL, TurboWebP, TurboZstd and the rest), not the libraries GDAL links. One command-line engine, macOS and Windows.

0.00×
faster to reproject imagery, like for like
Windows. 3.48× on a Mac. Every one of 421 runs won.
0.00×
faster to convert into cloud-ready files
Windows, low-memory mode, up to 3.70×. 3.00× on a Mac.
100%
of GDAL’s RAM to reproject a 1.84 GB radar scene
The same on both machines, at the median of every codec.
0.00%
of head-to-head runs went to GDAL
3 of 8,452, all within 6%, on one codec, on one machine.

Like-for-like medians against GDAL 3.13.3 on the same machine. Benchmark run dated 2026-10-05.

The 60-second version

Every satellite image goes through this step before anyone can use it.

The incumbent

GDAL

The free, open-source toolkit the geospatial industry standardised on for reading, converting and reprojecting imagery. It is the default for these jobs, so it is the benchmark any replacement has to beat, on its own output files.

Job one

Convert

Imagery arrives in whatever shape the sensor produced. Before it can stream to a map or feed a model, it is rewritten: compressed, cut into tiles, and given zoomed-out previews. The result is a cloud-ready file (a COG).

Job two

Reproject

The Earth is round, maps are flat, and every source uses its own projection. Reprojecting re-maps every pixel onto a common grid so layers line up. It is the most compute- and memory-hungry step in the pipeline.

Why RAM is money

Memory sets the bill

Cloud servers are priced by memory. A job that needs 3 GB rents a bigger machine, and fits fewer jobs per server, than one that needs 300 MB. Small enough, and it runs on drones, satellites and field kit too.

Watch it

One 1.5 GB satellite image. Same job, same computer.

A Planet SkySat strip, 44,160 by 15,360 pixels, reprojected onto web-map coordinates by both tools. The bars replay the measured times at the same rate, so the gap you see is the gap we measured. Below each, the most memory the job held at any moment.

Planet SkySat strip, 44,160 × 15,360 RGB, 1.51 GiB, reprojected UTM 15N to Web Mercator, bilinear. One process each, wall clock to wall clock, same container, tile size and codec. Replayed at a fixed rate so both lanes keep their measured ratio. Source: Spatial Engine vs GDAL brief, 2026-10-05, §4.1.

No cherry-picking

8,452 head-to-heads. GDAL won 3.

Ten production files from ICEYE, Planet and USGS, from a 17 MB preview to a 1.84 GB radar scene. Every compression option both tools support, both file layouts, two tile sizes, every core and a single core, on a Windows workstation and a Mac laptop. Each square below is one of those runs.

Spatial Engine finished first GDAL finished first
Every like-for-like cell: ten production files, every codec both tools write, GeoTIFF and COG, 256 and 512 tiles, both of our modes, all cores and one thread, copy and reprojection, against GDAL 3.13.3 on the same machine. LERC is v4 against v4 and JPEG XL is effort 5 against effort 5. Windows cells within 1.25× of parity were re-run five times; the Mac ran each cell on a quiet machine. Source: Spatial Engine vs GDAL brief, 2026-10-05, §2 and §7.

The whole test set, end to end.

Add up every run and the gap widens, because the biggest files are where we pull furthest ahead. On the Windows workstation, reprojecting the whole set like for like took GDAL 74 minutes and Spatial Engine under 8.

GDAL 3.13.3 Spatial Engine
Windows x64 · Intel Core Ultra 9 285HX
macOS · Apple M3 Max
Wall time summed over every matched all-core cell: ten files, every codec, GeoTIFF and COG, both tile sizes. Large files dominate a sum, which is why these run higher than the per-cell medians (4.44× and 3.48× exact). Each machine against its own GDAL, on its own scale. Source: Spatial Engine vs GDAL brief, 2026-10-05, §2.

Speed and memory, together

Faster and leaner, on every file.

Most speed-ups cost memory. This one doesn't. Each dot is one of the ten files on one machine; up and to the right is better on both counts. GDAL is the grey square. No file lands where GDAL would be faster or lighter.

Windows x64 macOS GDAL Dot size = file size
Exact reprojection (--exact against gdalwarp -et 0), all cores, 256 tiles. Each dot is one file on one machine: the median over every codec and both containers, against GDAL on that machine. Speed is GDAL's wall time over ours; memory is our peak over GDAL's. Source: Spatial Engine vs GDAL brief, 2026-10-05, §4.

Memory

GDAL's memory grows with the file. Ours grows incrementally.

GDAL's memory grows with the image: bigger scene, bigger machine. Spatial Engine's grows only incrementally: on the Mac, the two largest files (1.84 GB and 1.51 GB) cost it 376 and 381 MiB at the median, where GDAL climbs past 3 GB. That is the line between a job that fits on a small cloud instance and one that needs a large one.

GDAL 3.13.3 Spatial Engine
Complex SAR 1.84 GiB
3,265 → 224 MiB
14.6× less memory, 6.33× faster
SkySat strip 1.51 GiB
2,321 → 233 MiB
9.96× less memory, 5.22× faster
Analytic, large 989 MB
1,834 → 201 MiB
9.12× less memory, 4.41× faster
One exact-reprojection cell per file: GeoTIFF, 256 tiles, all cores, high-performance mode, LERC v4 unless the tooltip names another codec. Squares are drawn to scale by area. Eight of the ten files have such a cell in the brief; the two Planet scenes do not. Each machine against its own GDAL. Source: Spatial Engine vs GDAL brief, 2026-10-05, §4.

Smaller instances, more jobs per server

Cloud providers price by CPU and RAM, and memory-heavy machines cost more per CPU. On Windows, GDAL's reprojection of the SkySat strip peaks at 2.8 GB, so every concurrent job needs a 4 GB slot. Ours is 338 MB at the median and 810 MB at worst.

Ten jobs: 3 to 4 GB, not 20 to 30

Ten concurrent GDAL reprojections of 1.5 GB scenes need 20 to 30 GB of RAM. Ten of ours need 3 to 4 GB. For a multi-tenant imagery service, that is the hardware budget.

No out-of-memory failures on the big scene

A pipeline sized for GDAL on 1.5 GB strips breaks on the first 3 GB one. Ours grows incrementally, so the next, larger sensor doesn't force a re-architecture.

Edge and onboard

Drones, satellites, vehicles and field kits run on 4 to 16 GB shared with everything else. A reprojection that wants 3 GB for itself is not deployable there; one that wants 300 MB is.

Two modes, one engine

A low-memory mode GDAL doesn't have, at the same speed.

High-performance mode trades memory for speed. Streaming mode keeps memory low on any size of file. They write identical files, and streaming costs 0 to 6% in time. The engine switches to streaming on its own for large files.

GDAL 3.13.3Spatial Engine, high-performance modeSpatial Engine, low-memory (streaming) mode

Low-memory mode: 9.03× faster than GDAL in 246 MiB instead of 2,357.

Converting the 1.51 GiB SkySat strip to a LERC v4 GeoTIFF, all cores. High-performance holds the image in memory; streaming reads windows and keeps one tile per worker in flight. Same bytes from both. Across the corpus streaming costs 0–6% of wall time at the median. Source: Spatial Engine vs GDAL brief, 2026-10-05, §4.1 and §6.3.

By data type

What it means for the files you have.

Ten files, six kinds of data, from three of the industry's suppliers. The bigger the file, the bigger the lead.

Windows x64 macOS Reach with our default settings
Solid: like for like, both tools exact to the pixel (--exact against gdalwarp -et 0), all cores. Translucent: the best median with our default settings, whose grid holds the projection to 1/8 pixel (gdalwarp's own default tolerance) and is set against GDAL's exact warp, so it flatters us. The Mac's 512-tile figures paired with GDAL runs on a shared machine; read its default-grid reach as an upper bound. Medians over every codec and both containers; each machine against its own GDAL. Source: Spatial Engine vs GDAL brief, 2026-10-05, §4.
Optical RGB, 8-bit

Satellite and aerial photos

“A 1.5 GB SkySat strip, reprojected exactly, in 4.0 seconds and 233 MB. GDAL: 21 seconds and 2.3 GB.”

Reproject 6.93× Win · 3.23× Mac RAM 0.12× · 0.12×

Imagery vendors, basemap producers, tile-serving teams. Line measured on Windows x64.

Multispectral, 16-bit

Crop, forest and climate imagery

“A gigabyte of 16-bit analytic imagery reprojected exactly in 1.6 seconds and 201 MB. GDAL wanted 7.3 seconds and 1.8 GB.”

Reproject 4.71× Win · 4.49× Mac RAM 0.12× · 0.13×

Analytics, agriculture, forestry, ML pipelines. Line measured on Windows x64.

Complex SAR

Raw radar for interferometry

“A 1.8 GB complex SAR scene reprojected exactly in 232 MB of RAM. GDAL needs 3.2 GB for the same job, and takes five times as long.”

Reproject 5.97× Win · 2.47× Mac RAM 0.10× · 0.10×

SAR vendors, interferometry, defence processing chains. Line measured on Windows x64.

SAR amplitude, 16-bit

Radar that sees through cloud and dark

“A 739 MB SAR amplitude scene reprojected exactly in 450 milliseconds and 316 MB, against GDAL’s 2 seconds and 1.9 GB.”

Reproject 3.38× Win · 3.42× Mac RAM 0.19× · 0.19×

SAR vendors, maritime and defence analytics. Line measured on macOS, Apple M3 Max.

Elevation, Float32

3D terrain and flood models

“Same DEM, zero error, 29 MB instead of 71 with lossless LERC v6. GDAL reads it.”

Reproject 2.86× Win · 4.42× Mac RAM 0.49× · 0.47×

DEM, DSM, bathymetry, hydrology and flood modelling. Line measured on Both machines.

SAR quicklook, 8-bit

Preview images, by the thousand

“Even a 17 MB quicklook reprojects exactly twice as fast, in half the memory.”

Reproject 2.59× Win · 2.31× Mac RAM 0.46× · 0.49×

Browse, tasking feedback and quicklook catalogues. Line measured on Both machines.

Chips: like-for-like reprojection, median of every codec for that file, and peak RAM as a fraction of GDAL's, on each machine.

Every codec

Whatever compression you use, it's faster.

Imagery is stored with one of a dozen compression schemes, each with its own trade-off between size and speed. Customers don't switch theirs to suit a vendor, so we measured every one both tools support. The weakest cell on the board is still 1.24× faster.

Speed against GDAL per compression codec, for converting and reprojecting on Windows x64 and macOS. Peak memory against GDAL in brackets. Every value is above 1×.
CodecWindows x64macOS
ConvertConvert, low-memoryReprojectConvertConvert, low-memoryReproject
LERC v43.05× 0.91× RAM2.89× 0.35× RAM4.81× 0.34× RAM3.25× 0.93× RAM3.17× 0.50× RAM4.10× 0.22× RAM
LERC v4 + Deflate2.94× 0.87× RAM3.10× 0.39× RAM4.00× 0.38× RAM2.39× 0.92× RAM2.44× 0.61× RAM3.01× 0.22× RAM
LERC v4 + ZSTD2.66× 1.07× RAM2.62× 0.57× RAM4.27× 0.62× RAM2.72× 1.05× RAM2.57× 0.76× RAM3.64× 0.30× RAM
Deflate2.75× 0.92× RAM3.18× 0.44× RAM3.36× 0.35× RAM2.13× 0.97× RAM2.37× 0.61× RAM3.12× 0.21× RAM
ZSTD2.18× 0.96× RAM2.31× 0.37× RAM3.87× 0.27× RAM2.50× 0.94× RAM2.46× 0.45× RAM3.21× 0.24× RAM
LZW2.99× 0.96× RAM3.14× 0.40× RAM4.01× 0.31× RAM2.61× 0.96× RAM2.57× 0.65× RAM3.09× 0.21× RAM
LZMA6.72× 0.88× RAM6.37× 0.44× RAM5.93× 0.40× RAM5.02× 0.90× RAM4.95× 0.47× RAM4.39× 0.37× RAM
PackBits2.50× 1.01× RAM2.81× 0.52× RAM4.65× 0.34× RAM2.98× 1.02× RAM3.26× 0.65× RAM3.97× 0.22× RAM
Uncompressed2.49× 1.04× RAM2.88× 0.56× RAM4.75× 0.25× RAM3.00× 1.06× RAM4.00× 0.62× RAM4.49× 0.21× RAM
JPEG4.62× 0.90× RAM5.17× 0.44× RAM4.23× 0.25× RAM3.26× 0.95× RAM3.34× 0.41× RAM3.50× 0.18× RAM
WebP3.83× 0.88× RAM3.82× 0.16× RAM4.42× 0.11× RAM1.24× 0.92× RAM1.25× 0.22× RAM2.24× 0.12× RAM
WebP lossless4.49× 0.83× RAM4.37× 0.29× RAM8.49× 0.13× RAM4.00× 0.88× RAM3.91× 0.32× RAM5.52× 0.12× RAM
JPEG XL5.25× 0.85× RAM5.56× 0.54× RAM4.66× 0.48× RAM3.37× 0.82× RAM3.31× 0.47× RAM3.31× 0.35× RAM
Codecs are the compression schemes inside an image file. Median over all ten files, both tile sizes and both containers, all cores; "Convert" is high-performance mode, "low-memory" is streaming, "Reproject" is exact against exact. Under each speed, our peak RAM as a fraction of GDAL's. LERC is v4 against GDAL's v4; JPEG XL is lossless at effort 5 on both sides; WebP is lossy at quality 75. Deflate is the one codec here whose encoder Bitruvius did not build. Source: Spatial Engine vs GDAL brief, 2026-10-05, §5.1.

The big numbers

Where the gap gets enormous.

Everything above is a like-for-like median, the figure we stand behind in diligence. These are the largest gaps in the same run, each labelled with exactly what it measures.

9.39×
Whole corpus, reprojected exactly
Every matched exact cell summed end to end on Windows: 473 s against GDAL’s 4,440 s. Like for like.
13.3×
1.5 GB SkySat strip, reprojected
Our default settings (accurate to 1/8 pixel) against GDAL’s exact warp, Windows: 1.5 s against 19.9 s, in 379 MiB against 2,344.
10.6×
Writing that strip to COG
Low-memory mode on Windows, best tile-size median, at 0.13×–0.19× of GDAL’s peak memory.
25.19×
JPEG XL, reprojected exactly
The 1.49 GiB visual mosaic on Windows: 10.2 s against that machine’s GDAL at 257.8 s. Both lossless, both effort 5.
48.48×
PNG into MRF, all cores
GDAL’s MRF driver compresses on one thread; ours uses every core. Engine for engine, one thread each, it is 4.85×.

Elevation, head to head

Faster to write, half the RAM to reproject, 41% of the size.

Elevation models drive flood, line-of-sight and 3D work, and they store exact decimal heights. Here is one, run through both tools on every axis that costs money. Writing the very same LERC v4 file GDAL writes, we finish first. Reprojecting it, we use under half the memory. And our default LERC v6, which GDAL reads but cannot write, stores the same heights with zero error in 41% of the space.

GDAL 3.13.3 Spatial Engine
1.70×
faster to write the same LERC v4 file GDAL writes
122 ms against 208 ms
2.14×
less memory to reproject it, and 1.58× faster
77 MiB against 165 MiB
41%
of the size, with our default LERC v6 and zero error
28.8 MiB against 71.0 MiB
Head to head, same file, same codec

Across every codec on this file: writing 2.33×–2.84× faster in low-memory mode; reprojecting 2.86× faster at 0.49× GDAL's memory.

File size, lossless
JPEG XL
26.3 MiB
LERC v6 (our default)GDAL cannot write this
28.8 MiB
Deflate
49.2 MiB
LERC v4 (GDAL’s and ours)
71.0 MiB
Raw, uncompressed
84.0 MiB

Same codec, same size: our lossless output matches GDAL's bytes at the median. The gap is LERC v6, which GDAL reads but cannot write.

A 1-metre USGS 3DEP elevation model: 5,670 × 3,274 heights in Float32, 54 MB on disk. Writing is a tiled GeoTIFF, all cores; reprojecting is exact to the pixel at 256 tiles. JPEG XL is lossless at effort 5 on both sides; its row comes from the per-file JPEG XL table, which records time but not memory. On a file this small our fixed start-up cost puts write memory at about GDAL's; the saving shows when reprojecting. Sizes are 512-tile GeoTIFFs. LERC v4, the only version GDAL's writer produces, has no lossless path for floating-point heights. Source: Spatial Engine vs GDAL brief, 2026-10-05, §4.3 and §5.4.

File layouts

  • GeoTIFF
  • Cloud-Optimized GeoTIFF (COG), with previews built in the same pass
  • MRF (Esri and NASA tile stores)
  • BigTIFF past 4 GiB

Codecs

LERC v4 / v5 / v6 · LERC + Deflate · LERC + ZSTD · JPEG XL · WebP (lossy and lossless) · JPEG · LZMA · ZSTD · Deflate · LZW · PackBits · PNG (into MRF) · Uncompressed

LERC v6 is the default: the version Esri's current library writes, which GDAL reads but cannot write. Lossless outputs are the same size as GDAL's, 1.000× at the median.

Drops into the pipeline

Two commands change; everything else stays on GDAL. Every output opens in GDAL, lossless outputs reproduce the source checksums, and macOS and Windows write the same output. Licensed offline, with no network call.

How this was measured

  • Machines: Apple M3 Max (16 cores) and Intel Core Ultra 9 285HX (24 logical processors), each compared with GDAL 3.13.3 on the same machine. The two are never divided into one ratio.
  • One process against one process, wall clock to wall clock, writing the same file layout at the same tile size with the same codec settings. Peak memory is the process's maximum resident set.
  • Like for like means reprojection exact to the pixel on both sides (--exact against gdalwarp -et 0), LERC v4 against GDAL's LERC v4, and lossless JPEG XL at effort 5 on both sides. "Our default settings" hold the projection to 1/8 pixel, gdalwarp's own default tolerance, and are compared with GDAL's exact run; they are always labelled.
  • Windows figures for every codec except JPEG XL come from the build before an allocator change in the next release, which measured 3% faster and used 13% more peak memory at the median on all cores.
  • Measured on macOS and Windows only; no Linux numbers are published until a Linux run exists. On the Mac, reprojection at 512-pixel tiles and JPEG XL reprojection paired with GDAL runs on a shared machine, so read those ratios as upper bounds. Our lossless JPEG XL files are 3%–5% larger than GDAL's at the same effort.
  • Speed is GDAL's wall time divided by ours; memory is our peak divided by GDAL's. Source: Spatial Engine vs GDAL brief and golden-corpus report, dated 2026-10-05.

Bring five of your files.

A pilot runs both tools on your own data, on your own machine, in a day: same file layout, same codec, same grid. You keep the numbers.

Documentation

Spatial Engine has its own license, and encoding also needs a codec license. about pricing.

GDAL is an open-source project, named solely to identify the software compared. Esri, ArcGIS and LERC are trademarks of Environmental Systems Research Institute, Inc. Planet, PlanetScope and SkySat are trademarks of Planet Labs PBC; ICEYE is a trademark of ICEYE Oy; the elevation sample is USGS 3D Elevation Program data. These names identify the sample files measured, and no affiliation, sponsorship, endorsement or customer relationship is implied. Apple, macOS, Intel, Intel Core and Windows are trademarks of their respective owners and identify the test machines. Performance comparisons reflect our own measurements under the stated methodology; results vary by workload and hardware. Full third-party notices: Attributions.