@@ -24,13 +24,13 @@ package org.locationtech.rasterframes.expressions.transformers
2424import com .typesafe .scalalogging .Logger
2525import geotrellis .raster
2626import geotrellis .raster .Tile
27- import geotrellis .raster .mapalgebra .local .{Defined , InverseMask ⇒ gtInverseMask , Mask ⇒ gtMask }
27+ import geotrellis .raster .mapalgebra .local .{Undefined , InverseMask ⇒ gtInverseMask , Mask ⇒ gtMask }
2828import org .apache .spark .sql .catalyst .analysis .TypeCheckResult
2929import org .apache .spark .sql .catalyst .analysis .TypeCheckResult .{TypeCheckFailure , TypeCheckSuccess }
3030import org .apache .spark .sql .catalyst .expressions .codegen .CodegenFallback
3131import org .apache .spark .sql .catalyst .expressions .{Expression , ExpressionDescription , Literal , TernaryExpression }
3232import org .apache .spark .sql .rf .TileUDT
33- import org .apache .spark .sql .types .{ DataType , NullType }
33+ import org .apache .spark .sql .types .DataType
3434import org .apache .spark .sql .{Column , TypedColumn }
3535import org .locationtech .rasterframes .encoders .CatalystSerializer ._
3636import org .locationtech .rasterframes .expressions .DynamicExtractors ._
@@ -43,10 +43,10 @@ import org.slf4j.LoggerFactory
4343 * @param left a tile of data values, with valid nodata cell type
4444 * @param middle a tile indicating locations to set to nodata
4545 * @param right optional, cell values in the `middle` tile indicating locations to set NoData
46- * @param defined if true, consider NoData in the `middle` as the locations to mask; else use `right` valued cells
46+ * @param undefined if true, consider NoData in the `middle` as the locations to mask; else use `right` valued cells
4747 * @param inverse if true, and defined is true, set `left` to NoData where `middle` is NOT nodata
4848 */
49- abstract class Mask (val left : Expression , val middle : Expression , val right : Expression , defined : Boolean , inverse : Boolean )
49+ abstract class Mask (val left : Expression , val middle : Expression , val right : Expression , undefined : Boolean , inverse : Boolean )
5050 extends TernaryExpression with CodegenFallback with Serializable {
5151 // aliases.
5252 def targetExp = left
@@ -85,9 +85,12 @@ abstract class Mask(val left: Expression, val middle: Expression, val right: Exp
8585
8686 val maskValue = intArgExtractor(maskValueExp.dataType)(maskValueInput)
8787
88- val masking = if (defined) Defined (maskTile)
89- else maskTile.localEqual(maskValue.value)
88+ // Get a tile where values of 1 indicate locations to set to ND in the target tile
89+ // When `undefined` is true, setting targetTile locations to ND for ND locations of the `maskTile`
90+ val masking = if (undefined) Undefined (maskTile)
91+ else maskTile.localEqual(maskValue.value) // Otherwise if `maskTile` locations equal `maskValue`, set location to ND
9092
93+ // apply the `masking` where values are 1 set to ND (possibly inverted!)
9194 val result = if (inverse)
9295 gtInverseMask(targetTile, masking, 1 , raster.NODATA )
9396 else
0 commit comments