Class GeometryConverter

Object
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
     
    static final String
     
  • Constructor Summary

    Constructors
    Constructor
    Description
    GeometryConverter(OracleConnection connection)
     
    GeometryConverter(OracleConnection connection, GeometryFactory geometryFactory)
     
  • Method Summary

    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
    Representation of null as an Empty SDO_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
    Used to handle MDSYS.SDO_GEOMETRY.
    boolean
    Ensure that obj is a JTS Geometry (2D or 3D) with no LRS measures.
    protected final OracleArray
    toARRAY(double[] doubles, String dataType)
    Convenience method for OracleArray construction.
    protected final OracleArray
    toARRAY(int[] ints, String dataType)
    Convenience method for OracleArray construction.
    protected final OracleArray
    toATTRIBUTE(double[] ords, String desc)
     
    protected final CHAR
    Convenience method for CHAR construction
    protected final NUMBER
    toNUMBER(double number)
    Convenience method for NUMBER construction.
    protected final NUMBER
    toNUMBER(int number)
    Convenience method for NUMBER construction
    protected final OracleArray
    toORDINATE(double[] ords)
     
    protected final OracleArray
    toORDINATE(CoordinateList list, double[][] measures, int D)
    Convenience method for OracleArray construction.
    OracleStruct
    Used to convert double[] to SDO_ODINATE_ARRAY.
    OracleStruct
    toSDO(Geometry geom, int srid)
    Used to convert double[] to SDO_ODINATE_ARRAY.
    protected final OracleStruct
    toSTRUCT(Datum[] attributes, String dataType)
    Convenience method for OracleStruct construction.

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

  • Constructor Details

    • GeometryConverter

      public GeometryConverter(OracleConnection connection)
    • GeometryConverter

      public GeometryConverter(OracleConnection connection, GeometryFactory geometryFactory)
  • Method Details

    • getDataTypeName

      public String getDataTypeName()
      Used to handle MDSYS.SDO_GEOMETRY.
      Returns:
      MDSYS.SDO_GEOMETRY
      See Also:
    • 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)
       }
       </pre>
      
       @param list CoordinateList to be represented
       @param measures Per Coordinate Measures, {@code null} if not required
       @param D Dimension of Coordinates (limited to 2d, 3d)
      Throws:
      SQLException
    • toORDINATE

      protected final OracleArray toORDINATE(double[] ords) throws SQLException
      Throws:
      SQLException
    • toATTRIBUTE

      protected final OracleArray toATTRIBUTE(double[] ords, String desc) throws SQLException
      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(OracleArray array, int DEFAULT) throws SQLException
      Throws:
      SQLException
    • asIntArray

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