@@ -85,10 +85,10 @@ package object geotiff {
85
85
def saveStitched (rdd : SRDD , path : String , cropBounds : Map [String , Double ], compression : Compression ): Extent =
86
86
saveStitched(rdd, path, Some (cropBounds), None , compression)
87
87
88
- def saveStitchedTileGrid (rdd : SRDD , path : String , tileGrid : String , compression : Compression ): java.util. List [(String , Extent )] =
88
+ def saveStitchedTileGrid (rdd : SRDD , path : String , tileGrid : String , compression : Compression ): JList [(String , Extent )] =
89
89
saveStitchedTileGrid(rdd, path, tileGrid, None , None , compression)
90
90
91
- def saveStitchedTileGrid (rdd : SRDD , path : String , tileGrid : String , cropBounds : Map [String , Double ], compression : Compression ): java.util. List [(String , Extent )] =
91
+ def saveStitchedTileGrid (rdd : SRDD , path : String , tileGrid : String , cropBounds : Map [String , Double ], compression : Compression ): JList [(String , Extent )] =
92
92
saveStitchedTileGrid(rdd, path, tileGrid, Some (cropBounds), None , compression)
93
93
94
94
def saveRDDTiled (rdd: MultibandTileLayerRDD [SpaceTimeKey ], path: String ,zLevel: Int = 6 ,cropBounds: Option [Extent ]= Option .empty[Extent ]): Unit = {
@@ -105,7 +105,7 @@ package object geotiff {
105
105
zLevel : Int = 6 ,
106
106
cropBounds : Option [Extent ] = Option .empty[Extent ],
107
107
formatOptions : GTiffOptions = new GTiffOptions
108
- ): java.util. List [(String , String , Extent )] = {
108
+ ): JList [(String , String , Extent )] = {
109
109
rdd.sparkContext.setCallSite(s " save_result(GTiff, temporal) " )
110
110
formatOptions.assertNoConflicts()
111
111
val ret = saveRDDTemporalAllowAssetPerBand(rdd, path, zLevel, cropBounds, formatOptions)
@@ -204,7 +204,7 @@ package object geotiff {
204
204
zLevel : Int = 6 ,
205
205
cropBounds : Option [Extent ] = Option .empty[Extent ],
206
206
formatOptions : GTiffOptions = new GTiffOptions
207
- ): java.util. List [Item ] = {
207
+ ): JList [Item ] = {
208
208
formatOptions.assertNoConflicts()
209
209
val preProcessResult : (GridBounds [Int ], Extent , RDD [(SpaceTimeKey , MultibandTile )] with Metadata [TileLayerMetadata [SpaceTimeKey ]]) = preProcess(rdd,cropBounds)
210
210
val gridBounds : GridBounds [Int ] = preProcessResult._1
@@ -299,7 +299,7 @@ package object geotiff {
299
299
}
300
300
.toMap
301
301
302
- Item (id = UUID .randomUUID().toString , datetime= timestamp, bbox = croppedExtent, assets.asJava)
302
+ Item (id = s " ${ UUID .randomUUID()} _ $timestamp " , datetime= timestamp, bbox = croppedExtent, assets.asJava)
303
303
}
304
304
305
305
for ((geotiffResult, _, _, _) <- geotiffResults) {
@@ -318,7 +318,7 @@ package object geotiff {
318
318
zLevel : Int = 6 ,
319
319
cropBounds : Option [Extent ] = Option .empty[Extent ],
320
320
formatOptions : GTiffOptions = new GTiffOptions
321
- ): java.util. List [String ] = {
321
+ ): JList [String ] = {
322
322
rdd.sparkContext.setCallSite(s " save_result(GTiff, spatial, $bandCount) " )
323
323
val tmp = saveRDDAllowAssetPerBand(rdd, bandCount, path, zLevel, cropBounds, formatOptions).asScala
324
324
logger.warn(" Calling backwards compatibility version for saveRDDAllowAssetPerBand" )
@@ -335,7 +335,7 @@ package object geotiff {
335
335
zLevel : Int = 6 ,
336
336
cropBounds : Option [Extent ] = Option .empty[Extent ],
337
337
formatOptions : GTiffOptions = new GTiffOptions
338
- ): java.util. List [(String , Extent , java.util. List [Int ])] = {
338
+ ): JList [(String , Extent , JList [Int ])] = {
339
339
formatOptions.assertNoConflicts()
340
340
if (formatOptions.separateAssetPerBand) {
341
341
val bandLabels = formatOptions.tags.bandTags.map(_(" DESCRIPTION" ))
@@ -503,7 +503,7 @@ package object geotiff {
503
503
def levelFor (extent : Extent , cellSize : CellSize ): LayoutLevel = ???
504
504
}
505
505
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 ): java.util. List [(String , Extent )] = {
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 )] = {
507
507
val preProcessResult : (GridBounds [Int ], Extent , RDD [(K , MultibandTile )] with Metadata [TileLayerMetadata [K ]]) = preProcess(rdd,cropBounds)
508
508
val gridBounds : GridBounds [Int ] = preProcessResult._1
509
509
val croppedExtent : Extent = preProcessResult._2
@@ -840,7 +840,7 @@ package object geotiff {
840
840
cropBounds : Option [Map [String , Double ]],
841
841
cropDimensions : Option [ArrayList [Int ]],
842
842
compression : Compression )
843
- : java.util. List [(String , Extent )] = {
843
+ : JList [(String , Extent )] = {
844
844
val features = TileGrid .computeFeaturesForTileGrid(tileGrid, ProjectedExtent (rdd.metadata.extent,rdd.metadata.crs))
845
845
846
846
def newFilePath (path : String , tileId : String ) = {
@@ -951,47 +951,22 @@ package object geotiff {
951
951
polygons : ProjectedPolygons ,
952
952
sampleNames : JList [String ],
953
953
compression : Compression ,
954
- ): JList [(String , String , Extent )] =
955
- saveSamples(rdd, path, polygons, sampleNames, compression, None )
956
-
957
- def saveSamples (rdd : MultibandTileLayerRDD [SpaceTimeKey ],
958
- path : String ,
959
- polygons : ProjectedPolygons ,
960
- sampleNames : JList [String ],
961
- compression : Compression ,
962
- filenamePrefix : Option [String ],
963
- ): JList [(String , String , Extent )] = {
954
+ filenamePrefix : Option [String ] = None ,
955
+ ): JList [Item ] = {
964
956
val reprojected = ProjectedPolygons .reproject(polygons, rdd.metadata.crs)
965
957
val features = sampleNames.asScala.zip(reprojected.polygons)
966
- groupByFeatureAndWriteToTiff(rdd, Option .empty , features, path, Option .empty , compression, filenamePrefix)
958
+ groupByFeatureAndWriteToTiff(rdd, cropBounds = None , features, path, cropDimensions = None , compression, filenamePrefix)
967
959
}
968
960
969
961
def saveStitchedTileGridTemporal (rdd : MultibandTileLayerRDD [SpaceTimeKey ],
970
962
path : String ,
971
963
tileGrid : String ,
972
964
compression : Compression ,
973
- filenamePrefix : Option [String ],
974
- ): java.util.List [(String , String , Extent )] =
975
- geotrellis.geotiff.saveStitchedTileGridTemporal(rdd, path, tileGrid, Option .empty, Option .empty, compression, filenamePrefix)
976
-
977
- def saveStitchedTileGridTemporal (rdd : MultibandTileLayerRDD [SpaceTimeKey ],
978
- path : String ,
979
- tileGrid : String ,
980
- compression : Compression ,
981
- ): java.util.List [(String , String , Extent )] =
982
- geotrellis.geotiff.saveStitchedTileGridTemporal(rdd, path, tileGrid, Option .empty, Option .empty, compression)
983
-
984
- def saveStitchedTileGridTemporal (rdd : MultibandTileLayerRDD [SpaceTimeKey ],
985
- path : String ,
986
- tileGrid : String ,
987
- cropBounds : Option [Map [String , Double ]],
988
- cropDimensions : Option [ArrayList [Int ]],
989
- compression : Compression ,
990
965
filenamePrefix : Option [String ] = None ,
991
- ): java.util. List [( String , String , Extent ) ] = {
966
+ ): JList [ Item ] = {
992
967
val features = TileGrid .computeFeaturesForTileGrid(tileGrid, ProjectedExtent (rdd.metadata.extent, rdd.metadata.crs))
993
- .map { case (s , extent) => (s , extent.toPolygon()) }
994
- groupByFeatureAndWriteToTiff(rdd, cropBounds, features, path, cropDimensions, compression, filenamePrefix)
968
+ .map { case (name , extent) => (name , extent.toPolygon()) }
969
+ groupByFeatureAndWriteToTiff(rdd, cropBounds = None , features, path, cropDimensions = None , compression, filenamePrefix)
995
970
}
996
971
997
972
private def groupByFeatureAndWriteToTiff (rdd : MultibandTileLayerRDD [SpaceTimeKey ],
@@ -1001,15 +976,15 @@ package object geotiff {
1001
976
cropDimensions : Option [ArrayList [Int ]],
1002
977
compression : Compression ,
1003
978
filenamePrefix : Option [String ] = None ,
1004
- ): java.util. List [( String , String , Extent ) ] = {
979
+ ): JList [ Item ] = {
1005
980
val featuresBC : Broadcast [Seq [(String , Geometry )]] = SparkContext .getOrCreate().broadcast(features)
1006
981
1007
982
val croppedExtent = cropBounds.map(toExtent)
1008
983
1009
984
val layout = rdd.metadata.layout
1010
985
val crs = rdd.metadata.crs
1011
986
1012
- rdd
987
+ val ret = rdd
1013
988
.flatMap { case (key, tile) => featuresBC.value
1014
989
.filter { case (_, geometry) => layout.mapTransform.keysForGeometry(geometry) contains key.spatialKey }
1015
990
.map { case (name, geometry) => ((name, (geometry, key.time)), (key.spatialKey, tile)) }
@@ -1020,10 +995,16 @@ package object geotiff {
1020
995
val filePath = Paths .get(path).resolve(filename).toString
1021
996
val timestamp = time format DateTimeFormatter .ISO_ZONED_DATE_TIME
1022
997
(stitchAndWriteToTiff(tiles, filePath, layout, crs, geometry, croppedExtent, cropDimensions, compression).correctPath,
1023
- timestamp, geometry.extent)
998
+ timestamp, geometry.extent, name )
1024
999
}
1025
1000
.collect()
1026
- .toList.asJava
1001
+
1002
+ val items = for {
1003
+ (path, timestamp, extent, name) <- ret
1004
+ } yield Item (id = f " ${UUID .randomUUID()}_ ${timestamp}_ $name" , datetime = timestamp, bbox = extent,
1005
+ assets = Collections .singletonMap(" openEO" , Asset (path)))
1006
+
1007
+ items.toList.asJava
1027
1008
}
1028
1009
1029
1010
private [geotrellis] case class GeoTiffResultObject (correctPath : String , fileExists : Boolean , gdalInfoPath : Option [String ])
0 commit comments