Class GeometryConverter


  • public class GeometryConverter
    extends Object
    Sample use of SDO class for simple JTS Geometry.

    If needed I can make a LRSGeometryConverter that allows JTS Geometries with additional ordinates beyond xyz.

    Author:
    jgarnett, Mark Prins, B3Partners
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected OracleConnection connection  
      static String DATATYPE  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected double asDouble​(Datum datum, double DEFAULT)
      Presents datum as a double
      protected double[] asDoubleArray​(OracleArray array, double DEFAULT)
      Presents array as a double[]
      protected double[] asDoubleArray​(OracleStruct struct, double DEFAULT)
      Presents struct as a double[]
      protected double[] asDoubleArray​(Datum[] data, double DEFAULT)
      Presents Datum[] as a double[]
      protected OracleStruct asEmptyDataType()
      Representation of null as an Empty SDO_GEOMETRY.
      Geometry asGeometry​(OracleStruct sdoGeometry)
      Convert provided SDO_GEOMETRY to JTS Geometry.
      protected int[] asIntArray​(OracleArray array, int DEFAULT)  
      protected int[] asIntArray​(Datum[] data, int DEFAULT)
      Presents Datum[] as a int[]
      protected int asInteger​(Datum datum, int DEFAULT)
      Presents datum as an int
      String getDataTypeName()
      Used to handle MDSYS.SDO_GEOMETRY.
      boolean isCapable​(Geometry geom)
      Ensure that obj is a JTS Geometry (2D or 3D) with no LRS measures.
      protected OracleArray toARRAY​(double[] doubles, String dataType)
      Convenience method for OracleArray construction.
      protected OracleArray toARRAY​(int[] ints, String dataType)
      Convenience method for OracleArray construction.
      protected OracleArray toATTRIBUTE​(double[] ords, String desc)  
      protected CHAR toCHAR​(String s)
      Convenience method for CHAR construction
      protected NUMBER toNUMBER​(double number)
      Convenience method for NUMBER construction.
      protected NUMBER toNUMBER​(int number)
      Convenience method for NUMBER construction
      protected OracleArray toORDINATE​(double[] ords)  
      protected OracleArray toORDINATE​(CoordinateList list, double[][] measures, int D)
      Convenience method for OracleArray construction.
      OracleStruct toSDO​(Geometry geom)
      Used to convert double[] to SDO_ODINATE_ARRAY.
      OracleStruct toSDO​(Geometry geom, int srid)
      Used to convert double[] to SDO_ODINATE_ARRAY.
      protected OracleStruct toSTRUCT​(Datum[] attributes, String dataType)
      Convenience method for OracleStruct construction.
    • Constructor Detail

      • GeometryConverter

        public GeometryConverter​(OracleConnection connection)
      • GeometryConverter

        public GeometryConverter​(OracleConnection connection,
                                 GeometryFactory geometryFactory)
    • Method Detail

      • getDataTypeName

        public String getDataTypeName()
        Used to handle MDSYS.SDO_GEOMETRY.
        Returns:
        MDSYS.SDO_GEOMETRY
        See Also:
        DATATYPE
      • isCapable

        public boolean isCapable​(Geometry geom)
        Ensure that obj is a JTS Geometry (2D or 3D) with no LRS measures.

        This Converter does not support SpatialCoordinates

        Parameters:
        geom - the Geometry to be converted
        Returns:
        true if obj is a JTS Geometry
      • asGeometry

        public Geometry asGeometry​(OracleStruct sdoGeometry)
                            throws SQLException
        Convert provided SDO_GEOMETRY to JTS Geometry.

        Will return null as null.

        Parameters:
        sdoGeometry - datum STRUCT to be converted to a geometry
        Returns:
        JTS Geometry representing the provided datum
        Throws:
        SQLException
      • toSDO

        public OracleStruct toSDO​(Geometry geom)
                           throws SQLException
        Used to convert double[] to SDO_ODINATE_ARRAY.

        Will return null as an empty SDO_GEOMETRY

        Parameters:
        geom - Map to be represented as a STRUCT
        Returns:
        Struct representing provided Map
        Throws:
        SQLException
      • toSDO

        public OracleStruct toSDO​(Geometry geom,
                                  int srid)
                           throws SQLException
        Used to convert double[] to SDO_ODINATE_ARRAY.

        Will return null as an empty SDO_GEOMETRY

        Parameters:
        geom - Map to be represented as a STRUCT
        Returns:
        STRUCT representing provided Map
        Throws:
        SQLException
      • asEmptyDataType

        protected OracleStruct asEmptyDataType()
                                        throws SQLException
        Representation of null as an Empty SDO_GEOMETRY.
        Returns:
        null as a SDO_GEOMETRY
        Throws:
        SQLException
      • toSTRUCT

        protected final OracleStruct toSTRUCT​(Datum[] attributes,
                                              String dataType)
                                       throws SQLException
        Convenience method for OracleStruct construction.
        Throws:
        SQLException
      • toARRAY

        protected final OracleArray toARRAY​(double[] doubles,
                                            String dataType)
                                     throws SQLException
        Convenience method for OracleArray construction.

        Compare and contrast with toORDINATE - which treats Double.NaN as NULL

        Throws:
        SQLException
      • toORDINATE

        protected final OracleArray toORDINATE​(CoordinateList list,
                                               double[][] measures,
                                               int D)
                                        throws SQLException
        Convenience method for OracleArray construction.

        Forced to burn memory here - only way to actually place NULL numbers in the ordinate stream.

        • JTS: records lack of data as Double.NaN
        • SDO: records lack of data as NULL

        The alternative is to construct the array from a array of doubles, which does not record NULL NUMBERs.

        The results is an "MDSYS.SDO_ORDINATE_ARRAY"

         {@code
         list     = c1(1,2,0), c2(3,4,Double.NaN)
         measures = {{5,6},{7,8}
        
         toORDINATE( list, measures, 2 )
         = (1,2,5,7, 3,4,6,8)
        
         toORDINATE( list, measures, 3 )
         = (1,2,0,5,7, 3,4,NULL,6,8)
        
         toORDINATE( list, null, 2 )
         = (1,2, 3,4)
         }
         
        Parameters:
        list - CoordinateList to be represented
        measures - Per Coordinate Measures, null if not required
        D - Dimension of Coordinates (limited to 2d, 3d)
        Throws:
        SQLException
      • toNUMBER

        protected final NUMBER toNUMBER​(double number)
                                 throws SQLException
        Convenience method for NUMBER construction.

        Double.NaN is represented as NULL to agree with JTS use.

        Throws:
        SQLException
      • toARRAY

        protected final OracleArray toARRAY​(int[] ints,
                                            String dataType)
                                     throws SQLException
        Convenience method for OracleArray construction.
        Throws:
        SQLException
      • toNUMBER

        protected final NUMBER toNUMBER​(int number)
        Convenience method for NUMBER construction
      • toCHAR

        protected final CHAR toCHAR​(String s)
        Convenience method for CHAR construction
      • asInteger

        protected int asInteger​(Datum datum,
                                int DEFAULT)
                         throws SQLException
        Presents datum as an int
        Throws:
        SQLException
      • asDouble

        protected double asDouble​(Datum datum,
                                  double DEFAULT)
                           throws SQLException
        Presents datum as a double
        Throws:
        SQLException
      • asDoubleArray

        protected double[] asDoubleArray​(OracleStruct struct,
                                         double DEFAULT)
                                  throws SQLException
        Presents struct as a double[]
        Throws:
        SQLException
      • asDoubleArray

        protected double[] asDoubleArray​(OracleArray array,
                                         double DEFAULT)
                                  throws SQLException
        Presents array as a double[]
        Throws:
        SQLException
      • asDoubleArray

        protected double[] asDoubleArray​(Datum[] data,
                                         double DEFAULT)
                                  throws SQLException
        Presents Datum[] as a double[]
        Throws:
        SQLException
      • asIntArray

        protected int[] asIntArray​(Datum[] data,
                                   int DEFAULT)
                            throws SQLException
        Presents Datum[] as a int[]
        Throws:
        SQLException