云优化 GeoTIFF 通过内部布局支持按需读取
说明内部瓦片、概览、目录顺序和 HTTP Range 如何减少远程栅格读取量,并识别服务端配置边界。
云优化 GeoTIFF 通过内部布局支持按需读取
Cloud Optimized GeoTIFF 是遵循特定内部组织的 GeoTIFF。它利用内部瓦片、缩减分辨率子文件和 HTTP Range,使客户端只读取需要的字节,而不必下载整幅栅格。云优化描述访问布局,不要求文件一定存放在某个云厂商。
普通 GeoTIFF 不一定适合远程访问
GeoTIFF 保存像元和地理参考,但像元可以按条带或不利于随机读取的顺序组织。读取小窗口时,客户端可能需要大量跨文件请求。
COG 把像元组织为内部 tile,使相邻区域对应集中的字节范围。tile 大小影响请求数、解压量和缓存效率。仅改扩展名或上传对象存储不会改变布局。
概览支持低分辨率浏览
浏览整幅大图不需要读取全分辨率像元。内部概览保存逐级降采样版本,客户端选择接近目标尺度的一层。
连续影像可用平均或插值,分类数据通常使用最近邻或众数,质量位不能做普通均值。缺少概览时,低缩放也可能读取大量最高分辨率数据。
概览不是新真实分辨率,定量分析要知道读取了哪层。层级过多还会增加文件大小和生成时间。
目录与字节顺序是标准的一部分
TIFF 图像目录记录 tile 偏移和元数据。COG 要求关键目录和数据按有利于流式访问的顺序排列,使客户端用少量范围请求定位目标。
有内部 tile 不等于满足 COG。目录位置、概览顺序和块偏移都要验证。生成后原位修改元数据也可能破坏布局,应重新生成并校验。
服务端必须支持 Range
客户端通过 Range 请求指定字节区间,服务端要正确返回部分内容。代理若忽略 Range 总是返回整文件,COG 优势会消失。
文件内部压缩与 HTTP 整体压缩不同。对大 TIFF 再整体 gzip 会妨碍随机访问。跨域浏览还需要 CORS,缓存需要稳定 ETag 或版本 URL。
应从真实外部网络检查请求数、传输字节和状态码,不能只在本地文件系统验证速度。
压缩需要平衡精度和读取成本
无损压缩适合分类与定量值。有损压缩减小影像,但会改变像元和边缘,不适合所有分析。
每次读取通常解压整个 tile。tile 太大会读取多余数据,太小则增加目录和请求开销。预测器、数据类型和无数据值也影响压缩率。
多波段可按像元交错或波段分离。常一起显示 RGB 时前者有利,只读取单波段时后者可能减少无关传输。布局要根据主要访问模式选择。
COG 更适合不可变发布
频繁原位更新会破坏偏移布局和缓存一致性。通常应生成新文件,以版本化对象替换,并通过清单原子切换。
流水线先写临时位置,完成结构和内容验证后再发布。同名覆盖可能让缓存继续返回旧内容,不可变路径更容易回滚。
验证同时检查结构与地理内容
结构验证检查目录、tile、概览和偏移顺序;内容验证检查 CRS、变换、尺寸、无数据、统计和抽样像元。结构合格不代表地理内容正确。
还要测试不同窗口、层级和波段的远程读取,确认没有全文件下载。监控 Range 请求和传输字节能发现代理配置退化。
请求成本取决于访问形状
云对象存储不仅按字节收费,也可能按请求次数和跨区域传输计费。许多小 tile 能减少单次多读,却会增加 Range 请求;客户端并发过高还可能触发限流。应使用真实地图窗口、分析切片和批量读取基准,联合比较首字节时间、请求数、传输量与费用。
空间相邻数据若分散在大量对象中,目录查询和连接开销可能超过读取本身。单文件尺寸、tile 大小和对象划分需要一起设计。热点数据可配合 CDN,但缓存键必须包含版本和授权边界,不能让旧对象或受限影像被错误复用。
授权代理必须保留范围语义
私有影像常经签名 URL 或鉴权代理访问。代理要透传 Range、Content-Range、ETag 和条件请求,并限制可访问对象与有效期。把后端整文件取回再向客户端返回一小段,会把带宽与内存压力转移到代理,也失去 COG 的主要优势。
发布目录应记录对象版本、空间范围、波段、分辨率、时间、质量和校验和。目录指向新版本前先完成远程抽样读取,撤回时恢复旧清单而非覆盖文件。这样 COG 才是可追踪的数据产品,而不只是一个扩展名不变的对象。
COG 把成熟 GeoTIFF 重新组织为适合 Web 范围访问的资产。它降低远程读取成本,但依赖标准布局、正确服务端以及与数据语义匹配的概览和压缩。
资料依据
- Open Geospatial Consortium:Cloud Optimized GeoTIFF Standard,https://docs.ogc.org/is/21-026/21-026.html
- OSGeo GDAL Project:GDAL Documentation,https://gdal.org/en/stable/