云优化 GeoTiff 的战略性能优势是能够检索给定范围的栅格数据,同时仅从远程资源中提取概视图和字节范围。
在 Python 中,vsicurl 和 gdal。扭曲抽象使得仅使用URL和范围就可以做到这一点:
vsicurl_url = '/vsicurl/' + url_to_cog
gdal.Warp(output_file,
vsicurl_url,
dstSRS = 'EPSG:4326',
cutlineDSName = jsonFileSliceAoi,
cropToCutline = True)
新推出的 COG Spark 示例解释了如何使用在上一步中对 RDD 进行切片而创建的 AttributeStore 到达栅格 [切片]:
//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 是否也支持充当客户端的功能?
如果您没有预先存在的目录,但确实有一个支持范围请求的 URL,如何创建FileCOGLayerReader
?
我们目前有两个与COG相关的概念:
- 第一个是GeoTrellis COG层 - 与GeoTrellis avro层非常相似,但不是存储单独的avro瓷砖,而是将瓷砖存储为tiff(s(的一部分。要准备此类目录,您必须经历一个摄取过程来构建数据并将其重新格式化为 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层作为他们的切片服务器。