@@ -304,15 +304,43 @@ trait RasterFunctions {
304304 if (! inverse) Mask .MaskByValue (sourceTile, maskTile, maskValue)
305305 else Mask .InverseMaskByValue (sourceTile, maskTile, maskValue)
306306
307+ /** Where the `maskTile` equals `maskValue`, replace values in the source tile with `NoData` */
308+ def rf_mask_by_value (sourceTile : Column , maskTile : Column , maskValue : Int , inverse : Boolean ): TypedColumn [Any , Tile ] =
309+ rf_mask_by_value(sourceTile, maskTile, lit(maskValue), inverse)
310+
311+ /** Where the `maskTile` equals `maskValue`, replace values in the source tile with `NoData` */
312+ def rf_mask_by_value (sourceTile : Column , maskTile : Column , maskValue : Int ): TypedColumn [Any , Tile ] =
313+ rf_mask_by_value(sourceTile, maskTile, maskValue, false )
314+
307315 /** Generate a tile with the values from `data_tile`, but where cells in the `mask_tile` are in the `mask_values`
308316 list, replace the value with NODATA.
309317 If `inverse` is True, the cells in `mask_tile` that are not in `mask_values` list become NODATA */
310- def rf_mask_by_values (sourceTile : Column , maskTile : Column , maskValues : Column , inverse : Boolean = false ): TypedColumn [Any , Tile ] =
318+ def rf_mask_by_values (sourceTile : Column , maskTile : Column , maskValues : Column , inverse : Boolean ): TypedColumn [Any , Tile ] =
311319 if (! inverse)
312320 Mask .MaskByValue (sourceTile, rf_local_is_in(maskTile, maskValues), lit(1 ))
313321 else
314322 Mask .InverseMaskByValue (sourceTile, rf_local_is_in(maskTile, maskValues), lit(0 ))
315323
324+ /** Generate a tile with the values from `data_tile`, but where cells in the `mask_tile` are in the `mask_values`
325+ list, replace the value with NODATA. */
326+ def rf_mask_by_values (sourceTile : Column , maskTile : Column , maskValues : Column ): TypedColumn [Any , Tile ] =
327+ rf_mask_by_values(sourceTile, maskTile, maskValues, false )
328+
329+ /** Generate a tile with the values from `data_tile`, but where cells in the `mask_tile` are in the `mask_values`
330+ list, replace the value with NODATA.
331+ If `inverse` is True, the cells in `mask_tile` that are not in `mask_values` list become NODATA */
332+ def rf_mask_by_values (sourceTile : Column , maskTile : Column , maskValues : Iterable [Int ], inverse : Boolean ): TypedColumn [Any , Tile ] = {
333+ import org .apache .spark .sql .functions .array
334+ val valuesCol : Column = array(maskValues.map(lit).toSeq: _* )
335+ rf_mask_by_values(sourceTile, maskTile, valuesCol, inverse)
336+ }
337+
338+ /** Generate a tile with the values from `data_tile`, but where cells in the `mask_tile` are in the `mask_values`
339+ list, replace the value with NODATA.
340+ If `inverse` is True, the cells in `mask_tile` that are not in `mask_values` list become NODATA */
341+ def rf_mask_by_values (sourceTile : Column , maskTile : Column , maskValues : Iterable [Int ]): TypedColumn [Any , Tile ] =
342+ rf_mask_by_values(sourceTile, maskTile, maskValues, false )
343+
316344 /** Where the `maskTile` does **not** contain `NoData`, replace values in the source tile with `NoData` */
317345 def rf_inverse_mask (sourceTile : Column , maskTile : Column ): TypedColumn [Any , Tile ] =
318346 Mask .InverseMaskByDefined (sourceTile, maskTile)
@@ -321,6 +349,10 @@ trait RasterFunctions {
321349 def rf_inverse_mask_by_value (sourceTile : Column , maskTile : Column , maskValue : Column ): TypedColumn [Any , Tile ] =
322350 Mask .InverseMaskByValue (sourceTile, maskTile, maskValue)
323351
352+ /** Where the `maskTile` does **not** equal `maskValue`, replace values in the source tile with `NoData` */
353+ def rf_inverse_mask_by_value (sourceTile : Column , maskTile : Column , maskValue : Int ): TypedColumn [Any , Tile ] =
354+ Mask .InverseMaskByValue (sourceTile, maskTile, lit(maskValue))
355+
324356 /** Create a tile where cells in the grid defined by cols, rows, and bounds are filled with the given value. */
325357 def rf_rasterize (geometry : Column , bounds : Column , value : Column , cols : Int , rows : Int ): TypedColumn [Any , Tile ] =
326358 withTypedAlias(" rf_rasterize" , geometry)(
0 commit comments