JGeometry - WordPress.com

advertisement
1
Relāciju-objektu grafikas datubāzes
An object-based spatial database is a spatial database that stores the
location as objects. The object-based spatial model treats the world as
surface littered with recognizable objects (e.g. cities, rivers), which exist
independent of their locations. Objects can be simple as polygons and lines,
or be more complex to represent cities.
PostGIS
OMT-G
Entity Relationship
GraphDB
GEIS
GeoOOA
Oracle Spatial
GRASS GIS
2
Grafiskās datu bāzes datu vizualizācija izmantojot Java
valodu
Lietojums
Datu
bāzes
vadības
sistēma
Java2D
(vizualizācija)
Datu bāzes sistēma
Datu bāze
SDO_GEOMETRY
JGEOMETRY
JDBC
interfeiss
3
Datu bāzes SDO_GEOMETRY tipa ģeometrisko objektu
transformēšana (attēlošana) programmēšanas valodas
Java objektos
JGeometry klase1
MDSYS.SDO_GEOMETRY
JGeometry
java.lang.Object
oracle.spatial.geometry.JGeometry
A
Java
class
that
maps
Oracle
Spatial's
SQL
type
MDSYS.SDO_GEOMETRY.
Provides basic access functions to the geomeries stroed in Oracle Spatial
database.
Packages
oracle.spatial.geometry
Provides support for the Spatial SQL
SDO_GEOMETRY data type.
oracle.spatial.network
Provides support for the Oracle Spatial network
data model.
oracle.spatial.topo
Provides support for the Oracle Spatial topology
data model.
oracle.spatial.util
Provides classes that perform miscellaneous
operations.
1
http://docs.oracle.com/cd/B19306_01/appdev.102/b14373/oracle/spatial/geometry/JGeometry.html
4
JGeometry klase
The main tool to manipulate geometries in Java is the JGeometry class. It
allows you to:
1) read and write geometries from and to the database;
2) inspect the geometries;
3) create new geometries;
4) perform a number of transformations on those geometries.
When you read an SDO_GEOMETRY type object using a SQL SELECT
statement, JDBC returns a Java structure - more precisely, an
oracle.sql.STRUCT object.
To write an object type (using an INSERT or UPDATEstatement), you are
also expected to pass an oracle.sql.STRUCT object.
The JGeometry class provides
a JGeometry object.
two variants to convert a STRUCT into
5
1. variants
The load() method reads the STRUCT and returns a JGeometry object. Use
it when you convert the geometries returned by a SELECT statement.
The store() method performs the reverse conversion to the load() method. It
converts a JGeometry object into a STRUCT that you can then write back
to the database using an INSERT or UPDATE statement.
// SDO_GEOMETRY tipa objekta nolasīšana no datu bāzes.
// Tabula VALSTIS, SDO_GEOMETRY tipa kolona GEOMETRIJA.
ResultSet rs = statement.executeQuery(
"select GEOMETRIJA from VALSTIS where NOSAUKUMS =
'Latvija'");
//SDO_GEOMETRY tipa objekta transformēšana JGeometry tipa objektā.
STRUCT st = (oracle.sql.STRUCT) rs.getObject(1);
JGeometry j_geom = JGeometry.load(st);
// SDO_GEOMETRY tipa objekta ierakstīšanas datu bāzē komandas
// definēšana.
PreparedStatement ps = connection.prepareStatement("update
VALSTIS set GEOMETRIJA =? where NOSAUKUMS = 'Latvija'");
//JGeometry tipa objekta transformēšana SDO_GEOMETRY tipa objektā
STRUCT obj = JGeometry.store(j_geom, connection);
ps.setObject(1, obj);
ps.execute();
Prasības:
1) Oracle JDBC driver ver. 8.1.7 or higher;
2) JDK 1.2 or higher (for Java2D support).
6
In Oracle Database 11g, the load() and store() methods have been enhanced
to provide their own “pickling” and “unpickling” methods optimized for
geometry objects and so should perform better. Pickling is the process by
which an object is serialized or converted into a byte stream. Unpickling is
the reverse process.
For reading a geometry, read the object into a byte array and pass that array
to the load() method.
2. variants
// SDO_GEOMETRY tipa objekta nolasīšana no datu bāzes.
// Tabula VALSTIS, SDO_GEOMETRY tipa kolona GEOMETRIJA.
ResultSet rs = statement.executeQuery(
"select GEOMETRIJA from VALSTIS where NOSAUKUMS =
'Latvija'");
byte[] image = ((OracleResultSet)rs).getBytes(1);
//convert image into a JGeometry object using the SDO pickler
JGeometry j_geom = JGeometry.load(image);
// SDO_GEOMETRY tipa objekta ierakstīšanas datu bāzē komandas
// definēšana
PreparedStatement ps = connection.prepareStatement("update
VALSTIS set GEOMETRIJA =? where NOSAUKUMS = 'Latvija'");
//JGeometry tipa objekta transformēšana SDO_GEOMETRY tipa objektā
STRUCT obj = JGeometry.store(connection, j_geom);
ps.setObject(1, obj);
ps.execute();
7
The following is an example. First use the getObject() method of the result
set to extract the geometry object for each row into a STRUCT and then use
the static load() method of JGeometry to convert it into a JGeometry object.
STRUCT dbObject = (STRUCT) rs.getObject(1);
JGeometry geom = JGeometry.load(dbObject);
To use the optimized unpickler, first use the getBytes() method of the result
set to extract the geometry into a byte array. Then again use the static load()
method of JGeometry to convert it to a JGeometry object.
byte[] image = rs. getBytes (1);
JGeometry geom = JGeometry.load(image);
8
You can use one of the many get() methods to extract information from
the geometry object. Table summarizes the main methods. The additional
is() methods detail the nature of the geometry.
Method
Information Returned
getType()
Type of geometry (1 for apoint, 2 for aline, and so on).
getDimensions() Dimensionality.
getSRID()
Spatial reference system ID.
getNumPoints() Number of points in the geometry.
getPoint()
Coordinates of the point object (if the geometry is apoint).
getFirstPoint() First point of the geometry.
getLastPoint()
Last point of the geometry.
getMBR()
MBR of the geometry.
getElemInfo()
Content of the SDO_ELEM_INFO array.
getOrdinatesArray() Content of the SDO_ORDINATES array.
getLabelPoint() Returns the coordinates of the SDO_POINT structure. When filled
for aline or polygon geometry, this is often used as alabeling point.
getJavaPoint() For asingle-point object, returns the coordinates of the point as a
java.awt.geom. Point2D object.
getJavaPoints() For amultipoint object, returns an array of java.awt.geom. Point2D
objects.
getElements()
Gets an array of JGeometry objects, each representing one element
of the geometry.
getElementAt() Extracts one element of the geometry as a JGeometry.
createShape()
Converts the geometry into ajava.awt.Shape object, ready for use
by the drawing and manipulation facilities of the java.awt package.
isPoint()
Is this apoint?
isOrientedPoint() Is this an oriented point?
isCircle()
Is this acircle? isGeodeticMBR() Is this ageodetic MBR?
isMultiPoint()
Is this amultipoint? isRectangle() Is this arectangle?
hasCircularArcs() Does the geometry contain any arcs?
isLRSGeometry() Is this a“linear referenced” geometry?
Two of the methods getElements() and getElementAt() allow you to inspect the
structure of complex geometries: they allow you to extract individual elements as
separate JGeometry objects. The first method returns all elements into an array of
separate JGeometry objects. The second returns one specific element identified by its
position in the geometry.
Decoding and constructing STRUCTs is rather complex, and the main goal
of the Oracle Spatial Java API (the JGeometry class) is to make that task
easy.
9
Creating Geometries
Writing a geometry to the database (in an INSERT or UPDATE statement)
requires that you create anew JGeometry object, convert it into a STRUCT
using the static JGeometry.store() method, and then pass the STRUCT to
an INSERT or UPDATE statement. Just like for the load() method, you can
also use the faster spatial pickler. The following is an example of both
approaches. First use the static store() method of JGeometryto convert it to
a STRUCT, and then use the setObject() method to set it into the prepared
SQL statement.
STRUCT dbObject = JGeometry.store (geom, dbConnection);
stmt.setObject (1,dbObject);
Using the optimized pickler is very much the same except that the order of
the arguments to the store() method is reversed: first specify the database
connection object and then the JGeometry object!
STRUCT dbObject = JGeometry.store (dbConnection, geom);
stmt.setObject (1,dbObject);
10
There are two ways you can construct new JGeometry objects.
One way is to use one of the constructors.
The other way is to use one of the static methods that create various
geometries.
JGeometry Constructors
Constructor
Purpose
JGeometry (double x, double y, int srid) Constructs apoint
JGeometry (double x, double y, double z, int srid) Constructs a threedimensional point
JGeometry (double minX, double minY, double maxX, double maxY, int
srid) Creates arectangle
JGeometry (int gtype, int srid, int[] elemInfo, double[] ordinates)
Constructs ageneric geometry
Static JGeometry Creation Methods
Creation Method
Purpose
createPoint(double[] coord, int dim, int srid) Creates a point
createLinearLineString(double[] coords, int dim, int srid) Creates a simple
line string
createLinearPolygon(double[] coords, int dim, int srid) Creates asimple
polygon
createMultiPoint(java.lang.Object[] coords, int dim, int srid) Creates a
multipoint object
createLinearMultiLineString(java.lang.Object[] coords, int dim, int srid)
Creates amultiline string object
createLinearPolygon(java.lang.Object[] coords, int dim, int srid) Creates
amultipolygon
createCircle(double x1, double y1, double x2, double y2, double x3, double
y3, int srid) Creates acircle using three points on its circumference
createCircle(double x, double y, double radius, int srid) Creates
acircleusing acenter and radius
11
Modifying Existing Geometries
The JGeometry class doesnot provide any method that lets you modify
ageometry. For example, there is no method to remove apoint from aline or
to add one more point to aline. To perform those updates, you need to
extract the list of points using amethod such as getOrdinatesArray(), then
update the resulting Java arrays, and then create anew JGeometry object
with the results. To write the modified geometries to the database, proceed
as discussed previously: convert the JGeometry object into a STRUCT
using the store() method, and then pass the STRUCT to your SQL INSERT
or UPDATE statement.
12
Processing Geometries
The Java API alsoprovides you with anumber of methods that perform
various transformations on geometries. Table7-6 lists the main ones. They
take aJGeometry object as input and generate anew geometry as aresult.
Note that most of those functions are also provided via PL/SQL calls in the
database that will be discussed in detail in Chapter 9.
Table 7-6. Geometry-Processing Functions Method Purpose buffer(double
bufferWidth) Generates abuffer around ageometry simplify(double
threshold) Simplifies ageometry densifyArcs(double arc_tolerance)
Densifies all arcs in ageometry clone() Duplicates ageometry
affineTransforms(...) Applies affine transformations on the input geometry
based on the parameters supplied: translation, scaling, rotation, shear,
reflection projectToLTP(double smax, double flat) Projects ageometry from
longitude/latitude to alocal tangent plane projectFromLTP() Projects
ageometry from alocal tangent plane to longitude/latitude
The API also provides some helper methods, summarized in Table7-7.
Those functions (except for equals) do not deal with JGeometryobjects but
are provided to help certain processing tasks. The equals() method
compares two JGeometry objects and determines whether they are the
same. However, the comparison is based on the internal encoding of the
geometry: two geometries willbe considered as equal if the coordinates of
all their points are the same and in the same sequence. The method does not
perform atrue geometric comparison involving tolerance.
Table 7-7. Geometry Helper Functions Method Purpose equals()
Determines whether two geometries are identical computeArc(double x1,
Computes the center, radius, and angles for this arc from the double y1,
double x2, three coordinate points double y2, double x3, double y3)
linearizeArc(double x1, Converts an arc into an array of 2D line segments
double y1, double x2, double y2, double x3, double y3)
reFormulateArc(double[] d) Reformulates an arc by recomputing the angles
expandCircle(double x1, Linearizes the circle by converting it into an array
of 2D segments double y1, double x2, double y2, double x3, double y3)
monoMeasure(double[] coords, Determines whether a line has increasing or
decreasing measures int dim ()
13
JGeometry tipa objekta konstruktora metodes
JGeometry(double x, double y, int srid)
Objekta veidošana punktam (2D)
JGeometry(double minX, double minY, double maxX, double maxY, int srid)
Objekta veidošana taisnstūrim
JGeometry(int gtype, int srid, double x, double y, double z, int[] elemInfo,
double[] ordinates)
Objekta veidošana vispārējai ģeometrijai
JGeometry(int gtype, int srid, int[] elemInfo, double[] ordinates)
Objekta veidošana vispārējai ģeometrijai
14
public JGeometry(int gtype,
int srid,
double x,
double y,
double z,
int[] elemInfo,
double[] ordinates)
Parameters:
gtype - the geometry type
srid - the SRS id; if 0 is used then the MDSYS.SDO_GEOMETRY.SDO_SRID will be set to
null when converted into DB format.
x - x ordinate of a label point
y - y ordinate of a label point
z - z ordinate of a label point
elemInfo - geometry element info array
ordinates - geometry ordinates array
public JGeometry(int gtype,
int srid,
int[] elemInfo,
double[] ordinates)
Parameters:
gtype - the geometry type
srid - the SRS id; if 0 is used then the MDSYS.SDO_GEOMETRY.SDO_SRID will be set to
null when converted into DB format.
elemInfo - geometry element info array
ordinates - geometry ordinates array
public JGeometry(double x,
double y,
int srid)
Parameters:
x - x ordinate of a label point
y - y ordinate of a label point
srid - the SRS id; if 0 is used then the MDSYS.SDO_GEOMETRY.SDO_SRID will be set to
null when converted into DB format.
public JGeometry(double x,
double y,
double z,
int srid)
Parameters:
x - x ordinate of a label point
y - y ordinate of a label point
z - z ordinate of a label point
srid - the SRS id; if 0 is used then the MDSYS.SDO_GEOMETRY.SDO_SRID will be set to
null when converted into DB format.
public JGeometry(double minX,
double minY,
double maxX,
15
double maxY,
int srid)
Parameters:
minX - the minimum x ordinate of the rectangle
minY - the minimum y ordinate of the rectangle
maxX - the maximum x ordinate of the rectangle
maxY - the maximum y ordinate of the rectangle
srid - the SRS id. if 0 is used then the MDSYS.SDO_GEOMETRY.SDO_SRID will be set to
null when converted into DB format.
16
Klases JGeometry metodes
Kāda ģeometrija ir objektā noskaidrošana
int getType()
Gets the geometry type.
boolean hasCircularArcs()
Checks if this geometry is a compound one.
boolean isCircle()
Checks if this geometry represents a circle.
boolean isMultiPoint()
Checks if this geometry is of Multi-Point type.
boolean isPoint()
Checks if this geometry is of point type.
boolean isRectangle()
Checks if this geometry represents a rectangle.
17
Klases JGeometry metodes
Ģeometrijas datu no objekta iegūšana
java.lang.Object clone()
Constructs an instance that is a clone of this JGeometry.
static double[] computeArc(double x1, double y1, double x2, double y2, double x3, double y3)
Helper method to compute center, radius, and angles for this arc from the three coordinate
points. static JGeometry createCircle(double x1, double y1, double x2, double y2, double x3,
double y3, int srid)
Creates a JGeometry that is a 2D Circle.
static JGeometry createCircle(double x, double y, double radius, int srid)
Creates a JGeometry that is a Circle with provided radius and center.
static JGeometry createLinearLineString(double[] coords, int dim, int srid)
Creates a JGeometry that is a single linear Line String.
static JGeometry createLinearMultiLineString(java.lang.Object[] coords, int dim, int srid)
Creates a JGeometry that is a linear multi-linestring.
static JGeometry createLinearPolygon(double[] coords, int dim, int srid)
Creates a JGeometry that is a simple linear Polygon without holes.
static JGeometry createLinearPolygon(java.lang.Object[] coords, int dim, int srid)
Creates a JGeometry that is a linear polygon which may have holes.
static JGeometry createMultiPoint(java.lang.Object[] coords, int dim, int srid)
Creates a JGeometry that is a multi-point geometry.
static JGeometry createPoint(double[] coord, int dim, int srid)
int getDimensions()
Gets the dimensionality of this geometry.
int[] getElemInfo()
Gets the reference to the element infomation array of this JGeometry.
double[] getFirstPoint()
Gets the first coordinate for this geometry.
java.awt.geom.Point2D getJavaPoint()
Gets the java2D point rerepsentation of this geometry.
java.awt.geom.Point2D[] getJavaPoints()
Gets the java2D points rerepsentation of this geometry.
java.awt.geom.Point2D getLabelPoint()
Gets the SDO_GEOMETRY.sdo_point as a label point.
18
double[] getLastPoint()
Gets the last coordinate of the geometry.
int getNumPoints()
Gets the number of points or verticies in this geometry.
double[] getOrdinatesArray()
Gets the reference to the ordinate array of this JGeometry.
java.lang.Object[] getOrdinatesOfElements()
Gets an array of the (top-level) elements in this geometry.
double[] getPoint()
Gets the coordinate of this point geometry.
long getSize()
Gets an estimated size of the geometry in bytes.
int getSRID()
Gets the geometry SRID.
int getType()
Gets the geometry type.
static JGeometry load(STRUCT st)
Creates a JGeometry instance from a STRUCT object representing a geometry column in a
JDBC result set. static int monoMeasure(double[] coords, int dim)
Edited version of PL/SQL monotonic_measure() monoMeasure() determines whether a line is
monotonically increasing or decreasing Returns: 1 if increasing or all measures null; -1 if
decreasing; 0 if measures are inconsistent Note: Repeated measures are not flagged as
inconsistent (but are not valid in LRS); assumes measure is in the last position: X,Y,M or
X,Y,Z,M
void setSRID(int srid)
Sets the srid for this geometry.
void setType(int gt)
Sets the geometry type for this geometry.
static STRUCT store(JGeometry geom, java.sql.Connection conn)
Convert the given geometry object into an Oracle JDBC STRUCT object.
19
clone
public java.lang.Object clone()
constructs an instance that is a clone of this JGeometry. All the fields of this object is deepcopied over to the clone.
Overrides:
clone in class java.lang.Object
createPoint
public static JGeometry createPoint(double[] coord,
int dim,
int srid)
createLRSPoint
public static JGeometry createLRSPoint(double[] coord,
int LRSdim,
int srid)
Parameters:
LRSdim - LRS dimensionality: X,Y,M=2D; X,Y,Z,M=3D
createCircle
public static JGeometry createCircle(double x,
double y,
double radius,
int srid)
Creates a JGeometry that is a Circle with provided radius and center.
Parameters:
x - the x ordinate of the circle's center
y - the y ordinate of the circle's center
radius - the radius of the circle
srid - the srid of the circle
createCircle
public static JGeometry createCircle(double x1,
double y1,
double x2,
double y2,
double x3,
double y3,
int srid)
Creates a JGeometry that is a 2D Circle. The three supplied coordinates form the
circumference of the circle.
Parameters:
x1 - x ordinate of point 1
y1 - y ordinate of point 1
x2 - x ordinate of point 2
y2 - y ordinate of point 2
x3 - x ordinate of point 3
20
y3 - y ordinate of point 3
srid - srs id for the circle
createLinearLineString
public static JGeometry createLinearLineString(double[] coords,
int dim,
int srid)
Creates a JGeometry that is a single linear Line String.
Parameters:
coords - the coordinates of the linear line string
dim - the dimensionality of the line string.
srid - the srid of the linear line string
Returns:
a JGeometry object that is a linear line string
createLRSLinearLineString
public static JGeometry createLRSLinearLineString(double[] coords,
int LRSdim,
int srid)
Creates a JGeometry that is a single LRS linear Line String.
Parameters:
coords - the coordinates of the LRS linear line string
LRSdim - the LRS dimensionality of the line string: X,Y,M=2D; X,Y,Z,M=3D
srid - the srid of the linear line string
Returns:
a JGeometry object that is a LRS linear line string
createLinearMultiLineString
public static JGeometry createLinearMultiLineString(java.lang.Object[] coords,
int dim,
int srid)
Creates a JGeometry that is a linear multi-linestring.
Parameters:
coords - an array of all the linestrings' coordinates
dim - the dimensionality of the linestring
srid - the srid of the multi-linestring
createLRSLinearMultiLineString
public static JGeometry createLRSLinearMultiLineString(java.lang.Object[] coords,
int LRSdim,
int srid)
Creates a JGeometry that is a LRS linear multi-linestring.
Parameters:
coords - an array of all the LRS linestrings' coordinates
LRSdim - the LRS dimensionality of the linestring: X,Y,M=2D; X,Y,Z,M=3D
srid - the srid of the multi-linestring
21
createMultiPoint
public static JGeometry createMultiPoint(java.lang.Object[] coords,
int dim,
int srid)
Creates a JGeometry that is a multi-point geometry.
Parameters:
coords - the array of double-typed arrays each containing one point
dim - the dimensionality of each point
srid - the srid for the geometry.
createLinearPolygon
public static JGeometry createLinearPolygon(double[] coords,
int dim,
int srid)
Creates a JGeometry that is a simple linear Polygon without holes. Note that if the supplied
coordinate array does not close itslef, meaning the last coordinate is not the same as the first,
a new coordinate will be appended to the end of the input coordinates array. the new
coordinate repeats the first one.
Parameters:
coords - the coordinates of the linear polygon
dim - the dimensionality of the polygon
srid - the srid of the polygon
createLinearPolygon
public static JGeometry createLinearPolygon(java.lang.Object[] coords,
int dim,
int srid)
Creates a JGeometry that is a linear polygon which may have holes. Each array in the double
array parameter represents a single ring of the polygon. The outer ring must be the first in the
double array. Note that for each ring, if its coordinate array does not close itslef, meaning the
last coordinate is not the same as the first, a new coordinate will be appended to the end of
that ring's coordinates array. The new coordinate repeats the first one for the said ring.
Parameters:
coords - an array of double-typed arrays that contains all the rings' coordinates
dim - the dimensionality of the polygon
srid - the srid of the polygon
createLRSLinearPolygon
public static JGeometry createLRSLinearPolygon(double[] coords,
int LRSdim,
int srid)
Creates a JGeometry that is a simple LRS linear Polygon without holes. Note that if the
supplied coordinate array does not close itslef, meaning the last coordinate is not the same as
the first, a new coordinate will be appended to the end of the input coordinates array. the new
coordinate repeats the first one.
Parameters:
coords - the coordinates of the LRS linear polygon
LRSdim - the LRS dimensionality of the polygon: X,Y,M=2D; X,Y,Z,M=3D
22
srid - the srid of the polygon
createLRSLinearPolygon
public static JGeometry createLRSLinearPolygon(java.lang.Object[] coords,
int LRSdim,
int srid)
Creates a JGeometry that is a linear LRS polygon which may have holes. Each array in the
double array parameter represents a single ring of the polygon. The outer ring must be the
first in the double array. Note that for each ring, if its coordinate array does not close itslef,
meaning the last coordinate is not the same as the first, a new coordinate will be appended to
the end of that ring's coordinates array. The new coordinate repeats the first one for the said
ring.
Parameters:
coords - an array of double-typed arrays that contains all the rings' coordinates
LRSdim - the LRS dimensionality of the polygon: X,Y,M=2D; X,Y,Z,M=3D
srid - the srid of the polygon
monoMeasure
public static int monoMeasure(double[] coords,
int dim)
Edited version of PL/SQL monotonic_measure() monoMeasure() determines whether a line is
monotonically increasing or decreasing Returns: 1 if increasing or all measures null; -1 if
decreasing; 0 if measures are inconsistent Note: Repeated measures are not flagged as
inconsistent (but are not valid in LRS); assumes measure is in the last position: X,Y,M or
X,Y,Z,M
Parameters:
coords - an array of double that contains all coordinates
dim - the dimensionality of the feature: X,Y,M=3D; X,Y,Z,M=4D
getType
public int getType()
Gets the geometry type.
Known geom types (1st digit from right):
GTYPE_POINT = 1;
GTYPE_CURVE = 2;
GTYPE_POLYGON = 3;
GTYPE_COLLECTION = 4;
GTYPE_MULTIPOINT = 5;
GTYPE_MULTICURVE = 6;
GTYPE_MULTIPOLYGON = 7;
Returns:
the geometry type
23
setType
public void setType(int gt)
Sets the geometry type for this geometry.
Parameters:
gt - the geometry type
getSRID
public int getSRID()
Gets the geometry SRID.
setSRID
public void setSRID(int srid)
Sets the srid for this geometry.
Parameters:
srid - the srid
getLabelPoint
public java.awt.geom.Point2D getLabelPoint()
Gets the SDO_GEOMETRY.sdo_point as a label point.
getPoint
public double[] getPoint()
Gets the coordinate of this point geometry. Retruns null if this geometry is not of point type.
Returns:
a double array which stores the oridnates of this point; null if this geometry is not a point
getJavaPoint
public java.awt.geom.Point2D getJavaPoint()
Gets the java2D point rerepsentation of this geometry. Returns null if this geometry is not of
point type.
Returns:
a java Point2D.Double instance if this is a point geometry.
getJavaPoints
public java.awt.geom.Point2D[] getJavaPoints()
Gets the java2D points rerepsentation of this geometry. Returns null if this geometry is not of
2D multipoint type.
Returns:
an array of java Point2D.Double instances if this is a 2D multipoint geometry.
24
isPoint
public final boolean isPoint()
Checks if this geometry is of point type.
Returns:
true if this geometry is a point
isMultiPoint
public final boolean isMultiPoint()
Checks if this geometry is of Multi-Point type.
Returns:
true if this geometry is a multi-point; otherwise false.
isRectangle
public final boolean isRectangle()
Checks if this geometry represents a rectangle.
Returns:
true if this geometry is a rectangle.
isCircle
public final boolean isCircle()
Checks if this geometry represents a circle.
Returns:
true if this geometry is a circle.
isGeodeticMBR
public final boolean isGeodeticMBR()
Checks if this geometry represents a geodetic MBR.
Returns:
true if this geometry is a geodetic MBR.
isLRSGeometry
public final boolean isLRSGeometry()
Checks if this is a LRS (Linear Reference System) geometry.
Returns:
true if this is a LRS geometry; otherwise false
hasCircularArcs
public final boolean hasCircularArcs()
Checks if this geometry is a compound one. A compound geometry has circular arcs as part
of its boundary.
getDimensions
public int getDimensions()
25
Gets the dimensionality of this geometry.
Returns:
the dimensions of this geoemtry.
getOrdinatesArray
public double[] getOrdinatesArray()
Gets the reference to the ordinate array of this JGeometry. Unless you know what you are
doing, you should not modify the values in the returned array.
Returns:
the ordinates array corresponding to the server side
MDSYS.SDO_GEOMETRY.SDO_ORDINATE_ARRAY. Null will be returned if this
geometry is a point with optimal storage (i.e., the coordinate is stored in the
SDO_GEOM.SDO_POINT field).
getElemInfo
public int[] getElemInfo()
Gets the reference to the element infomation array of this JGeometry. Unless you know what
you are doing, you should not modify the values in the returned array.
Returns:
the element information array corresponding to the server side
MDSYS.SDO_GEOMETRY.SDO_ELEM_INFO_ARRAY.
getNumPoints
public final int getNumPoints()
Gets the number of points or verticies in this geometry. Not to be confused with the number
of ordinates or double values in the ordinates array.
Returns:
the number of points (including all parts) in this geometry.
getFirstPoint
public double[] getFirstPoint()
Gets the first coordinate for this geometry. If the geometry is a point, the point's coordinate
will be returned. If anything else, the first coordinate in the geometry's ordinates array
(MDSYS.SDO_GEOMETRY.SDO_ORDINATES) will be returned.
Returns:
the first point of the geometry in an array that stores the ordinates. The size of the result array
is the same as the dimension of the geometry.
getLastPoint
public double[] getLastPoint()
Gets the last coordinate of the geometry. If the geometry is a point its coordinate will be
returned. For any other geometry types the last coordinate in the ordinates array
(MDSYS.SDO_GEOMETRY.SDO_ORDINATES) will be returned. Note that this method
does not take into account the logica separation that may exist for the ordinates array (such as
that of a multi-polygon geometry). It merely picks the last coordinate in the array.
Returns:
26
the last point of the geometry in an array that stores the ordinates. The size of the result array
is the same as the dimension of the geometry.
getMBR
public double[] getMBR()
Gets the MBR of this geometry. When a JSDOGeoemtry is first instantiated from a db
geometry STRUCT, no MBR is computed. The MBR exists only after the first call to this
method. The MBR will be recalucated only when the geoemtry's structure has been modified.
Returns:
a double array containing the minX,minY, maxX,maxY value of the MBR
getOrdinatesOfElements
public java.lang.Object[] getOrdinatesOfElements()
Gets an array of the (top-level) elements in this geometry. Each array element in the result
array is itself an array of all the ordinates for a geometry element. In other words, if this
geometry has three elements, each with 10,20 and 30 ordinates, then the result Object[] array
will have three elements, each being double[10], double[20] and double[30].
Note: applicable only to linear geometries without compound elements.
Returns:
an array of ordinates arrays
createShape
public final java.awt.Shape createShape()
Creates a Java2D shape object from this JGeometry Note: for point geometry this method
returns null. You should call getJavaPoint() for point or getJavaPoints() for multi-points.
Returns:
a Java2D shape representation of this geometry; NULL if the geometry is of Point or Multipoint type.
load
public static final JGeometry load(STRUCT st)
throws java.sql.SQLException
Creates a JGeometry instance from a STRUCT object representing a geometry column in a
JDBC result set.
Parameters:
st - the STRUCT object from an oracle result set.
Returns:
a JGeometry instance if successful; otherwise null is returned.
Throws:
java.sql.SQLException
store
public static STRUCT store(JGeometry geom,
java.sql.Connection conn)
27
throws java.sql.SQLException
Convert the given geometry object into an Oracle JDBC STRUCT object. You can then bind
the STRUCT object to a SQL statment that inserts or updates the geometry in the database.
Usage note: Do not bind the STRUCT object of a JGeometry of the geodetic MBR type to an
SQL DML statement that inserts or updates the geometry in the database. a database, you are
not allowed to use this method to convert it into a STRUCT object.
Parameters:
geom - the JGeometry instance to be converted.
conn - the connection to use.
Returns:
a Oracle STRUCT object when successful; otherwise null
Throws:
java.sql.SQLException
computeArc
public static final double[] computeArc(double x1,
double y1,
double x2,
double y2,
double x3,
double y3)
Helper method to compute center, radius, and angles for this arc from the three coordinate
points.
Returns:
an array if an arc can be computed; null if the three points overlap or are co-linear. The array
contains the following (in radians): centerX, centerY, radius, startAngle, midAngle,
endAngle;
linearizeArc
public static double[] linearizeArc(double x1,
double y1,
double x2,
double y2,
double x3,
double y3,
int numPoints)
returns a linearized array of 2D line segments for an ARC given in three points.
Returns:
an double array in the form of (x1,y1,x2,y2....xn,yn)
linearizeArc
public static double[] linearizeArc(double x1,
double y1,
double x2,
double y2,
double x3,
double y3,
double tolerance)
28
For a given arc, returns a linearized array of 2D line segments.
Returns:
an double array in the form of (x1,y1,x2,y2....xn,yn)
linearizeArc
public static double[] linearizeArc(double x1,
double y1,
double x2,
double y2,
double x3,
double y3)
For a given arc, returns a linearized array of 2D line segments. This will use a default
tolerance value that is 1% of the arc radius.
Returns:
an double array in the form of (x1,y1,x2,y2....xn,yn)
getSize
public long getSize()
Gets an estimated size of the geometry in bytes.
Returns:
size of this geometry in bytes.
toString
public java.lang.String toString()
Overrides:
toString in class java.lang.Object
equals
public boolean equals(java.lang.Object otherObj)
Deprecated. This function has been moved to oracle.spatial.util.GML. public static
JGeometry fromNodeToGeometry(Node nd) throws DataException { return
GML.fromNodeToGeometry(nd); }
Overrides:
equals in class java.lang.Object
Download