Java2D Shape¶
GeoTools includes a couple of classes for generating a Java 2D Shape from a JTS Geometry.
The examples shown here are taken from LiteShapeTest
.
You can use LiteShape
to quickly make a Java2D shape to display on the screen:
AffineTransform affineTransform = new AffineTransform();
LiteShape lineShape = new LiteShape(lineString, affineTransform, false);
You can also ask for the shape to be simplified; by default is to generalize to a single pixel.:
LiteShape lineShape = new LiteShape(lineString, affineTransform, true);
If you are using anti-aliasing you may want to drop that down to half a pixel.:
AffineTransform affineTransform = new AffineTransform();
LiteShape lineShape = new LiteShape(lineString, affineTransform, true, 0.5 );
Drawing¶
The code makes use of an AffineTransform
allowing you to scale and rotate the geometry into the correct position on the screen. You may consider starting with graphics2d.getTransform()
representing your image coordinates and work from there.:
public void draw( Graphics2d g2, Geometry geom ){
AffineTransform transform = g2.getTransform(); // returns a copy
transform.translate( 10, 10 ); // offset
transform.scale( 0.5, 0.5 ); // scale by 50%
LiteShape lineShape = new LiteShape(lineString, transform, false);
g2.draw( lineShape );
}
LiteShape2¶
LiteShape2
is similar in function, but makes use of MathTransform
(and thus can be used to handle
the case where you using reprojection to manipulate your geometry priory to display).
This class also makes use of a Decimator
class to control how generalization occurs.:
Decimator decimator = new Decimator(screen2world, paintArea );
LiteShape2 lineShape = new LiteShape2(lineString, world2screen, decimator, false);