org.geotools.data.oracle.sdo
Class SDO

java.lang.Object
  extended byorg.geotools.data.oracle.sdo.SDO

public final class SDO
extends java.lang.Object

Oracle Spatial Data Object utilities functions.

Provide utility functions for working with JTS Geometries in terms Oracle Spatial Data Objects

This class can be used for normal JTS Geometry persistence with little fuss and bother - please see GeometryConverter for an example of this.

With a little fuss and bother LRS information can also be handled. Although it is very rare that JTS makes use of such things.

Version:
CVS Version
Author:
Jody Garnett, Refractions Reasearch Inc.
See Also:
Spatial User's Guide (10.1), net.refractions.jspatial.jts

Field Summary
static int SRID_NULL
           
 
Constructor Summary
SDO()
           
 
Method Summary
static com.vividsolutions.jts.geom.Coordinate[] asCoordiantes(double[] ordinates, int d)
          Coordiantes from a (x,y,i3..
static com.vividsolutions.jts.geom.Coordinate[] asCoordinates(double[] ordinates)
          Coordiantes from (x,y,x2,y2,...)
static com.vividsolutions.jts.geom.CoordinateSequence coordiantes(com.vividsolutions.jts.geom.CoordinateSequenceFactory f, AttributeList x, AttributeList y, AttributeList z)
          Construct CoordinateSequence with no LRS measures.
static com.vividsolutions.jts.geom.CoordinateSequence coordiantes(com.vividsolutions.jts.geom.CoordinateSequenceFactory f, AttributeList x, AttributeList y, AttributeList z, AttributeList[] m)
          Construct SpatialCoordiantes, with LRS measure information.
static com.vividsolutions.jts.geom.CoordinateSequence coordiantes(com.vividsolutions.jts.geom.CoordinateSequenceFactory f, OrdinateList x, OrdinateList y, OrdinateList z)
          Construct CoordinateSequence with no LRS measures.
static com.vividsolutions.jts.geom.CoordinateSequence coordiantes(com.vividsolutions.jts.geom.CoordinateSequenceFactory f, OrdinateList x, OrdinateList y, OrdinateList z, OrdinateList[] m)
          Construct SpatialCoordiantes, with LRS measure information.
static com.vividsolutions.jts.geom.CoordinateSequence coordinates(com.vividsolutions.jts.geom.CoordinateSequenceFactory f, int GTYPE, double[] ordinates)
          Construct CoordinateList as described by GTYPE.
static void coordinates(java.util.List list, com.vividsolutions.jts.geom.Geometry geom)
          Encode Geometry as described by GTYPE and ELEM_INFO CoordinateSequence & CoordinateAccess wil be used to determine the dimension, and the number of ordinates added.
static com.vividsolutions.jts.geom.CoordinateSequence counterClockWise(com.vividsolutions.jts.geom.CoordinateSequenceFactory factory, com.vividsolutions.jts.geom.CoordinateSequence ring)
          Ensure Ring of Coordinates are in a counter clockwise order.
static com.vividsolutions.jts.geom.Geometry create(com.vividsolutions.jts.geom.GeometryFactory gf, int GTYPE, int SRID, double[] point, int[] elemInfo, double[] ordinates)
          Decode geometry from provided SDO encoded information.
static com.vividsolutions.jts.geom.Geometry create(com.vividsolutions.jts.geom.GeometryFactory gf, int GTYPE, int SRID, int[] elemInfo, int triplet, com.vividsolutions.jts.geom.CoordinateSequence coords, int N)
          Consturct geometry with SDO encoded information over a CoordinateList.
static int D(com.vividsolutions.jts.geom.Geometry geom)
          Return D as defined by SDO_GTYPE (either 2,3 or 4).
static int D(int GTYPE)
          Access D (for dimension) as encoded in GTYPE
static int[] elemInfo(com.vividsolutions.jts.geom.Geometry geom)
          Return SDO_ELEM_INFO array for geometry Describes how to use Ordinates to represent Geometry.
static int[] elemInfo(com.vividsolutions.jts.geom.Geometry geom, int GTYPE)
           
protected static int elemInfoEType(com.vividsolutions.jts.geom.Geometry geom)
          Produce SDO_ETYPE for geometry description as stored in the SDO_ELEM_INFO.
static int elemInfoInterpretation(com.vividsolutions.jts.geom.Geometry geom)
          Produce SDO_INTERPRETATION for geometry description as stored in the SDO_ELEM_INFO.
static int elemInfoInterpretation(com.vividsolutions.jts.geom.Geometry geom, int etype)
          Allows specification of INTERPRETATION used to interpret geom.
static int elemInfoStartingOffset(com.vividsolutions.jts.geom.Geometry geom)
          Starting offset used by SDO_ORDINATES as stored in the SDO_ELEM_INFO array.
static com.vividsolutions.jts.geom.CoordinateSequence getCS(com.vividsolutions.jts.geom.Geometry geom)
           
static int gType(com.vividsolutions.jts.geom.Geometry geom)
          Produce SDO_GTYPE representing provided Geometry.
static int L(com.vividsolutions.jts.geom.Geometry geom)
          Return L as defined by SDO_GTYPE (either 3,4 or 0).
static int L(int GTYPE)
          Access L (for LRS) as encoded in GTYPE
static double[] ordinateArray(com.vividsolutions.jts.geom.Coordinate[] array, int ordinate)
          Ordinate access.
static double[] ordinateArray(com.vividsolutions.jts.geom.CoordinateSequence coords, int ordinate)
          Package up array of requested ordinate, regardless of geometry Example numbering: for (x y g m) dimension==2, measure==2 0: x ordinate array 1: y ordinate array 2: g ordinate array 3: m ordinate array
static double[] ordinateArray(java.util.List list, int ordinate)
           
static double[] ordinates(com.vividsolutions.jts.geom.Geometry geom)
          Produce SDO_ORDINATES for geometry.
static double[] ordinates(java.util.List list, com.vividsolutions.jts.geom.Geometry geom)
          Package up array in correct manner for geom.
static double[] ordinates2d(java.util.List list)
          Ordinates (x,y,x1,y1,...) from coordiante list.
static double[] ordinates2d(java.util.List list, int L)
          Ordinates (x,y,...id,x2,y2,...) from coordiante[] List.
static double[] ordinates3d(java.util.List list)
          Ordinates (x,y,z,x2,y2,z2...) from coordiante[] array.
static double[] ordinates3d(java.util.List list, int L)
          Ordinates (x,y,z,...id,x2,y2,z2...) from coordiante[] array.
static double[] point(com.vividsolutions.jts.geom.Geometry geom)
          Return SDO_POINT_TYPE for geometry Will return non null for Point objects.
static int SRID(com.vividsolutions.jts.geom.Geometry geom)
          Returns geometry SRID.
static int TT(com.vividsolutions.jts.geom.Geometry geom)
          Return TT as defined by SDO_GTYPE (represents geometry type).
static int TT(int GTYPE)
          Access TT (for geometry type) as encoded in GTYPE
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

SRID_NULL

public static final int SRID_NULL
See Also:
Constant Field Values
Constructor Detail

SDO

public SDO()
Method Detail

gType

public static int gType(com.vividsolutions.jts.geom.Geometry geom)
Produce SDO_GTYPE representing provided Geometry.

Encoding of Geometry type and dimension.

SDO_GTYPE defined as for digits [d][l][tt]:

Definition provided by Oracle Spatial User???s Guide and Reference.

Parameters:
geom -
Returns:

D

public static int D(com.vividsolutions.jts.geom.Geometry geom)
Return D as defined by SDO_GTYPE (either 2,3 or 4).

For normal JTS Geometry this will be 2 or 3 depending if geom.getCoordinate.z is Double.NaN.

Subclasses may override as required.

Parameters:
geom -
Returns:
3

L

public static int L(com.vividsolutions.jts.geom.Geometry geom)
Return L as defined by SDO_GTYPE (either 3,4 or 0).

L represents support for LRS (Liniar Referencing System?). JTS Geometry objects do not support LRS so this will be 0.

Subclasses may override as required.

Parameters:
geom -
Returns:
0

TT

public static int TT(com.vividsolutions.jts.geom.Geometry geom)
Return TT as defined by SDO_GTYPE (represents geometry type).

TT is used to represent the type of the JTS Geometry:


 Value Geometry Type    JTS Geometry
 00    UNKNOWN_GEOMETRY null
 01    POINT            Point
 02    LINE             LineString
       CURVE            not supported
 03    POLYGON          Polygon
 04    COLLECTION       GeometryCollection
 05    MULTIPOINT       MultiPoint
 06    MULTILINE        MultiLineString
       MULTICURVE       not supported
 07    MULTIPOLYGON     MultiPolygon
 

Parameters:
geom -
Returns:
TT representing geom
Throws:
java.lang.IllegalArgumentException - If SDO_GTYPE can not be represetned by JTS

SRID

public static int SRID(com.vividsolutions.jts.geom.Geometry geom)
Returns geometry SRID.

SRID code representing Spatial Reference System. SRID number used must be defined in the Oracle MDSYS.CS_SRS table.

SRID_NULLrepresents lack of coordinate system.

Parameters:
geom - Geometry SRID Number (JTS14 uses GeometryFactor.getSRID() )
Returns:
SRID for provided geom

point

public static double[] point(com.vividsolutions.jts.geom.Geometry geom)
Return SDO_POINT_TYPE for geometry

Will return non null for Point objects. null is returned for all non point objects.

You cannot use this with LRS Coordiantes

Subclasses may wish to repress this method and force Points to be represented using SDO_ORDINATES.

Parameters:
geom -
Returns:

elemInfo

public static int[] elemInfo(com.vividsolutions.jts.geom.Geometry geom)
Return SDO_ELEM_INFO array for geometry

Describes how to use Ordinates to represent Geometry.


 # Name                Meaning
 0 SDO_STARTING_OFFSET Offsets start at one
 1 SDO_ETYPE           Describes how ordinates are ordered
 2 SDO_INTERPRETATION  SDO_ETYPE: 4, 1005, or 2005
                       Number of triplets involved in compound geometry
                       
                       SDO_ETYPE: 1, 2, 1003, or 2003
                       Describes ordering of ordinates in geometry  
 

For compound elements (SDO_ETYPE values 4 and 5) the last element of one is the first element of the next.

Parameters:
geom - Geometry being represented
Returns:
Descriptionof Ordinates representation

elemInfo

public static int[] elemInfo(com.vividsolutions.jts.geom.Geometry geom,
                             int GTYPE)

elemInfoStartingOffset

public static int elemInfoStartingOffset(com.vividsolutions.jts.geom.Geometry geom)
Starting offset used by SDO_ORDINATES as stored in the SDO_ELEM_INFO array.

Starting offsets start from one.

Describes ordinates as part of SDO_ELEM_INFO data type.

Parameters:
geom -
Returns:
1 for non nested geom

elemInfoEType

protected static int elemInfoEType(com.vividsolutions.jts.geom.Geometry geom)
Produce SDO_ETYPE for geometry description as stored in the SDO_ELEM_INFO.

Describes how Ordinates are ordered:


 Value Elements Meaning
    0           Custom Geometry (like spline) 
    1  simple   Point (or Points)
    2  simple   Line (or Lines)
    3           polygon ring of unknown order (discouraged update to 1003 or 2003)
 1003  simple   polygon ring (1 exterior counterclockwise order)
 2003  simple   polygon ring (2 interior clockwise order)
    4  compound series defines a linestring
    5  compound series defines a polygon ring of unknown order (discouraged)
 1005  compound series defines exterior polygon ring (counterclockwise order)
 2005  compound series defines interior polygon ring (clockwise order)
 

Keep in mind:

This whole mess describes ordinates as part of SDO_ELEM_INFO array. data type.

Parameters:
geom - Geometry being represented
Returns:
Descriptionof Ordinates representation
Throws:
java.lang.IllegalArgumentException

elemInfoInterpretation

public static int elemInfoInterpretation(com.vividsolutions.jts.geom.Geometry geom)
Produce SDO_INTERPRETATION for geometry description as stored in the SDO_ELEM_INFO.

Describes ordinates as part of SDO_ELEM_INFO array.

SDO_INTERPRETAION Values: (from Table 2-2 in reference docs)


 SDO_ETYPE Value    Meaning
 0         anything Custom Geometry
 1         1        Point
 1         N > 1    N points
 2         1        LineString of straight lines
 2         2        LineString connected by circ arcs (start,any,end pt)
 1003/2003 1        Polygon Edged with straight lines
 1003/2003 2        Polygon Edged with circ arcs (start, any, end pt)
 1003/2003 3        Non SRID rectangle defined by (bottomleft,topright pt)
 1003/2003 4        Circle defined by three points on circumference
 4         N > 1    Compound Line String made of N (ETYPE=2) lines and arcs
 1005/2005 N > 1    Polygon defined by (ETYPE=2) lines and arcs
 
                 
 

When playing with circular arcs (SDO_INTERPRETATION==2) arcs are defined by three points. A start point, any point on the arc and the end point. The last point of an arc is the start point of the next. When used to describe a polygon (SDO_ETYPE==1003 or 2003) the first and last point must be the same.

Parameters:
geom -
Returns:

elemInfoInterpretation

public static int elemInfoInterpretation(com.vividsolutions.jts.geom.Geometry geom,
                                         int etype)
Allows specification of INTERPRETATION used to interpret geom.

Provides the INTERPRETATION value for the ELEM_INFO triplet of (STARTING_OFFSET, ETYPE, INTERPRETATION).

Parameters:
geom - Geometry to encode
etype - ETYPE value requiring an INTERPREATION
Returns:
INTERPRETATION ELEM_INFO entry for geom given etype
Throws:
java.lang.IllegalArgumentException - If asked to encode a curve

ordinates

public static double[] ordinates(com.vividsolutions.jts.geom.Geometry geom)
Produce SDO_ORDINATES for geometry.

Please see SDO_ETYPE, SDO_INTERPRETATION and SDO_GTYPE for description of how these ordinates are to be interpreted.

Ordinates are ordered by Dimension are non null:

Spatial will siliently detect and ignore the following:

While Oracle is silient on these errors - all other errors will not be detected!

Parameters:
geom -
Returns:

getCS

public static com.vividsolutions.jts.geom.CoordinateSequence getCS(com.vividsolutions.jts.geom.Geometry geom)

coordinates

public static void coordinates(java.util.List list,
                               com.vividsolutions.jts.geom.Geometry geom)
Encode Geometry as described by GTYPE and ELEM_INFO

CoordinateSequence & CoordinateAccess wil be used to determine the dimension, and the number of ordinates added.

Parameters:
list - Flat list of Double
geom - Geometry
Throws:
java.lang.IllegalArgumentException - If geometry cannot be encoded

ordinateArray

public static double[] ordinateArray(com.vividsolutions.jts.geom.CoordinateSequence coords,
                                     int ordinate)
Package up array of requested ordinate, regardless of geometry

Example numbering: for (x y g m) dimension==2, measure==2

Parameters:
coords -
ordinate -
Returns:

ordinateArray

public static double[] ordinateArray(com.vividsolutions.jts.geom.Coordinate[] array,
                                     int ordinate)
Ordinate access.

CoordianteAccess is required for additional ordinates.

Ordinate limitied to:

Parameters:
array -
ordinate -
Returns:

ordinateArray

public static double[] ordinateArray(java.util.List list,
                                     int ordinate)

ordinates

public static double[] ordinates(java.util.List list,
                                 com.vividsolutions.jts.geom.Geometry geom)
Package up array in correct manner for geom.

Ordinates are placed into an array based on:

Parameters:
list -
geom -
Returns:

ordinates2d

public static double[] ordinates2d(java.util.List list)
Ordinates (x,y,x1,y1,...) from coordiante list.

No assumptions are made about the order

Parameters:
list - coordinate list
Returns:
ordinate array

ordinates3d

public static double[] ordinates3d(java.util.List list)
Ordinates (x,y,z,x2,y2,z2...) from coordiante[] array.

Parameters:
list - List of coordiante
Returns:
ordinate array

ordinates2d

public static double[] ordinates2d(java.util.List list,
                                   int L)
Ordinates (x,y,...id,x2,y2,...) from coordiante[] List.

Parameters:
list - coordiante list
L - Dimension of ordinates required for representation
Returns:
ordinate array

ordinates3d

public static double[] ordinates3d(java.util.List list,
                                   int L)
Ordinates (x,y,z,...id,x2,y2,z2...) from coordiante[] array.

Parameters:
list - coordinate array to be represented as ordinates
L - Dimension of ordinates required for representation
Returns:
ordinate array

counterClockWise

public static com.vividsolutions.jts.geom.CoordinateSequence counterClockWise(com.vividsolutions.jts.geom.CoordinateSequenceFactory factory,
                                                                              com.vividsolutions.jts.geom.CoordinateSequence ring)
Ensure Ring of Coordinates are in a counter clockwise order.

If the Coordiante need to be reversed a copy will be returned.

Parameters:
factory - Factory to used to reverse CoordianteSequence
ring - Ring of Coordinates
Returns:
coords in a CCW order

D

public static int D(int GTYPE)
Access D (for dimension) as encoded in GTYPE

Parameters:
GTYPE - DOCUMENT ME!
Returns:
DOCUMENT ME!

L

public static int L(int GTYPE)
Access L (for LRS) as encoded in GTYPE

Parameters:
GTYPE - DOCUMENT ME!
Returns:
DOCUMENT ME!

TT

public static int TT(int GTYPE)
Access TT (for geometry type) as encoded in GTYPE

Parameters:
GTYPE - DOCUMENT ME!
Returns:
DOCUMENT ME!

asCoordinates

public static com.vividsolutions.jts.geom.Coordinate[] asCoordinates(double[] ordinates)
Coordiantes from (x,y,x2,y2,...) ordinates.

Parameters:
ordinates - DOCUMENT ME!
Returns:
DOCUMENT ME!

asCoordiantes

public static com.vividsolutions.jts.geom.Coordinate[] asCoordiantes(double[] ordinates,
                                                                     int d)
Coordiantes from a (x,y,i3..,id,x2,y2...) ordinates.

Parameters:
ordinates - DOCUMENT ME!
d - DOCUMENT ME!
Returns:
DOCUMENT ME!

coordinates

public static com.vividsolutions.jts.geom.CoordinateSequence coordinates(com.vividsolutions.jts.geom.CoordinateSequenceFactory f,
                                                                         int GTYPE,
                                                                         double[] ordinates)
Construct CoordinateList as described by GTYPE.

GTYPE encodes the following information:

The number of ordinates per coordinate are taken to be L+D, and the number of ordinates should be a multiple of this value.

In the Special case of GTYPE 2001 and a three ordinates are interpreted as a single Coordinate rather than an error.

Parameters:
f - CoordinateSequenceFactory used to encode ordiantes for JTS
GTYPE - Encoding of Dimension, LRS and TType
ordinates -
Returns:
Throws:
java.lang.IllegalArgumentException - DOCUMENT ME!

coordiantes

public static com.vividsolutions.jts.geom.CoordinateSequence coordiantes(com.vividsolutions.jts.geom.CoordinateSequenceFactory f,
                                                                         OrdinateList x,
                                                                         OrdinateList y,
                                                                         OrdinateList z)
Construct CoordinateSequence with no LRS measures.

To produce two dimension Coordiantes pass in null for z

Parameters:
f - DOCUMENT ME!
x - DOCUMENT ME!
y - DOCUMENT ME!
z - DOCUMENT ME!
Returns:
DOCUMENT ME!

coordiantes

public static com.vividsolutions.jts.geom.CoordinateSequence coordiantes(com.vividsolutions.jts.geom.CoordinateSequenceFactory f,
                                                                         AttributeList x,
                                                                         AttributeList y,
                                                                         AttributeList z)
Construct CoordinateSequence with no LRS measures.

To produce two dimension Coordiantes pass in null for z

Parameters:
f - DOCUMENT ME!
x - DOCUMENT ME!
y - DOCUMENT ME!
z - DOCUMENT ME!
Returns:
DOCUMENT ME!

coordiantes

public static com.vividsolutions.jts.geom.CoordinateSequence coordiantes(com.vividsolutions.jts.geom.CoordinateSequenceFactory f,
                                                                         OrdinateList x,
                                                                         OrdinateList y,
                                                                         OrdinateList z,
                                                                         OrdinateList[] m)
Construct SpatialCoordiantes, with LRS measure information.

To produce two dimension Coordiantes pass in null for z

Parameters:
f - DOCUMENT ME!
x - x-ordinates
y - y-ordinates
z - z-ordinates, null for 2D
m - column major measure information
Returns:
DOCUMENT ME!

coordiantes

public static com.vividsolutions.jts.geom.CoordinateSequence coordiantes(com.vividsolutions.jts.geom.CoordinateSequenceFactory f,
                                                                         AttributeList x,
                                                                         AttributeList y,
                                                                         AttributeList z,
                                                                         AttributeList[] m)
Construct SpatialCoordiantes, with LRS measure information.

To produce two dimension Coordiantes pass in null for z

Parameters:
f - DOCUMENT ME!
x - x-ordinates
y - y-ordinates
z - z-ordinates, null for 2D
m - column major measure information
Returns:
DOCUMENT ME!

create

public static com.vividsolutions.jts.geom.Geometry create(com.vividsolutions.jts.geom.GeometryFactory gf,
                                                          int GTYPE,
                                                          int SRID,
                                                          double[] point,
                                                          int[] elemInfo,
                                                          double[] ordinates)
Decode geometry from provided SDO encoded information.

Parameters:
gf - Used to construct returned Geometry
GTYPE - SDO_GTYPE represents dimension, LRS, and geometry type
SRID - SDO_SRID represents Spatial Reference System
point -
elemInfo -
ordinates -
Returns:
Geometry as encoded

create

public static com.vividsolutions.jts.geom.Geometry create(com.vividsolutions.jts.geom.GeometryFactory gf,
                                                          int GTYPE,
                                                          int SRID,
                                                          int[] elemInfo,
                                                          int triplet,
                                                          com.vividsolutions.jts.geom.CoordinateSequence coords,
                                                          int N)
Consturct geometry with SDO encoded information over a CoordinateList.

Helpful when dealing construction Geometries with your own Coordiante Types. The dimensionality specified in GTYPE will be used to interpret the offsets in elemInfo.

Parameters:
gf -
GTYPE - Encoding of Dimension, LRS and TType
SRID -
elemInfo -
triplet - DOCUMENT ME!
coords -
N - Number of triplets (-1 for unknown/don't care)
Returns:
Geometry as encoded, or null w/ log if it cannot be represented via JTS


Copyright © GeoTools. All Rights Reserved.