oxigdal-geotiff
Pure Rust GeoTIFF and Cloud Optimized GeoTIFF (COG) driver.
Overview
oxigdal-geotiff provides comprehensive support for reading and writing GeoTIFF files, with special optimizations for Cloud Optimized GeoTIFFs (COGs).
Features
- ✅ Classic TIFF and BigTIFF support
- ✅ Cloud Optimized GeoTIFF (COG) reading and writing
- ✅ Tiled and stripped layouts
- ✅ Multiple compression schemes (DEFLATE, LZW, ZSTD, JPEG)
- ✅ All standard data types (UInt8-UInt64, Float32/64, Complex)
- ✅ Overview/pyramid levels
- ✅ GeoKeys for coordinate reference systems
- ✅ HTTP range request optimization
Installation
[]
= "0.1"
# With specific compression support:
= { = "0.1", = ["deflate", "lzw", "zstd"] }
Features
deflate(default): DEFLATE/zlib compressionlzw(default): LZW compressionzstd: ZSTD compression (better compression ratio)jpeg: JPEG compression (feature-gated; enablesjpeg-decoderandjpeg-encoder)async: Async I/O support
Quick Start
Reading a GeoTIFF
use GeoTiffReader;
use FileDataSource;
let source = open?;
let reader = open?;
println!;
println!;
println!;
// Read a tile
let tile_data = reader.read_tile?;
Reading a Cloud Optimized GeoTIFF (COG)
use CogReader;
use FileDataSource;
let source = open?;
let reader = open?;
// Access metadata
println!;
println!;
println!;
// Read from specific overview level
let level = 1; // First overview (half resolution)
let tile = reader.read_tile?;
Writing a GeoTIFF
use ;
use RasterBuffer;
use ;
use File;
let buffer = zeros;
let bbox = new?;
let geo_transform = from_bounds?;
let options = GeoTiffWriterOptions ;
let file = create?;
let writer = new?;
writer.write_buffer?;
Writing a Cloud Optimized GeoTIFF (COG)
use ;
use Compression;
let options = CogWriterOptions ;
let file = create?;
let writer = new?;
writer.write_buffer?;
Compression Options
use Compression;
// Available compression methods:
None // No compression
Deflate // DEFLATE/zlib (good all-around)
Lzw // LZW (good for categorical)
Zstd // ZSTD (best compression)
Jpeg // JPEG (lossy, for RGB imagery)
COG Validation
use ;
use FileDataSource;
let source = open?;
let tiff = parse?;
let validation = validate_cog;
if validation.is_valid else
GeoKeys
Read coordinate reference system information:
use GeoKeyDirectory;
let geo_keys = from_ifd?;
if let Some = geo_keys.epsg_code
if let Some = geo_keys.model_type
Performance
HTTP Range Requests
COGs are optimized for cloud storage with HTTP range requests. Only needed tiles are fetched:
use HttpDataSource;
// Read from cloud storage
let source = new.await?;
let reader = open?;
// Only fetches the specific tile bytes
let tile = reader.read_tile?;
Tile Caching
For repeated access, use a caching layer:
use ;
let source = open?;
let cached = new; // 100MB cache
let reader = open?;
Examples
COOLJAPAN Policies
- ✅ Pure Rust - No C dependencies
- ✅ No unwrap() - Comprehensive error handling
- ✅ Zero-copy where possible
- ✅ Production ready
License
Licensed under Apache-2.0.
Copyright © 2025 COOLJAPAN OU (Team Kitasan)