public final class SDO extends Object
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.
net.refractions.jspatial.jts
Modifier and Type | Field and Description |
---|---|
static int |
SRID_NULL |
Constructor and Description |
---|
SDO() |
Modifier and Type | Method and Description |
---|---|
static Coordinate[] |
asCoordinates(double[] ordinates)
Coordinates from
(x,y,x2,y2,...) |
static Coordinate[] |
asCoordinates(double[] ordinates,
int d)
Coordinates from a
(x,y,i3.. |
static CoordinateSequence |
coordiantes(CoordinateSequenceFactory f,
AttributeList x,
AttributeList y,
AttributeList z)
Construct CoordinateSequence with no LRS measures.
|
static CoordinateSequence |
coordiantes(CoordinateSequenceFactory f,
OrdinateList x,
OrdinateList y,
OrdinateList z)
Construct CoordinateSequence with no LRS measures.
|
static CoordinateSequence |
coordiantes(CoordinateSequenceFactory f,
OrdinateList x,
OrdinateList y,
OrdinateList z,
OrdinateList m)
bugfix 20121231-BK: added: TODO org.geotools.geometry.jts.CoordinateSequenceFactory does not
support 4 dimensions!
|
static CoordinateSequence |
coordinates(CoordinateSequenceFactory f,
int GTYPE,
double[] ordinates)
Construct CoordinateList as described by GTYPE.
|
static void |
coordinates(List<double[]> list,
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 CoordinateSequence |
counterClockWise(CoordinateSequenceFactory factory,
CoordinateSequence ring)
Ensure Ring of Coordinates are in a counter Orientationwise order.
|
static Geometry |
create(GeometryFactory gf,
int GTYPE,
int SRID,
double[] point,
int[] elemInfo,
double[] ordinates)
Decode geometry from provided SDO encoded information.
|
static Geometry |
create(GeometryFactory gf,
int GTYPE,
int SRID,
int[] elemInfo,
int triplet,
CoordinateSequence coords,
int N)
Consturct geometry with SDO encoded information over a CoordinateList.
|
static int |
D(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(Geometry geom)
Return SDO_ELEM_INFO array for geometry
Describes how to use Ordinates to represent Geometry.
|
static int[] |
elemInfo(Geometry geom,
int GTYPE) |
protected static int |
elemInfoEType(Geometry geom)
Produce
SDO_ETYPE for geometry description as stored in the SDO_ELEM_INFO
. |
static int |
elemInfoInterpretation(Geometry geom)
Produce
SDO_INTERPRETATION for geometry description as stored in the
SDO_ELEM_INFO . |
static int |
elemInfoInterpretation(Geometry geom,
int etype)
Allows specification of
INTERPRETATION used to interpret geom . |
static int |
elemInfoStartingOffset(Geometry geom)
Starting offset used by SDO_ORDINATES as stored in the SDO_ELEM_INFO array.
|
static CoordinateSequence |
getCS(Geometry geom) |
static int |
gType(Geometry geom)
Produce SDO_GTYPE representing provided Geometry.
|
static int |
L(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(Coordinate[] array,
int ordinate)
Ordinate access.
|
static double[] |
ordinateArray(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(List list,
int ordinate) |
static double[] |
ordinates(Geometry geom)
Produce
SDO_ORDINATES for geometry. |
static double[] |
ordinates(List list,
Geometry geom)
Package up
array in correct manner for geom . |
static double[] |
ordinates2d(List list)
Ordinates (x,y,x1,y1,...) from coordiante list.
|
static double[] |
ordinates2d(List list,
int L)
Ordinates (x,y,...id,x2,y2,...) from coordiante[] List.
|
static double[] |
ordinates3d(List list)
Ordinates (x,y,z,x2,y2,z2...) from coordiante[] array.
|
static double[] |
ordinates3d(List list,
int L)
Ordinates (x,y,z,...id,x2,y2,z2...) from coordiante[] array.
|
static double[] |
point(Geometry geom)
Return SDO_POINT_TYPE for geometry
Will return non null for Point objects.
|
static int |
SRID(Geometry geom)
Returns geometry SRID.
|
static int |
TT(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
|
public static final int SRID_NULL
public static int gType(Geometry geom)
Encoding of Geometry type and dimension.
SDO_GTYPE defined as for digits [d][l][tt]
:
d
: number of dimensions (limited to 2,3, or 4)
l
: measure representation (ordinate 3 or 4) or 0 to represent
none/last
tt:
See the TT. constants defined in this class
Definition provided by Oracle Spatial User�s Guide and Reference.
public static int D(Geometry geom)
For normal JTS Geometry this will be 2 or 3 depending if geom.getCoordinate.z is Double.NaN.
Subclasses may override as required.
3
public static int L(Geometry geom)
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.
0
public static int TT(Geometry geom)
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
TT
representing geom
IllegalArgumentException
- If SDO_GTYPE can not be represetned by JTSpublic static int SRID(Geometry geom)
SRID code representing Spatial Reference System. SRID number used must be defined in the Oracle MDSYS.CS_SRS table.
SRID_NULL
represents lack of coordinate system.
geom
- Geometry SRID Number (JTS14 uses GeometryFactor.getSRID() )SRID
for provided geompublic static double[] point(Geometry geom)
Will return non null for Point objects. null
is returned for all non point
objects.
You cannot use this with LRS Coordinates
Subclasses may wish to repress this method and force Points to be represented using SDO_ORDINATES.
public static int[] elemInfo(Geometry geom)
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.
geom
- Geometry being representedpublic static int[] elemInfo(Geometry geom, int GTYPE)
public static int elemInfoStartingOffset(Geometry geom)
Starting offsets start from one.
Describes ordinates as part of SDO_ELEM_INFO
data type.
1
for non nested geom
protected static int elemInfoEType(Geometry geom)
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 counterOrientationwise order)
2003 simple polygon ring (2 interior Orientationwise 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 (counterOrientationwise order)
2005 compound series defines interior polygon ring (Orientationwise order)
Keep in mind:
simple
elements are defined by a single triplet entry in the
SDO_ELEM_INFO
array
compound
elements are defined by a header triplet, and a series of
triplets for the parts. Elements in a compound element share first and last points.
This whole mess describes ordinates as part of SDO_ELEM_INFO
array. data
type.
geom
- Geometry being representedpublic static int elemInfoInterpretation(Geometry geom)
SDO_INTERPRETATION
for geometry description as stored in the
SDO_ELEM_INFO
.
Describes ordinates as part of SDO_ELEM_INFO
array.
compound
element:(SDO_ETYPE 4, 1005, or 2005)simple
element:(SDE_ELEM 1, 2, 1003, or 2003)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.
public static int elemInfoInterpretation(Geometry geom, int etype)
INTERPRETATION
used to interpret geom
.
Provides the INTERPRETATION value for the ELEM_INFO triplet of (STARTING_OFFSET, ETYPE, INTERPRETATION).
geom
- Geometry to encodeetype
- ETYPE value requiring an INTERPREATIONIllegalArgumentException
- If asked to encode a curvepublic static double[] ordinates(Geometry geom)
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:
Two Dimensional: {x1,y1,x2,y2,...}
Three Dimensional: {x1,y1,z1,x2,y2,z2,...}
Spatial will siliently detect and ignore the following:
While Oracle is silient on these errors - all other errors will not be detected!
public static CoordinateSequence getCS(Geometry geom)
public static void coordinates(List<double[]> list, Geometry geom)
CoordinateSequence & CoordinateAccess wil be used to determine the dimension, and the number of ordinates added.
list
- Flat list of Doublegeom
- GeometryIllegalArgumentException
- If geometry cannot be encodedpublic static double[] ordinateArray(CoordinateSequence coords, int ordinate)
Example numbering: for (x y g m) dimension==2, measure==2
public static double[] ordinateArray(Coordinate[] array, int ordinate)
CoordinateAccess is required for additional ordinates.
Ordinate limitied to:
public static double[] ordinateArray(List list, int ordinate)
public static double[] ordinates(List list, Geometry geom)
array
in correct manner for geom
.
Ordinates are placed into an array based on:
public static double[] ordinates2d(List list)
No assumptions are made about the order
list
- coordinate listpublic static double[] ordinates3d(List list)
list
- List of coordiantepublic static double[] ordinates2d(List list, int L)
list
- coordiante listL
- Dimension of ordinates required for representationpublic static double[] ordinates3d(List list, int L)
list
- coordinate array to be represented as ordinatesL
- Dimension of ordinates required for representationpublic static CoordinateSequence counterClockWise(CoordinateSequenceFactory factory, CoordinateSequence ring)
If the Coordinate need to be reversed a copy will be returned.
factory
- Factory to used to reverse CoordinateSequencering
- Ring of Coordinatespublic static int D(int GTYPE)
public static int L(int GTYPE)
public static int TT(int GTYPE)
public static Coordinate[] asCoordinates(double[] ordinates)
(x,y,x2,y2,...)
ordinates.public static Coordinate[] asCoordinates(double[] ordinates, int d)
(x,y,i3..,id,x2,y2...)
ordinates.public static CoordinateSequence coordinates(CoordinateSequenceFactory f, int GTYPE, double[] ordinates)
GTYPE encodes the following information:
The number of ordinates per coordinate are taken to be 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.
For 3-dimensional coordinates we assume z to be the third ordinate. If the LRS measure value is stored in the third ordinate (L=3) we assume a 2-dimensional coordinate.
f
- CoordinateSequenceFactory used to encode ordiantes for JTSGTYPE
- Encoding of Dimension, LRS and TTypepublic static CoordinateSequence coordiantes(CoordinateSequenceFactory f, OrdinateList x, OrdinateList y, OrdinateList z)
To produce two dimension Coordinates pass in null
for z
public static CoordinateSequence coordiantes(CoordinateSequenceFactory f, AttributeList x, AttributeList y, AttributeList z)
To produce two dimension Coordinates pass in null
for z
public static CoordinateSequence coordiantes(CoordinateSequenceFactory f, OrdinateList x, OrdinateList y, OrdinateList z, OrdinateList m)
To produce three dimension Coordinates pass in null
for z
f
- CoordinateSequenceFactory
x
- x-ordinatesy
- y-ordinatesz
- z-ordinates, null
for 2Dm
- m-ordinatesCoordinateSequence
public static Geometry create(GeometryFactory gf, int GTYPE, int SRID, double[] point, int[] elemInfo, double[] ordinates)
gf
- Used to construct returned GeometryGTYPE
- SDO_GTYPE represents dimension, LRS, and geometry typeSRID
- SDO_SRID represents Spatial Reference Systempublic static Geometry create(GeometryFactory gf, int GTYPE, int SRID, int[] elemInfo, int triplet, CoordinateSequence coords, int N)
Helpful when dealing construction Geometries with your own Coordinate Types. The dimensionality specified in GTYPE will be used to interpret the offsets in elemInfo.
GTYPE
- Encoding of Dimension, LRS and TTypeN
- Number of triplets (-1 for unknown/don't care)Copyright © 1996–2022 Geotools. All rights reserved.