@Override protected com.vividsolutions.jts.geom.Geometry buildJTSGeometry() { LinearRing shell = (LinearRing) getAsDefaultGeometry( exteriorRing ).getJTSGeometry(); LinearRing[] holes = null; if ( interiorRings != null ) { holes = new LinearRing[interiorRings.size()]; int i = 0; for ( Ring ring : interiorRings ) { holes[i++] = (LinearRing) getAsDefaultGeometry( ring ).getJTSGeometry(); } } return jtsFactory.createPolygon( shell, holes ); } }
/** * Returns an equivalent (or best-fit) JTS geometry object. * * @return an equivalent (or best-fit) JTS geometry */ public com.vividsolutions.jts.geom.Geometry getJTSGeometry() { if ( jtsGeometry == null ) { jtsGeometry = buildJTSGeometry(); } return jtsGeometry; }
/** * Creates a deep copy of the given {@link Geometry} object. * * @param geom * @return */ public static Geometry copyDeep( Geometry geom ) { // TODO implement this without JTS com.vividsolutions.jts.geom.Geometry jtsGeom = ( (AbstractDefaultGeometry) geom ).getJTSGeometry(); return ( (AbstractDefaultGeometry) geom ).createFromJTS( jtsGeom, geom.getCoordinateSystem() ); }
/** * Creates a "compatible" pair of JTS geometries from an {@link AbstractDefaultGeometry} and a second * {@link Geometry} instance. * * @param geom1 * @param geom2 * @return */ public static JTSGeometryPair createCompatiblePair( AbstractDefaultGeometry geom1, org.deegree.geometry.Geometry geom2 ) { return new JTSGeometryPair( geom1.getJTSGeometry(), AbstractDefaultGeometry.getAsDefaultGeometry( geom2 ).getJTSGeometry() ); }
@Override public Geometry getUnion( Geometry geometry ) { JTSGeometryPair jtsGeoms = JTSGeometryPair.createCompatiblePair( this, geometry ); com.vividsolutions.jts.geom.Geometry jtsGeom = jtsGeoms.first.union( jtsGeoms.second ); return createFromJTS( jtsGeom, crs ); }
geom = new DefaultLinearRing( null, crs, pm, getAsPoints( jtsLinearRing.getCoordinateSequence(), crs ) ); } else if ( jtsGeom instanceof com.vividsolutions.jts.geom.LineString ) { com.vividsolutions.jts.geom.LineString jtsLineString = (com.vividsolutions.jts.geom.LineString) jtsGeom; geom = new DefaultLineString( null, crs, pm, getAsPoints( jtsLineString.getCoordinateSequence(), crs ) ); } else if ( jtsGeom instanceof com.vividsolutions.jts.geom.Polygon ) { com.vividsolutions.jts.geom.Polygon jtsPolygon = (com.vividsolutions.jts.geom.Polygon) jtsGeom; Points exteriorPoints = getAsPoints( jtsPolygon.getExteriorRing().getCoordinateSequence(), crs ); LinearRing exteriorRing = new DefaultLinearRing( null, crs, pm, exteriorPoints ); List<Ring> interiorRings = new ArrayList<Ring>( jtsPolygon.getNumInteriorRing() ); for ( int i = 0; i < jtsPolygon.getNumInteriorRing(); i++ ) { Points interiorPoints = getAsPoints( jtsPolygon.getInteriorRingN( i ).getCoordinateSequence(), crs ); interiorRings.add( new DefaultLinearRing( null, crs, pm, interiorPoints ) ); List<Point> members = new ArrayList<Point>( jtsMultiPoint.getNumGeometries() ); for ( int i = 0; i < jtsMultiPoint.getNumGeometries(); i++ ) { members.add( (Point) createFromJTS( jtsMultiPoint.getGeometryN( i ), crs ) ); List<LineString> members = new ArrayList<LineString>( jtsMultiLineString.getNumGeometries() ); for ( int i = 0; i < jtsMultiLineString.getNumGeometries(); i++ ) { Curve curve = (Curve) createFromJTS( jtsMultiLineString.getGeometryN( i ), crs ); members.add( curve.getAsLineString() ); List<Polygon> members = new ArrayList<Polygon>( jtsMultiPolygon.getNumGeometries() ); for ( int i = 0; i < jtsMultiPolygon.getNumGeometries(); i++ ) { members.add( (Polygon) createFromJTS( jtsMultiPolygon.getGeometryN( i ), crs ) ); List<Geometry> members = new ArrayList<Geometry>( jtsGeometryCollection.getNumGeometries() ); for ( int i = 0; i < jtsGeometryCollection.getNumGeometries(); i++ ) { members.add( createFromJTS( jtsGeometryCollection.getGeometryN( i ), crs ) );
@Override public boolean isBeyond( Geometry geometry, Measure distance ) { return !isWithinDistance( geometry, distance ); }
@Override public boolean intersects( Geometry other ) { if ( !( other instanceof Envelope ) ) { return super.intersects( other ); } Envelope e = (Envelope) other; double minX1 = this.getMin().get0(); double minY1 = this.getMin().get1(); double maxX1 = this.getMax().get0(); double maxY1 = this.getMax().get1(); double minX2 = e.getMin().get0(); double minY2 = e.getMin().get1(); double maxX2 = e.getMax().get0(); double maxY2 = e.getMax().get1(); return pointInside( minX1, minY1, e ) || pointInside( minX1, maxY1, e ) || pointInside( maxX1, minY1, e ) || pointInside( maxX1, maxY1, e ) || pointInside( minX2, minY2, this ) || pointInside( minX2, maxY2, this ) || pointInside( maxX2, minY2, this ) || pointInside( maxX2, maxY2, this ) || noEdgeOverlap( e, this ) || noEdgeOverlap( this, e ); }
@Override public Measure getDistance( Geometry geometry, Unit requestedUnit ) { // TODO respect unit double dist = getJTSGeometry().distance( getAsDefaultGeometry( geometry ).getJTSGeometry() ); return new Measure( Double.toString( dist ), null ); }
@Override public Geometry getDifference( Geometry geometry ) { JTSGeometryPair jtsGeoms = JTSGeometryPair.createCompatiblePair( this, geometry ); com.vividsolutions.jts.geom.Geometry jtsGeom = jtsGeoms.first.difference( jtsGeoms.second ); return createFromJTS( jtsGeom, crs ); }
@Override protected com.vividsolutions.jts.geom.Geometry buildJTSGeometry() { if ( patches.size() < 1 || !( patches.get( 0 ) instanceof PolygonPatch ) ) { throw new IllegalArgumentException( Messages.getMessage( "SURFACE_NOT_EQUIVALENT_TO_POLYGON" ) ); } // TODO handle the other patches as well PolygonPatch patch = (PolygonPatch) patches.get( 0 ); Ring exteriorRing = patch.getExteriorRing(); List<Ring> interiorRings = patch.getInteriorRings(); LinearRing shell = (LinearRing) getAsDefaultGeometry( exteriorRing ).getJTSGeometry(); LinearRing[] holes = null; if ( interiorRings != null ) { holes = new LinearRing[interiorRings.size()]; int i = 0; for ( Ring ring : interiorRings ) { holes[i++] = (LinearRing) getAsDefaultGeometry( ring ).getJTSGeometry(); } } return jtsFactory.createPolygon( shell, holes ); } }
@Override public Geometry getConvexHull() { com.vividsolutions.jts.geom.Geometry jtsGeom = getJTSGeometry().convexHull(); return createFromJTS( jtsGeom, crs ); }
public static Geometry read( byte[] wkb, ICRS crs ) throws ParseException { // com.vividsolutions.jts.io.WKBReader() is not thread safe return defaultGeom.createFromJTS( new com.vividsolutions.jts.io.WKBReader().read( wkb ), crs ); }
@Override protected com.vividsolutions.jts.geom.MultiLineString buildJTSGeometry() { com.vividsolutions.jts.geom.LineString[] jtsMembers = new com.vividsolutions.jts.geom.LineString[size()]; int i = 0; for ( Curve geometry : members ) { jtsMembers[i++] = (com.vividsolutions.jts.geom.LineString) getAsDefaultGeometry( geometry ).getJTSGeometry(); } return jtsFactory.createMultiLineString( jtsMembers ); } }
@Override public Point getCentroid() { return (Point) createFromJTS( getJTSGeometry().getCentroid(), crs ); }
@Override public Geometry getIntersection( Geometry geometry ) { JTSGeometryPair jtsGeoms = JTSGeometryPair.createCompatiblePair( this, geometry ); ICRS crs = this.crs; if ( crs == null ) { crs = geometry.getCoordinateSystem(); } com.vividsolutions.jts.geom.Geometry jtsGeom = jtsGeoms.first.intersection( jtsGeoms.second ); return createFromJTS( jtsGeom, crs ); }
@Override protected com.vividsolutions.jts.geom.MultiPolygon buildJTSGeometry() { com.vividsolutions.jts.geom.Polygon[] jtsMembers = new com.vividsolutions.jts.geom.Polygon[size()]; int i = 0; for ( Surface geometry : members ) { jtsMembers[i++] = (com.vividsolutions.jts.geom.Polygon) getAsDefaultGeometry( geometry ).getJTSGeometry(); } return jtsFactory.createMultiPolygon( jtsMembers ); } }
@Override public Geometry getBuffer( Measure distance ) { // TODO get double in CoordinateSystem units double crsDistance = distance.getValueAsDouble(); com.vividsolutions.jts.geom.Geometry jtsGeom = getJTSGeometry().buffer( crsDistance ); return createFromJTS( jtsGeom, crs ); }
public static Geometry read( InputStream is, ICRS crs ) throws IOException, ParseException { // com.vividsolutions.jts.io.WKBReader() is not thread safe return defaultGeom.createFromJTS( new com.vividsolutions.jts.io.WKBReader().read( new InputStreamInStream( is ) ), crs ); } }
@Override protected com.vividsolutions.jts.geom.MultiPolygon buildJTSGeometry() { com.vividsolutions.jts.geom.Polygon[] jtsMembers = new com.vividsolutions.jts.geom.Polygon[size()]; int i = 0; for ( Surface geometry : members ) { jtsMembers[i++] = (com.vividsolutions.jts.geom.Polygon) getAsDefaultGeometry( geometry ).getJTSGeometry(); } return jtsFactory.createMultiPolygon( jtsMembers ); } }