Cloud-Optimized GeoTIFF (COG)

Native support for streaming large raster datasets directly from cloud object storage. Reduce latency, eliminate full downloads, and scale spatial serving effortlessly.

What is Cloud-Optimized GeoTIFF?

Cloud-Optimized GeoTIFF (COG) is an extension to the GeoTIFF format that enables efficient access to tiles and metadata over HTTP. By organizing image data in a tiled pyramid structure with internal overviews, COG allows clients to request only the exact bytes needed for a specific zoom level or viewport using HTTP range requests.

This eliminates the need to download entire multi-gigabyte files, making it ideal for serverless architectures, cloud storage (S3, GCS, Azure Blob), and high-concurrency map serving.

GeoServer Integration

GeoServer leverages the Geotools COG module to provide:

  • Transparent Coverage Store Support: Drop in COG files as if they were standard GeoTIFFs.
  • Automatic Overview Detection: No manual preprocessing required.
  • HTTP Range Request Optimization: GeoServer issues targeted byte-range requests to your storage backend.
  • Parallel Block Fetching: Concurrent loading of adjacent tiles for smooth map panning.
  • Metadata Streaming: Instant access to bounds, CRS, and statistics without full file reads.
💡

GeoServer does not modify or convert your COG files. They remain read-only and fully compliant with the official Cloud Optimized GeoTIFF specification.

Configuration Guide

Setting up a COG layer in GeoServer follows the standard Coverage Store workflow, with a few cloud-specific optimizations recommended:

  1. Create Coverage Store: Point to your remote COG URL (S3, HTTP, or mounted storage).
  2. Layer Publishing: GeoServer auto-detects tiled structure and overviews.
  3. Storage Adapter: Enable cloud storage adapter for AWS S3 / Azure Blob / GCS.
"coverage_store": { "type": "GeoTIFF", "url": "s3://bucket-name/path/to/satellite-cog.tif", "cog_enabled": true, "cloud_adapter": { "provider": "AWS", "range_requests": true, "parallel_reads": 4 } }

Layer Parameters

  • Interpolate: Recommended for continuous data (DEM, imagery). Disable for categorical data.
  • NumThreads: Controls concurrent block reads. Default: 4.
  • Strict: Validates COG spec compliance. Enable for debugging.

Performance Tuning

COG performance depends heavily on internal tile structure and cloud network configuration. Optimize with these settings:

ParameterRecommended ValueImpact
Internal Block Size256x256 or 512x512Aligns with standard WMTS tile grids
CompressionDEFLATE or ZSTDBalances transfer size & decode speed
Overviews4x4, 16x16, 64x64Ensures fast low-zoom rendering
Cache-Controlpublic, max-age=31536000Leverages CDN/edge caching effectively

COG vs Traditional GeoTIFF

FeatureTraditional GeoTIFFCloud-Optimized GeoTIFF
Access PatternSequential / Full fileRandom access via HTTP ranges
Cloud Storage FriendlyNo (slow, expensive)Yes (pay-per-byte)
Overview GenerationExternal or manualEmbedded internal overviews
GeoServer LatencyHigh on first loadSub-100ms tile delivery
Concurrent RequestsFile locking / bottleneckParallel block fetching

Best Practices

  • Pre-tile in the cloud: Use gdal_translate -co TILED=YES -co BLOCKXSIZE=256 before ingestion.
  • Use CDN: Place CloudFront, Cloudflare, or Azure CDN in front of your COG storage.
  • Enable ZSTD: Better compression ratios than DEFLATE with comparable decode speeds.
  • Monitor Byte Requests: Track S3 206 responses to verify range request optimization is active.
  • Avoid COG for small files: Under 100MB, traditional GeoTIFF may perform equally well with less complexity.

Frequently Asked Questions

Does GeoServer convert COG files automatically?
No. GeoServer reads COG files natively without conversion. Ensure your source files comply with the COG specification before ingestion.
Can I use COG with WMS and WMTS?
Yes. GeoServer serves COG data through both WMS and WMTS endpoints. WMTS is recommended for optimal tile grid alignment and caching.
What cloud providers are supported?
AWS S3, Google Cloud Storage, and Azure Blob Storage are fully supported via standard HTTP(S) or native SDK adapters. Any provider supporting RFC 7233 range requests works out of the box.
How does COG handle large DEMs or LiDAR derivatives?
COG excels with large rasters. Use 512x512 blocks and ZSTD compression for elevation models. GeoServer will stream only the requested pyramid level, keeping memory usage minimal.

Ready to Stream Your Rasters?

Deploy COG-powered layers in minutes. Get infrastructure templates, performance guides, and expert support.

View Full Documentation Contact Engineering