From 94ae08701bbd7585a0b7e5a92d1975965a503c03 Mon Sep 17 00:00:00 2001 From: Dennis Kao <ulysseskao@gmail.com> Date: Wed, 15 Jan 2014 11:28:52 +0800 Subject: [PATCH] Merge branch 'origin/2.1.x' --- xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/postjts/JTSShape.java | 177 ++++++++++++++++++++--------------------------------------- 1 files changed, 60 insertions(+), 117 deletions(-) diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/postjts/JTSShape.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/postjts/JTSShape.java index ebbcd74..13b7d5a 100644 --- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/postjts/JTSShape.java +++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/postjts/JTSShape.java @@ -18,145 +18,119 @@ import com.vividsolutions.jts.geom.Point; import com.vividsolutions.jts.geom.Polygon; import com.vividsolutions.jts.geom.impl.PackedCoordinateSequence; +import org.geotools.geometry.jts.JTSFactoryFinder; -public class JTSShape implements Shape -{ - static GeometryFactory fac = new GeometryFactory(); +public class JTSShape implements Shape { + static GeometryFactory fac = JTSFactoryFinder.getGeometryFactory(null); Geometry geom; final static LinearRing[] NOSHELLS = {}; - public JTSShape(Geometry _geom) - { + public JTSShape(Geometry _geom) { this.geom = _geom; } - public JTSShape(JtsGeometry _geom) - { + public JTSShape(JtsGeometry _geom) { this(_geom.getGeometry()); } - public boolean contains(Point2D p) - { + public boolean contains(Point2D p) { return contains(p.getX(), p.getY()); } - public boolean contains(double x, double y) - { + public boolean contains(double x, double y) { Coordinate c = new Coordinate(x, y); Point p = fac.createPoint(c); return geom.contains(p); } - public boolean contains(Rectangle2D r) - { + public boolean contains(Rectangle2D r) { return contains(r.getMinX(), r.getMinY(), r.getWidth(), r.getHeight()); } - public boolean contains(double x, double y, double w, double h) - { + public boolean contains(double x, double y, double w, double h) { Polygon p = createRect(x, y, w, h); return geom.contains(p); } - protected Polygon createRect(double x, double y, double w, double h) - { + protected Polygon createRect(double x, double y, double w, double h) { double[] arr = {x, y, x + w, y, x + w, y + h, x, y + h, x, y}; PackedCoordinateSequence shell = new PackedCoordinateSequence.Double(arr, 2); Polygon p = fac.createPolygon(fac.createLinearRing(shell), NOSHELLS); return p; } - public Rectangle2D getBounds2D() - { + public Rectangle2D getBounds2D() { Envelope env = geom.getEnvelopeInternal(); return new Rectangle2D.Double(env.getMinX(), env.getMaxX(), env.getWidth(), env.getHeight()); } - public Rectangle getBounds() - { + public Rectangle getBounds() { // We deal simple code for efficiency here, the getBounds() rounding // rules are ugly... return getBounds2D().getBounds(); } - public PathIterator getPathIterator(AffineTransform at) - { + public PathIterator getPathIterator(AffineTransform at) { return getPathIterator(geom, at); } - public PathIterator getPathIterator(AffineTransform at, double flatness) - { + public PathIterator getPathIterator(AffineTransform at, double flatness) { // we don't have much work here, as we only have linear segments, no // "flattening" necessary. return getPathIterator(at); } - public boolean intersects(Rectangle2D r) - { + public boolean intersects(Rectangle2D r) { return intersects(r.getMinX(), r.getMinY(), r.getWidth(), r.getHeight()); } - public boolean intersects(double x, double y, double w, double h) - { + public boolean intersects(double x, double y, double w, double h) { Polygon p = createRect(x, y, w, h); return geom.intersects(p); } - public static GeometryPathIterator getPathIterator(Geometry geometry, AffineTransform _at) - { - if (geometry instanceof Point) - { + public static GeometryPathIterator getPathIterator(Geometry geometry, AffineTransform _at) { + if (geometry instanceof Point) { return new PointPathIterator((Point) geometry, _at); - } else if (geometry instanceof LineString) - { + } else if (geometry instanceof LineString) { return new LineStringPathIterator((LineString) geometry, _at); - } else if (geometry instanceof Polygon) - { + } else if (geometry instanceof Polygon) { return new PolygonPathIterator((Polygon) geometry, _at); - } else - { + } else { return new GeometryCollectionPathIterator((GeometryCollection) geometry, _at); } } - public static abstract class GeometryPathIterator implements PathIterator - { + public static abstract class GeometryPathIterator implements PathIterator { protected final AffineTransform at; protected int index = 0; - GeometryPathIterator(AffineTransform _at) - { + GeometryPathIterator(AffineTransform _at) { this.at = _at; } - public final int getWindingRule() - { + public final int getWindingRule() { return PathIterator.WIND_EVEN_ODD; } - public void next() - { + public void next() { index++; } } - public static class PointPathIterator extends GeometryPathIterator - { + public static class PointPathIterator extends GeometryPathIterator { final Point p; - public PointPathIterator(Point _p, AffineTransform _at) - { + public PointPathIterator(Point _p, AffineTransform _at) { super(_at); p = _p; } - public int currentSegment(float[] coords) - { - switch (index) - { + public int currentSegment(float[] coords) { + switch (index) { case 0: coords[0] = (float) p.getX(); coords[1] = (float) p.getY(); @@ -169,10 +143,8 @@ } } - public int currentSegment(double[] coords) - { - switch (index) - { + public int currentSegment(double[] coords) { + switch (index) { case 0: coords[0] = p.getX(); coords[1] = p.getY(); @@ -185,20 +157,17 @@ } } - public boolean isDone() - { + public boolean isDone() { return index > 1; } } - public static class LineStringPathIterator extends GeometryPathIterator - { + public static class LineStringPathIterator extends GeometryPathIterator { CoordinateSequence cs; final boolean isRing; - public LineStringPathIterator(LineString ls, AffineTransform _at) - { + public LineStringPathIterator(LineString ls, AffineTransform _at) { super(_at); cs = ls.getCoordinateSequence(); isRing = ls instanceof LinearRing; @@ -207,132 +176,106 @@ /** * only to be called from PolygonPathIterator subclass */ - protected void reInit(CoordinateSequence _cs) - { + protected void reInit(CoordinateSequence _cs) { cs = _cs; index = 0; } - public int currentSegment(float[] coords) - { - if (index == 0) - { + public int currentSegment(float[] coords) { + if (index == 0) { coords[0] = (float) cs.getOrdinate(index, 0); coords[1] = (float) cs.getOrdinate(index, 1); at.transform(coords, 0, coords, 0, 1); return PathIterator.SEG_MOVETO; - } else if (index < cs.size()) - { + } else if (index < cs.size()) { coords[0] = (float) cs.getOrdinate(index, 0); coords[1] = (float) cs.getOrdinate(index, 1); at.transform(coords, 0, coords, 0, 1); return PathIterator.SEG_LINETO; - } else if (isRing && index == cs.size()) - { + } else if (isRing && index == cs.size()) { return PathIterator.SEG_CLOSE; - } else - { + } else { throw new IllegalStateException(); } } - public int currentSegment(double[] coords) - { - if (index == 0) - { + public int currentSegment(double[] coords) { + if (index == 0) { coords[0] = cs.getOrdinate(index, 0); coords[1] = cs.getOrdinate(index, 1); at.transform(coords, 0, coords, 0, 1); return PathIterator.SEG_MOVETO; - } else if (index < cs.size()) - { + } else if (index < cs.size()) { coords[0] = cs.getOrdinate(index, 0); coords[1] = cs.getOrdinate(index, 1); at.transform(coords, 0, coords, 0, 1); return PathIterator.SEG_LINETO; - } else if (isRing && index == cs.size()) - { + } else if (isRing && index == cs.size()) { return PathIterator.SEG_CLOSE; - } else - { + } else { throw new IllegalStateException(); } } - public boolean isDone() - { + public boolean isDone() { return isRing ? index > cs.size() : index >= cs.size(); } } - public static class PolygonPathIterator extends LineStringPathIterator - { + public static class PolygonPathIterator extends LineStringPathIterator { final Polygon pg; int outerindex = -1; - public PolygonPathIterator(Polygon _pg, AffineTransform _at) - { + public PolygonPathIterator(Polygon _pg, AffineTransform _at) { super(_pg.getExteriorRing(), _at); pg = _pg; index = -1; } - public boolean isDone() - { + public boolean isDone() { return outerindex >= pg.getNumInteriorRing(); } - public void next() - { + public void next() { super.next(); - if (super.isDone()) - { + if (super.isDone()) { outerindex++; - if (outerindex < pg.getNumInteriorRing()) - { + if (outerindex < pg.getNumInteriorRing()) { super.reInit(pg.getInteriorRingN(outerindex).getCoordinateSequence()); } } } } - public static class GeometryCollectionPathIterator extends GeometryPathIterator - { + public static class GeometryCollectionPathIterator extends GeometryPathIterator { final GeometryCollection coll; GeometryPathIterator current; - public GeometryCollectionPathIterator(GeometryCollection _coll, AffineTransform _at) - { + public GeometryCollectionPathIterator(GeometryCollection _coll, AffineTransform _at) { super(_at); coll = _coll; current = getPathIterator(coll.getGeometryN(index), _at); } - public boolean isDone() - { + public boolean isDone() { return index > coll.getNumGeometries(); } - public void next() - { + public void next() { current.next(); - if (current.isDone()) - { + if (current.isDone()) { index++; - if (index < coll.getNumGeometries()) - { + if (index < coll.getNumGeometries()) { current = getPathIterator(coll.getGeometryN(index), at); } } } - public int currentSegment(float[] coords) - { + public int currentSegment(float[] coords) { return current.currentSegment(coords); } - public int currentSegment(double[] coords) - { + public int currentSegment(double[] coords) { return current.currentSegment(coords); } } -- Gitblit v0.0.0-SNAPSHOT