Called when a result is desired by the parent implementation.
Called when a result is desired by the parent implementation.
No guarantees are made that this will only be called after all visitation is complete. As a result, this should return an iterative result as cells are visited for full compatibility.
R
Called when the visitor requests a unit of computation for the given col and row.
Called when the visitor requests a unit of computation for the given col and row.
The visitor result should be updated within this method as appropriate for the implementation.
The grid being visited
The column in the grid being visited
The row in the grid being visited
polygonal.visitors.TileCombineVisitor and polygonal.visitors.MaxVisitor for an example concrete implementation.
Visitor used to reduce values in a two-dimensional grid T to a single result R
The user should implement concrete subclasses that update the value of
result
as necessary on each call tovisit(raster: T, col: Int, row: Int)
.User implementations intended to be used with
,geotrellis.spark.summary.polygonal.RDDPolygonalSummary
must have a zero argument constructor so that new instances can be instantiated automatically. GridVisitor is contravariant in T and covariant in R in the same fashion as Function1. This allows more generic concrete Visitor class implementations to satisfy type constraints for T at the call site, and the inverse is true for R. As a contrived example using GeoTrellis types, where Raster is a subtype of CellGrid: val DoubleVisitor: GridVisitor[CellGrid[Int], Double] = ??? def usesRaster(visitor: GridVisitor[Raster[Tile]], Any]): Unit = ??? usesRaster(DoubleVisitor) will compile. For an alternate explanation on covariance and contravariance that might help to clarify this, see: - https://stackoverflow.com/a/10604305 - https://stackoverflow.com/a/38577878Be sure to handle the empty state. This could occur if no points in T are ever visited.