package jeql.std.function.geommatch;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.CoordinateFilter;
import com.vividsolutions.jts.geom.Geometry;
public class CentroidAligner
{
private Geometry target;
public CentroidAligner(Geometry target) {
this.target = target;
}
/**
* Aligns a geometry to the target geometry.
*
* @param original
* @return
*/
public Geometry align(Geometry original) {
Geometry aligned = (Geometry) original.clone();
Coordinate targetCentroid = target.getCentroid().getCoordinate();
Coordinate origCentroid = original.getCentroid().getCoordinate();
Coordinate delta = subtract(targetCentroid, origCentroid);
translate(aligned, delta);
return aligned;
}
/**
* Moves g so that c is at (0,0).
* @param g the Geometry to modify
* @param c the point to move to the origin
*/
public void translate(Geometry g, final Coordinate delta) {
g.apply(new CoordinateFilter() {
public void filter(Coordinate coordinate) {
coordinate.x += delta.x;
coordinate.y += delta.y;
}
});
}
private Coordinate subtract(Coordinate p0, Coordinate p1)
{
return new Coordinate(p0.x - p1.x, p0.y - p1.y);
}
}