Skip to content

Commit c8aab4e

Browse files
committed
saveRDDAllowAssetPerBand: return items instead of files
Open-EO/openeo-geopyspark-driver#1111
1 parent 888b673 commit c8aab4e

File tree

2 files changed

+24
-16
lines changed

2 files changed

+24
-16
lines changed

openeo-geotrellis/src/main/scala/org/openeo/geotrellis/geotiff/package.scala

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -320,12 +320,17 @@ package object geotiff {
320320
formatOptions: GTiffOptions = new GTiffOptions
321321
): JList[String] = {
322322
rdd.sparkContext.setCallSite(s"save_result(GTiff, spatial, $bandCount)")
323-
val tmp = saveRDDAllowAssetPerBand(rdd, bandCount, path, zLevel, cropBounds, formatOptions).asScala
323+
val tmp = saveRDDAllowAssetPerBand(rdd, bandCount, path, zLevel, cropBounds, formatOptions)
324324
logger.warn("Calling backwards compatibility version for saveRDDAllowAssetPerBand")
325325
// if (tmp.size() > 1) {
326326
// throw new Exception("Multiple returned files, probably meant to call saveRDDAllowAssetPerBand")
327327
// }
328-
tmp.map(_._1).asJava
328+
tmp.stream()
329+
.flatMap { item =>
330+
item.assets.values().stream()
331+
.map[String] { asset => asset.path }
332+
}
333+
.collect(Collectors.toList())
329334
}
330335

331336
//noinspection ScalaWeakerAccess
@@ -335,7 +340,7 @@ package object geotiff {
335340
zLevel: Int = 6,
336341
cropBounds: Option[Extent] = Option.empty[Extent],
337342
formatOptions: GTiffOptions = new GTiffOptions
338-
): JList[(String, Extent, JList[Int])] = {
343+
): JList[Item] = {
339344
formatOptions.assertNoConflicts()
340345
if (formatOptions.separateAssetPerBand) {
341346
val bandLabels = formatOptions.tags.bandTags.map(_("DESCRIPTION"))
@@ -395,7 +400,7 @@ package object geotiff {
395400
} else {
396401
(geoTiffResultObject.correctPath, extent, bandIndices)
397402
}
398-
}.toList.sortBy(_._1).asJava
403+
}
399404

400405
if (path.endsWith("out")) {
401406
val beforeOut = path.substring(0, path.length - "out".length)
@@ -405,12 +410,18 @@ package object geotiff {
405410
}
406411
}
407412

408-
res
413+
val assets = res.map { case (path, _, bandIndices) =>
414+
val bandNames = bandIndices.asScala.map(bandLabels.apply)
415+
s"openEO_${bandNames mkString "_"}" -> Asset(path, bandIndices)
416+
}.toMap.asJava
417+
418+
Collections.singletonList(Item(id = UUID.randomUUID().toString, datetime = null, bbox = extent, assets))
419+
// TODO: restore asset ordering?
409420
} else {
410-
val tiffPaths = saveRDDGeneric(rdd, bandCount, path, zLevel, cropBounds, formatOptions).asScala
411-
tiffPaths.map { case (tiffPath, extent) =>
412-
(tiffPath, extent, (0 until bandCount).toList.asJava)
413-
}.asJava
421+
val (tiffPath, extent) = saveRDDGeneric(rdd, bandCount, path, zLevel, cropBounds, formatOptions)
422+
val assets = Collections.singletonMap("openEO", Asset(tiffPath, (0 until bandCount).asJava))
423+
424+
Collections.singletonList(Item(id = UUID.randomUUID().toString, datetime = null, bbox = extent, assets))
414425
}
415426
}
416427

@@ -503,7 +514,7 @@ package object geotiff {
503514
def levelFor(extent: Extent, cellSize: CellSize): LayoutLevel = ???
504515
}
505516

506-
def saveRDDGeneric[K: SpatialComponent: Boundable : ClassTag](rdd: MultibandTileLayerRDD[K], bandCount: Int, path: String, zLevel: Int = 6, cropBounds: Option[Extent] = None, formatOptions: GTiffOptions = new GTiffOptions): JList[(String, Extent)] = {
517+
private def saveRDDGeneric[K: SpatialComponent: Boundable : ClassTag](rdd: MultibandTileLayerRDD[K], bandCount: Int, path: String, zLevel: Int = 6, cropBounds: Option[Extent] = None, formatOptions: GTiffOptions = new GTiffOptions): (String, Extent) = {
507518
val preProcessResult: (GridBounds[Int], Extent, RDD[(K, MultibandTile)] with Metadata[TileLayerMetadata[K]]) = preProcess(rdd,cropBounds)
508519
val gridBounds: GridBounds[Int] = preProcessResult._1
509520
val croppedExtent: Extent = preProcessResult._2
@@ -577,13 +588,10 @@ package object geotiff {
577588
case None => // do nothing
578589
}
579590

580-
Collections.singletonList((geoTiffResultObject.correctPath, croppedExtent))
581-
}finally {
591+
(geoTiffResultObject.correctPath, croppedExtent)
592+
} finally {
582593
preprocessedRdd.unpersist()
583594
}
584-
585-
586-
587595
}
588596

589597
private def getCompressedTiles[K: SpatialComponent : Boundable : ClassTag](preprocessedRdd: RDD[(K, MultibandTile)] with Metadata[TileLayerMetadata[K]],gridBounds: GridBounds[Int], compression: Compression): (collection.Map[Int, Array[Byte]], CellType, Double, Int) = {

openeo-geotrellis/src/main/scala/org/openeo/geotrellis/stac/Item.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ import geotrellis.vector.Extent
44

55
import java.util
66

7-
case class Item(id: String, datetime: String, bbox: Extent, assets: util.Map[String, Asset])
7+
case class Item(id: String, datetime: String, bbox: Extent, assets: util.Map[String, Asset]) // TODO: order assets by key?

0 commit comments

Comments
 (0)