@Override public <X> X unwrap(Geometry value, Class<X> type, WrapperOptions options) { if ( value == null ) { return null; } if ( Geometry.class.isAssignableFrom( type ) ) { return (X) value; } if ( org.geolatte.geom.Geometry.class.isAssignableFrom( type ) ) { return (X) JTS.from( value ); } if ( String.class.isAssignableFrom( type ) ) { return (X) toString( value ); } throw unknownUnwrap( type ); }
@Override public <X> Geometry wrap(X value, WrapperOptions options) { if ( value == null ) { return null; } if ( Geometry.class.isInstance( value ) ) { return (Geometry) value; } if ( org.geolatte.geom.Geometry.class.isInstance( value ) ) { return JTS.to( (org.geolatte.geom.Geometry) value ); } if ( String.class.isInstance( value ) ) { return fromString( (String) value ); } throw unknownWrap( value.getClass() ); }
public static <P extends Position> org.locationtech.jts.geom.Geometry to(org.geolatte.geom.Geometry<P> geometry) { if (geometry == null) { throw new IllegalArgumentException("Null object passed."); } GeometryFactory gFact = geometryFactory(geometry.getSRID()); return to(geometry, gFact); }
/** * Primary Factory method that converts a JTS geometry into an equivalent geolatte geometry * * @param jtsGeometry the jts geometry to convert * @return an equivalent geolatte geometry * @throws IllegalArgumentException when a null object is passed */ public static org.geolatte.geom.Geometry<?> from(org.locationtech.jts.geom.Geometry jtsGeometry) { if (jtsGeometry == null) { throw new IllegalArgumentException("Null object passed."); } Coordinate testCo = jtsGeometry.getCoordinate(); boolean is3D = !(testCo == null || Double.isNaN(testCo.z)); CoordinateReferenceSystem<?> crs = CrsRegistry.ifAbsentReturnProjected2D(jtsGeometry.getSRID()); if (is3D) { crs = CoordinateReferenceSystems.addVerticalSystem(crs, LinearUnit.METER); } // to translate measure, add Measure as LinearSystem boolean hasM = isMeasuredCoordinate(testCo) && !Double.isNaN(testCo.getM()); if (hasM) { crs = CoordinateReferenceSystems.addLinearSystem(crs, LinearUnit.METER); } return from(jtsGeometry, crs); }
private static <P extends Position> LinearRing to(org.geolatte.geom.LinearRing<P> linearRing, GeometryFactory gFact) { return gFact.createLinearRing(sequenceOf(linearRing)); }
private static GeometryFactory geometryFactory(int srid) { return geometryFactories.computeIfAbsent(srid, id -> buildGeometryFactory(id)); }
private static <P extends Position> Point to(org.geolatte.geom.Point<P> point, GeometryFactory gFact) { return gFact.createPoint(sequenceOf(point)); }
@Override public <X> X unwrap(Geometry value, Class<X> type, WrapperOptions options) { if ( value == null ) { return null; } if ( Geometry.class.isAssignableFrom( type ) ) { return (X) value; } if ( org.locationtech.jts.geom.Geometry.class.isAssignableFrom( type ) ) { return (X) JTS.to( value ); } if ( String.class.isAssignableFrom( type ) ) { return (X) toString( value ); } throw unknownUnwrap( type ); }
@Override public <X> Geometry wrap(X value, WrapperOptions options) { if ( value == null ) { return null; } if ( Geometry.class.isInstance( value ) ) { return (Geometry) value; } if ( String.class.isInstance( value ) ) { return fromString( (String) value ); } if ( org.locationtech.jts.geom.Geometry.class.isInstance( value ) ) { return JTS.from( (org.locationtech.jts.geom.Geometry) value ); } throw unknownWrap( value.getClass() ); } }
private static <P extends Position> LineString to(org.geolatte.geom.LineString<P> lineString, GeometryFactory gFact) { return gFact.createLineString(sequenceOf(lineString)); }
@Override protected Geometry decode(Object o) { if ( o == null ) { return null; } return JTS.to( HANASpatialUtils.toGeometry( o ) ); }
@Override public <P extends C2D> Geometry<P> union(final Geometry<P> geometry, final Geometry<P> other) { checkCompatibleCRS(geometry, other); if (geometry.isEmpty()) return other; if (other.isEmpty()) return geometry; checkNotGeometryCollection(geometry); checkNotGeometryCollection(other); org.locationtech.jts.geom.Geometry union = SnapIfNeededOverlayOp.overlayOp(JTS.to(geometry), JTS.to(other), OverlayOp.UNION); return JTS.from(union, geometry.getCoordinateReferenceSystem()); }
@Override protected Geometry decode(Object o) { return ( o != null ) ? JTS.to( decoder.convert( o ) ) : null; } }
return from((Point) jtsGeometry, crs); } else if (jtsGeometry instanceof LineString) { return from((LineString) jtsGeometry, crs); } else if (jtsGeometry instanceof Polygon) { return from((Polygon) jtsGeometry, crs); } else if (jtsGeometry instanceof MultiPoint) { return from((MultiPoint) jtsGeometry, crs); } else if (jtsGeometry instanceof MultiLineString) { return from((MultiLineString) jtsGeometry, crs); } else if (jtsGeometry instanceof MultiPolygon) { return from((MultiPolygon) jtsGeometry, crs); } else if (jtsGeometry instanceof GeometryCollection) { return from((GeometryCollection) jtsGeometry, crs); } else { throw new JTSConversionException();
@Override public <P extends C2D> Geometry<P> symmetricDifference(final Geometry<P> geometry, final Geometry<P> other) { checkCompatibleCRS(geometry, other); if (geometry.isEmpty()) return other; if (other.isEmpty()) return geometry; checkNotGeometryCollection(geometry); checkNotGeometryCollection(other); org.locationtech.jts.geom.Geometry symDifference = SnapIfNeededOverlayOp.overlayOp(JTS.to(geometry), JTS.to(other), OverlayOp.SYMDIFFERENCE); return JTS.from(symDifference, geometry.getCoordinateReferenceSystem()); }