/*$************************************************************************************************ ** ** $Id$ ** ** $Source: /cvs/ctree/LiteGO1/src/jar/com/polexis/lite/spatialschema/geometry/geometry/GeometryFactoryImpl.java,v $ ** ** Copyright (C) 2003 Open GIS Consortium, Inc. All Rights Reserved. http://www.opengis.org/Legal/ ** *************************************************************************************************/ package org.geotoolkit.geometry.isoonjts.spatialschema.geometry.geometry; import org.apache.sis.referencing.CommonCRS; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Set; import org.geotoolkit.factory.Factory; import org.apache.sis.geometry.GeneralDirectPosition; import org.geotoolkit.geometry.isoonjts.spatialschema.geometry.JTSEnvelope; import org.geotoolkit.geometry.isoonjts.spatialschema.geometry.aggregate.JTSMultiPrimitive; import org.geotoolkit.geometry.isoonjts.spatialschema.geometry.primitive.JTSPolyhedralSurface; import org.geotoolkit.geometry.isoonjts.spatialschema.geometry.primitive.JTSSurfaceBoundary; import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.opengis.geometry.DirectPosition; import org.opengis.geometry.Envelope; import org.opengis.geometry.MismatchedDimensionException; import org.opengis.geometry.MismatchedReferenceSystemException; import org.opengis.geometry.aggregate.MultiPrimitive; import org.opengis.geometry.coordinate.Arc; import org.opengis.geometry.coordinate.ArcByBulge; import org.opengis.geometry.coordinate.ArcString; import org.opengis.geometry.coordinate.ArcStringByBulge; import org.opengis.geometry.coordinate.BSplineCurve; import org.opengis.geometry.coordinate.BSplineSurface; import org.opengis.geometry.coordinate.Geodesic; import org.opengis.geometry.coordinate.GeodesicString; import org.opengis.geometry.coordinate.GeometryFactory; import org.opengis.geometry.coordinate.KnotType; import org.opengis.geometry.coordinate.LineSegment; import org.opengis.geometry.coordinate.LineString; import org.opengis.geometry.coordinate.PointArray; import org.opengis.geometry.coordinate.Polygon; import org.opengis.geometry.coordinate.PolyhedralSurface; import org.opengis.geometry.coordinate.Position; import org.opengis.geometry.coordinate.Tin; import org.opengis.geometry.primitive.Ring; import org.opengis.geometry.primitive.Surface; import org.opengis.geometry.primitive.SurfaceBoundary; /** * The {@code GeometryFactoryImpl} class/interface... * * @author SYS Technologies * @author crossley * @version $Revision $ * @module */ public class JTSGeometryFactory extends Factory implements GeometryFactory { private final CoordinateReferenceSystem crs; /** * No argument constructor for FactorySPI */ public JTSGeometryFactory(){ this( CommonCRS.WGS84.normalizedGeographic()); } /** * Direct constructor for test cases */ public JTSGeometryFactory( final CoordinateReferenceSystem crs ) { this.crs = crs; } //************************************************************************* // implement the GeometryFactory interface //************************************************************************* /** * {@inheritDoc } */ @Override public CoordinateReferenceSystem getCoordinateReferenceSystem() { return crs; } public Position createPosition( final DirectPosition point ) { return new GeneralDirectPosition( point ); } /** * {@inheritDoc } */ @Override public DirectPosition createDirectPosition() { return new GeneralDirectPosition(crs); } /** * {@inheritDoc } */ @Override public DirectPosition createDirectPosition(final double[] coordinates) { GeneralDirectPosition pos = new GeneralDirectPosition(coordinates); pos.setCoordinateReferenceSystem(crs); return pos; } /** * {@inheritDoc } */ @Override public Envelope createEnvelope( final DirectPosition lowerCorner, final DirectPosition upperCorner) { return new JTSEnvelope(lowerCorner, upperCorner); } /** * {@inheritDoc } */ @Override public LineSegment createLineSegment(final Position startPoint, final Position endPoint) { JTSLineSegment line = new JTSLineSegment(); line.getControlPoints().add( startPoint ); line.getControlPoints().add( endPoint ); return line; } /** * {@inheritDoc } */ @Override public LineString createLineString(final List/*<Position>*/ points) { LineString result = new JTSLineString(crs); PointArray pa = result.getControlPoints(); List list = pa; Iterator it = points.iterator(); while (it.hasNext()) { // Object o = it.next(); // if (o instanceof DirectPosition) { // list.add(o); // } else if (o instanceof Position) { // Position p = (Position) o; // DirectPosition dp = p.getPosition(); // /*if (dp == null) { // dp = p.getIndirect().getPosition(); // }*/ // list.add(dp); // } Position position = (Position) it.next(); DirectPosition directPosition = position.getDirectPosition(); list.add(directPosition); } return result; } /** * {@inheritDoc } */ @Override public Geodesic createGeodesic(final Position startPoint, final Position endPoint) { return null; } /** * {@inheritDoc } */ @Override public GeodesicString createGeodesicString(final List/*<Position>*/ points) { return null; } /** * {@inheritDoc } */ @Override public Arc createArc( final Position startPoint, final Position midPoint, final Position endPoint) { return null; } /** * {@inheritDoc } */ @Override public Arc createArc( final Position startPoint, final Position endPoint, final double bulge, final double[] normal) { return null; } /** * {@inheritDoc } */ @Override public ArcString createArcString(final List/*<Position>*/ points) { return null; } /** * {@inheritDoc } */ @Override public ArcByBulge createArcByBulge( final Position startPoint, final Position endPoint, final double bulge, final double[] normal) { return null; } /** * {@inheritDoc } */ @Override public ArcStringByBulge createArcStringByBulge( final List/*<Position>*/ points, final double[] bulges, final List/*<double[]>*/ normals) { return null; } /** * {@inheritDoc } */ @Override public BSplineCurve createBSplineCurve(final int arg0, final PointArray arg1, final List arg2, final KnotType arg3) throws MismatchedReferenceSystemException, MismatchedDimensionException { // TODO Auto-generated method stub return null; } /** * {@inheritDoc } */ @Override public Polygon createPolygon(final SurfaceBoundary boundary) throws MismatchedReferenceSystemException, MismatchedDimensionException { JTSPolygon result = new JTSPolygon(boundary); return result; } /** * {@inheritDoc } */ @Override public Polygon createPolygon(final SurfaceBoundary boundary, final Surface spanningSurface) throws MismatchedReferenceSystemException, MismatchedDimensionException { JTSPolygon result = new JTSPolygon(boundary, Collections.singletonList(spanningSurface)); return result; } /** * {@inheritDoc } */ @Override public Tin createTin(final Set arg0, final Set arg1, final Set arg2, final double arg3) throws MismatchedReferenceSystemException, MismatchedDimensionException { // TODO Auto-generated method stub return null; } /** * @param exterior * @param interiors * @return SurfaceBoundary * @throws MismatchedReferenceSystemException * @see org.opengis.geometry.coordinate.Factory#createSurfaceBoundary(org.opengis.geometry.primitive.Ring, java.util.List) */ public SurfaceBoundary createSurfaceBoundary(final Ring exterior, final List interiors) throws MismatchedReferenceSystemException { return new JTSSurfaceBoundary(crs, exterior, (Ring []) interiors.toArray(new Ring[interiors.size()])); } /** * {@inheritDoc } */ @Override public MultiPrimitive createMultiPrimitive() { return new JTSMultiPrimitive(); } /** * {@inheritDoc } */ @Override public PolyhedralSurface createPolyhedralSurface(final List<Polygon> polygons) throws MismatchedReferenceSystemException, MismatchedDimensionException { JTSPolyhedralSurface result = new JTSPolyhedralSurface(crs); List<?> cast = (List<?>) polygons; result.getPatches().addAll( (List<JTSPolygon>) cast); return result; } /** * {@inheritDoc } */ @Override public BSplineSurface createBSplineSurface( final List arg0, final int[] arg1, final List[] arg2, final KnotType arg3 ) throws MismatchedReferenceSystemException, MismatchedDimensionException { throw new UnsupportedOperationException( "This is the JTS Wrapper Factory which only supports implementations that align with the Simple Feature for SQL Specification."); } }