<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>项目概览 on async-geotiff</title><link>https://async-geotiff-rs.pages.dev/zh/docs/overview/</link><description>Recent content in 项目概览 on async-geotiff</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Mon, 31 Aug 2026 11:52:18 +0800</lastBuildDate><atom:link href="https://async-geotiff-rs.pages.dev/zh/docs/overview/index.xml" rel="self" type="application/rss+xml"/><item><title>什么是 async-geotiff？</title><link>https://async-geotiff-rs.pages.dev/zh/docs/overview/what-is-async-geotiff/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://async-geotiff-rs.pages.dev/zh/docs/overview/what-is-async-geotiff/</guid><description>&lt;p&gt;&lt;code&gt;async-geotiff&lt;/code&gt; 是一个 Rust 库，用于把云优化 GeoTIFF（COG）转换为带样式的&#10;XYZ 地图瓦片。它只读取生成目标瓦片所需的字节范围，解码原生 TIFF 块，按需&#10;重投影，应用渲染样式，最后编码输出。&lt;/p&gt;</description></item><item><title>架构</title><link>https://async-geotiff-rs.pages.dev/zh/docs/overview/architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://async-geotiff-rs.pages.dev/zh/docs/overview/architecture/</guid><description>&lt;p&gt;库将异步范围 I/O 与 CPU 密集型的解码、重投影、渲染和编码工作分离。应用只需组合&#10;自己需要的公共层。&lt;/p&gt;&#10;&lt;pre class="td-mermaid-source"&gt;&lt;code class="language-mermaid"&gt;flowchart LR&#10; Client[HTTP 客户端或 Rust 调用方] --&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 范围读取]&#10; Reader &amp;lt;--&amp;gt; Cache[共享 BlockCache]&#10; Reader --&amp;gt; CPU[CpuLimiter &amp;#43; spawn_blocking]&#10; CPU --&amp;gt; Warp[重投影与重采样]&#10; Warp --&amp;gt; Render[拉伸 / 色带 / 合成]&#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;主要组件&#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;组件&lt;/th&gt;&#10; &lt;th scope="col"&gt;职责&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;打开 COG，读取元数据和概览层，选择并拼接原生块，以及采样点或窗口。&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;在统一字节预算下跨 reader 共享解码块，并合并并发冷读取。&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;规划瓦片、选择概览层、读取源窗口、按需重投影并输出编码字节。&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;在渲染前解析并校验 titiler 风格的查询参数。&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;查找资产、通过池打开 reader、重投影各资产、合并重叠像元并统一渲染。&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;限制跨 reader 与 tiler 的 CPU 密集型阻塞任务。&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;瓦片数据流&#10;&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;code&gt;TileCoord&lt;/code&gt; 在受支持的 TileMatrixSet 中定位目标瓦片。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;Tiler&lt;/code&gt; 计算目标边界并检查其是否与源数据集相交。&lt;/li&gt;&#10;&lt;li&gt;根据目标地面分辨率选择合适的概览层。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;CogReader&lt;/code&gt; 通过范围请求加载缺失的原生块，并复用缓存命中。&lt;/li&gt;&#10;&lt;li&gt;同 CRS 使用仿射快速路径；跨 CRS 使用反向重投影。EPSG:4326 与 EPSG:3857&#10;之间有闭式快速路径，其他组合需要 &lt;code&gt;proj&lt;/code&gt; feature。&lt;/li&gt;&#10;&lt;li&gt;渲染管线依次处理 nodata、scale/offset、波段计算、拉伸、色带或 RGB 合成，&#10;最后调用目标编码器。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="concurrency"&gt;并发模型&#10;&lt;/h2&gt;&#10;&lt;p&gt;Tokio 负责异步元数据与字节范围 I/O。解码、拼接、重投影、镶嵌归并、渲染和编码&#10;通过受信号量限制的 &lt;code&gt;spawn_blocking&lt;/code&gt; 运行。应用可以把一个 &lt;code&gt;Arc&amp;lt;BlockCache&amp;gt;&lt;/code&gt; 注入&#10;单 COG 与 mosaic reader，避免解码缓存预算倍增；也可以在非 mosaic 的&#10;&lt;code&gt;CogReader&lt;/code&gt;/&lt;code&gt;Tiler&lt;/code&gt; 之间注入同一个 &lt;code&gt;CpuLimiter&lt;/code&gt;。当前 &lt;code&gt;MosaicTiler&lt;/code&gt; 使用自己的内部&#10;limiter，无法加入该 permit 预算，因此混合流量没有自动的进程级 CPU 上限。&lt;/p&gt;</description></item></channel></rss>