Class Decimator
- Object
-
- Decimator
-
public final class Decimator extends Object
Accepts geometries and collapses all the vertices that will be rendered to the same pixel. This class works only if the Geometries are based onLiteCoordinateSequence
instances.- Since:
- 2.1.x
- Author:
- jeichar
-
-
Constructor Summary
Constructors Constructor Description Decimator(double spanx, double spany)
Decimator(MathTransform screenToWorld, Rectangle paintArea)
djb - noticed that the old way of finding out the decimation is based on the (0,0) location of the image.Decimator(MathTransform screenToWorld, Rectangle paintArea, double pixelDistance)
Builds a decimator that will generalize geometries so that two subsequent points will be at least pixelDistance away from each other when painted on the screen.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static double[]
computeGeneralizationDistances(MathTransform screenToWorld, Rectangle paintArea, double pixelDistance)
Given a full transformation from screen to world and the paint area computes a best guess of the maxium generalization distance that won't make the transformations induced by the generalization visible on screen.void
decimate(Geometry geom)
decimates JTS geometries.Geometry
decimateTransformGeneralize(Geometry geometry, MathTransform transform)
double
getSpanX()
The generalization step in the x directiondouble
getSpanY()
The generalization step in the y direction
-
-
-
Constructor Detail
-
Decimator
public Decimator(MathTransform screenToWorld, Rectangle paintArea, double pixelDistance)
Builds a decimator that will generalize geometries so that two subsequent points will be at least pixelDistance away from each other when painted on the screen. Set pixelDistance to 0 if you don't want any generalization (but just a transformation)
-
Decimator
public Decimator(MathTransform screenToWorld, Rectangle paintArea)
djb - noticed that the old way of finding out the decimation is based on the (0,0) location of the image. This is often wildly unrepresentitive of the scale of the entire map.A better thing to do is to decimate this on a per-shape basis (and use the shape's center). Another option would be to sample the image at different locations (say 9) and choose the smallest spanx/spany you find.
Also, if the xform is an affine Xform, you can be a bit more aggressive in the decimation. If its not an affine xform (ie. its actually doing a CRS xform), you may find this is a bit too aggressive due to any number of mathematical issues.
This is just a simple method that uses the centre of the given rectangle instead of (0,0).
NOTE: this could need more work based on CRS, but the rectangle is in pixels so it should be fairly immune to all but crazy projections.
-
Decimator
public Decimator(double spanx, double spany)
-
-
Method Detail
-
getSpanX
public double getSpanX()
The generalization step in the x direction
-
getSpanY
public double getSpanY()
The generalization step in the y direction
-
computeGeneralizationDistances
public static double[] computeGeneralizationDistances(MathTransform screenToWorld, Rectangle paintArea, double pixelDistance) throws TransformException
Given a full transformation from screen to world and the paint area computes a best guess of the maxium generalization distance that won't make the transformations induced by the generalization visible on screen.In other words, it computes how long a pixel is in the native spatial reference system of the data
- Throws:
TransformException
-
decimateTransformGeneralize
public final Geometry decimateTransformGeneralize(Geometry geometry, MathTransform transform) throws TransformException
- Throws:
TransformException
-
decimate
public final void decimate(Geometry geom)
decimates JTS geometries.
-
-