Class Crop
- All Implemented Interfaces:
Serializable
,Operation
The key point is that the CoverageCrop operation aims to perform a spatial crop, i.e. cropping the underlying
raster by providing a spatial Bounds
(if the envelope is not 2D only the 2D part of it will be used). This
means that, depending on the grid-to-world transformation existing for the raster we want to crop, the crop area in
the raster space might not be a rectangle, hence JAI's crop may not suffice in order to shrink the raster area we
would obtain. For this purpose this operation make use of either the JAI's Crop or Mosaic operations depending on the
conditions in which we are working.
Meaning of the ROI_OPTIMISATION_TOLERANCE parameter
In general if the grid-to-world transform is a simple scale and translate using JAI's crop should suffice, but when
the g2w transform contains rotations or skew then we need something more elaborate since a rectangle in model space
may not map to a rectangle in raster space. We would still be able to crop using JAI's crop on this polygon bounds
but, depending on how this rectangle is built, we would be highly inefficient. In order to overcome this problems we
use a combination of JAI's crop and mosaic since the mosaic can be used to crop a raster using a general ROI instead
of a simple rectangle. There is a negative effect though. Crop would not create a new raster but simply forwards
requests back to the original one (it basically create a viewport on the source raster) while the mosaic operation
creates a new raster. We try to address this trade-off by providing the parameter
ROI_OPTIMISATION_TOLERANCE
, which basically tells this operation "Use the mosaic operation only if the
area that we would load with the Mosaic is strictly smaller then (ROI_OPTIMISATION_TOLERANCE)* A' where A' is the
area of the polygon resulting from converting the crop area from the model space to the raster space.
ROI
By providing a ROI parameter, the coverage can be cropped by any set of polygons, even disjuncted ones. When the ROI
is provided, the JAI's Mosaic operation will be used.
At least one between Envelope and ROI must be provided. If both of them are provided, the resulting
area will be the intersection of them.
ROI geometries must be in the same CRS as the source coverage.
ROI must be any among a Polygon
, a MultiPolygon
, or a
GeometryCollection
of the two.
NOTE that in case we will use the Mosaic operation with a ROI, such a ROI will be added as a
synthetic property to the resulting coverage. The key for this property will be GC_ROI and the type of the object
Polygon
.
- Since:
- 2.3
- Author:
- Simone Giannecchini (GeoSolutions), Emanuele Tajariol (GeoSolutions)
- See Also:
-
CropDescriptor
- Serialized Form
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final ParameterDescriptor<Bounds>
The parameter descriptor used to pass this operation the envelope to use when doing the spatial crop.static final ParameterDescriptor<Geometry>
The parameter descriptor used to pass this operation the polygons(s) to use when doing the spatial crop.static final ParameterDescriptor<double[]>
The parameter descriptor used to tell this operation to set destinationNoDatastatic final double
static final ParameterDescriptor<Boolean>
The parameter descriptor used to tell this operation to force the usage of a mosaic by avoiding any kind of optimizationstatic final ParameterDescriptor<Range>
The parameter descriptor used to tell this operation to check NoDatastatic final String
static final String
static final String
static final String
static final String
static final String
static final ParameterDescriptor<Double>
The parameter descriptor used to tell this operation to optimize the crop using a Mosaic in where the area of the image we would not load is smaller than ROI_OPTIMISATION_TOLERANCE*FULL_CROP.Fields inherited from class Operation2D
PRIMARY_SOURCE_INDEX, SOURCE_0
Fields inherited from class AbstractOperation
descriptor
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptiondoOperation
(ParameterValueGroup parameters, Hints hints) Applies a crop operation to a coverage.static Polygon
rectangleToPolygon
(Rectangle rect) Converts the rectangle into a java.awt.Polygon.Methods inherited from class Operation2D
extractSources, getFactory
Methods inherited from class AbstractOperation
equals, getDescription, getDocURL, getName, getNumSources, getParameters, getVendor, getVersion, hashCode, toString
-
Field Details
-
EPS
public static final double EPS- See Also:
-
PARAMNAME_ENVELOPE
- See Also:
-
PARAMNAME_ROI
- See Also:
-
PARAMNAME_ROITOLERANCE
- See Also:
-
PARAMNAME_FORCEMOSAIC
- See Also:
-
PARAMNAME_NODATA
- See Also:
-
PARAMNAME_DEST_NODATA
- See Also:
-
CROP_ENVELOPE
The parameter descriptor used to pass this operation the envelope to use when doing the spatial crop. -
CROP_ROI
The parameter descriptor used to pass this operation the polygons(s) to use when doing the spatial crop.If set, the intersection of Envelope and ROI must not be empty. The final output area will contain area inside the Envelope AND the ROI.
The parameter shall be a Polygon instance, or a GeometryCollection holding Polygons
-
ROI_OPTIMISATION_TOLERANCE
The parameter descriptor used to tell this operation to optimize the crop using a Mosaic in where the area of the image we would not load is smaller than ROI_OPTIMISATION_TOLERANCE*FULL_CROP. -
FORCE_MOSAIC
The parameter descriptor used to tell this operation to force the usage of a mosaic by avoiding any kind of optimization -
NODATA
The parameter descriptor used to tell this operation to check NoData -
DEST_NODATA
The parameter descriptor used to tell this operation to set destinationNoData
-
-
Constructor Details
-
Crop
public Crop()Constructs a default"Crop"
operation.
-
-
Method Details
-
doOperation
Applies a crop operation to a coverage.- Specified by:
doOperation
in classAbstractOperation
- Parameters:
parameters
- List of name value pairs for the parameters required for the operation.hints
- A set of rendering hints, ornull
if none. TheDefaultProcessor
may provides hints for the following keys:Hints.COORDINATE_OPERATION_FACTORY
andHints.JAI_INSTANCE
.- Returns:
- The result as a coverage.
- See Also:
-
rectangleToPolygon
Converts the rectangle into a java.awt.Polygon.
-