geotiff - GeoTrellis:为在 GeoTrellis 之外托管的云优化 GeoTIFF 创建属性存储
问题描述
云优化 GeoTiff 的战略性能优势是能够检索给定范围的栅格数据,同时仅从远程资源中提取概览和字节范围。
在 Python 中,vsicurl 和 gdal.Warp 抽象使得只需一个 URL 和一个范围就可以做到这一点:
vsicurl_url = '/vsicurl/' + url_to_cog
gdal.Warp(output_file,
vsicurl_url,
dstSRS = 'EPSG:4326',
cutlineDSName = jsonFileSliceAoi,
cropToCutline = True)
新创建的COG Spark 示例解释了如何使用在上一步中对 RDD 进行平铺而创建的 AttributeStore 来获得 Raster[Tile]:
//tiling an RDD and writing out the catalog
...
// Create the reader instance to query tiles stored as a Structured COG Layer
val reader = FileCOGLayerReader(attributeStore)
// Read layer at the max persisted zoom level
// Actually it can be any zoom level in this case from the [0; zoom] values range
val layer: TileLayerRDD[SpatialKey] = reader.read[SpatialKey, Tile](LayerId("example_cog_layer", zoom))
// Let's stitch the layer into tile
val raster: Raster[Tile] = layer.stitch
GeoTrellis 中关于 COG 支持的示例、发行说明和文档都确认支持平铺数据并使其可供客户端作为 COG 使用。GeoTrellis 是否也支持充当客户端的能力?
FileCOGLayerReader
如果您没有预先存在的目录,但有一个支持范围请求的 URL,您如何创建一个?
解决方案
我们目前有两个与 COG 相关的概念:
- 第一个是 GeoTrellis COG 图层 - 与 GeoTrellis avro 图层非常相似,但我们不是存储单独的 avro 切片,而是将切片存储为 tiff 的一部分。要准备这样的目录,您必须通过摄取过程来构建数据并将其重新格式化为 GeoTrellis 就绪格式。那将是一个由部分金字塔组成的层,其中每个部分金字塔由一组 COGS 表示。
- 第二个是 GeoTrellis 非结构化 COG 层:https ://github.com/locationtech/geotrellis/blob/master/doc-examples/src/main/scala/geotrellis/doc/examples/spark/COGSparkExamples.scala#L114
最后一个允许您以某种方式将有关数据集的元数据收集到(范围,URI)元组中,并提供查询它的接口。熟悉我发布给你的例子,让我知道它是否适合你。
顺便说一句,RasterFoundry 使用非结构化 COG 图层作为其切片服务器。
推荐阅读
- reactjs - 反应钩子中的同时异步 API 调用
- mysql - 我如何在不使用 ALL 的情况下编写这个?
- reactjs - react-hooks 查询和 setState 导致 500 错误
- angular - 使用@ngrx/entity 的ngrx 实体动态集
- php - Laravel Forge 调度程序中的 foreach 循环不起作用
- mysql - 在 node.js 的目标表中未更新 INNER JOIN
- assembly - 意外覆盖通用寄存器
- python-3.x - 如何绘制由 groupby 生成的元组列表
- vue.js - 如何在 vue 上循环获取月时刻 js?
- excel - 如何将数据列表从一个工作表复制到另一个工作表并隔开