<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Overview on async-geotiff</title><link>https://async-geotiff-rs.pages.dev/docs/overview/</link><description>Recent content in Overview on async-geotiff</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Mon, 31 Aug 2026 11:52:18 +0800</lastBuildDate><atom:link href="https://async-geotiff-rs.pages.dev/docs/overview/index.xml" rel="self" type="application/rss+xml"/><item><title>What is async-geotiff?</title><link>https://async-geotiff-rs.pages.dev/docs/overview/what-is-async-geotiff/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://async-geotiff-rs.pages.dev/docs/overview/what-is-async-geotiff/</guid><description>&lt;p&gt;&lt;code&gt;async-geotiff&lt;/code&gt; is a Rust library for turning Cloud-Optimized GeoTIFFs (COGs)&#10;into styled XYZ map tiles. It reads only the byte ranges needed for a tile,&#10;decodes native TIFF blocks, optionally reprojects them, applies a rendering&#10;style, and encodes the result.&lt;/p&gt;&#10;&lt;h2 id="capabilities"&gt;Core capabilities&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Async COG access over HTTPS or any caller-configured &lt;code&gt;object_store&lt;/code&gt; backend.&lt;/li&gt;&#10;&lt;li&gt;Shared, byte-bounded caching of decoded native TIFF blocks.&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;WebMercatorQuad&lt;/code&gt; (EPSG:3857) and &lt;code&gt;WorldCRS84Quad&lt;/code&gt; (EPSG:4326) tile grids.&lt;/li&gt;&#10;&lt;li&gt;U8, U16, I16, U32, I32, F32, and F64 source pixels.&lt;/li&gt;&#10;&lt;li&gt;Nearest, bilinear, cubic, cubic-spline, Lanczos, and average resampling.&lt;/li&gt;&#10;&lt;li&gt;Rescaling, colormaps, RGB composition, color formulas, and arithmetic band math.&lt;/li&gt;&#10;&lt;li&gt;PNG output, plus feature-gated WebP and JPEG output.&lt;/li&gt;&#10;&lt;li&gt;Multi-asset mosaics backed by MosaicJSON, STAC, or a custom source.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="boundaries"&gt;What the library deliberately does not own&#10;&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;No GDAL runtime.&lt;/strong&gt; TIFF I/O uses &lt;code&gt;async-tiff&lt;/code&gt; and &lt;code&gt;object_store&lt;/code&gt;. The default&#10;&lt;code&gt;proj&lt;/code&gt; feature uses the system &lt;code&gt;libproj&lt;/code&gt; library only for coordinate&#10;transformations that do not have a built-in fast path.&lt;/p&gt;</description></item><item><title>Architecture</title><link>https://async-geotiff-rs.pages.dev/docs/overview/architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://async-geotiff-rs.pages.dev/docs/overview/architecture/</guid><description>&lt;p&gt;The library separates asynchronous range I/O from CPU-heavy decode, warp,&#10;render, and encode work. Applications compose the public layers they need.&lt;/p&gt;&#10;&lt;pre class="td-mermaid-source"&gt;&lt;code class="language-mermaid"&gt;flowchart LR&#10; Client[HTTP client or Rust caller] --&amp;gt; Style[TileStyle]&#10; Client --&amp;gt; Tiler[Tiler]&#10; Tiler --&amp;gt; Grid[TileMatrixSet]&#10; Tiler --&amp;gt; Reader[CogReader]&#10; Reader --&amp;gt; Store[object_store / HTTP range reads]&#10; Reader &amp;lt;--&amp;gt; Cache[Shared BlockCache]&#10; Reader --&amp;gt; CPU[CpuLimiter &amp;#43; spawn_blocking]&#10; CPU --&amp;gt; Warp[Warp and resampling]&#10; Warp --&amp;gt; Render[Rescale / colormap / composite]&#10; Style --&amp;gt; Render&#10; Render --&amp;gt; Encode[PNG / WebP / JPEG]&#10; Encode --&amp;gt; Result[Option&amp;amp;lt;Bytes&amp;amp;gt;]&#10; Mosaic[MosaicTiler] --&amp;gt; ReaderPool[ReaderPool]&#10; ReaderPool --&amp;gt; Reader&#10; Mosaic --&amp;gt; Render&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="components"&gt;Main components&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Component&lt;/th&gt;&#10; &lt;th scope="col"&gt;Responsibility&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;CogReader&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;Open a COG, read metadata and overviews, select and stitch native blocks, and sample points or windows.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;BlockCache&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;Share decoded native blocks across readers under one byte budget; coalesce concurrent cold fetches.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;Tiler&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;Plan a tile, choose an overview, read the source window, warp when required, and render encoded bytes.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;TileStyle&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;Parse and validate titiler-style query parameters before rendering.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;MosaicTiler&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;Find assets, open readers through a pool, warp each asset, reduce overlapping pixels, and render once.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;CpuLimiter&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;Bound CPU-heavy blocking work across readers and tilers.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="tile-flow"&gt;Tile data flow&#10;&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;code&gt;TileCoord&lt;/code&gt; identifies a tile in a supported TileMatrixSet.&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;Tiler&lt;/code&gt; computes the destination bounds and checks whether they intersect&#10;the source dataset.&lt;/li&gt;&#10;&lt;li&gt;It selects an overview whose ground resolution is appropriate for the&#10;requested tile.&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;CogReader&lt;/code&gt; loads missing native blocks through range requests and reuses&#10;cached blocks where possible.&lt;/li&gt;&#10;&lt;li&gt;Same-CRS tiles use an affine fast path. Cross-CRS tiles use an inverse warp;&#10;EPSG:4326 ↔ EPSG:3857 has a closed-form fast path, while other pairs require&#10;the &lt;code&gt;proj&lt;/code&gt; feature.&lt;/li&gt;&#10;&lt;li&gt;The render pipeline applies nodata, scaling, optional band math, rescaling,&#10;colormaps or RGB composition, and the requested output encoder.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="concurrency"&gt;Concurrency model&#10;&lt;/h2&gt;&#10;&lt;p&gt;Tokio drives asynchronous metadata and byte-range I/O. Decode, stitch, warp,&#10;reduction, render, and encode jobs run through &lt;code&gt;spawn_blocking&lt;/code&gt; behind a&#10;semaphore. Applications can inject one &lt;code&gt;Arc&amp;lt;BlockCache&amp;gt;&lt;/code&gt; across single-COG and&#10;mosaic readers to avoid multiplying decoded-cache budgets. They can also inject&#10;one &lt;code&gt;CpuLimiter&lt;/code&gt; across non-mosaic &lt;code&gt;CogReader&lt;/code&gt;/&lt;code&gt;Tiler&lt;/code&gt; instances. Current&#10;&lt;code&gt;MosaicTiler&lt;/code&gt; uses its own internal limiter and cannot join that permit budget,&#10;so mixed traffic has no automatic process-wide CPU cap.&lt;/p&gt;</description></item></channel></rss>