org.deegree_impl.model.pt
Class Envelope

java.lang.Object
  extended byorg.deegree_impl.model.pt.Envelope
All Implemented Interfaces:
java.lang.Cloneable, Dimensioned, java.io.Serializable

public class Envelope
extends java.lang.Object
implements Dimensioned, java.lang.Cloneable, java.io.Serializable

A box defined by two positions. The two positions must have the same dimension. Each of the ordinate values in the minimum point must be less than or equal to the corresponding ordinate value in the maximum point. Please note that these two points may be outside the valid domain of their coordinate system. (Of course the points and envelope do not explicitly reference a coordinate system, but their implicit coordinate system is defined by their context.)

Version:
1.00
Author:
OpenGIS (www.opengis.org), Martin Desruisseaux
See Also:
PT_Envelope, Rectangle2D, Serialized Form

Field Summary
private  double[] ord
          Minimum and maximum ordinate values.
private static long serialVersionUID
          Serial number for interoperability with different versions.
 
Constructor Summary
  Envelope(CoordinatePoint minCP, CoordinatePoint maxCP)
          Construct a envelope defined by two positions.
  Envelope(double[] minCP, double[] maxCP)
          Construct a envelope defined by two positions.
  Envelope(double min, double max)
          Construct one-dimensional envelope defined by a range of values.
private Envelope(Envelope envelope)
          Construct a copy of the specified envelope.
  Envelope(int dimension)
          Construct an empty envelope of the specified dimension.
  Envelope(java.awt.geom.Rectangle2D rect)
          Construct two-dimensional envelope defined by a Rectangle2D.
 
Method Summary
 void add(CoordinatePoint point)
          Adds a point to this envelope.
 void add(Envelope envelope)
          Adds an envelope object to this envelope.
private  void checkCoherence()
          Check if ordinate values in the minimum point are less than or equal to the corresponding ordinate value in the maximum point.
 java.lang.Object clone()
          Returns a deep copy of this envelope.
 boolean contains(CoordinatePoint point)
          Tests if a specified coordinate is inside the boundary of this envelope.
 Envelope createIntersection(Envelope envelope)
          Returns a new envelope representing the intersection of this Envelope with the specified Envelope.
(package private)  void ensureDimensionMatch(int expectedDimension)
          Convenience method for checking the envelope's dimension validity.
 boolean equals(java.lang.Object object)
          Compares the specified object with this envelope for equality.
 double getCenter(int dimension)
          Returns the center ordinate along the specified dimension.
 int getDimension()
          Returns the number of dimensions.
 double getLength(int dimension)
          Returns the envelope length along the specified dimension.
 double getMaximum(int dimension)
          Returns the maximal ordinate along the specified dimension.
 double getMinimum(int dimension)
          Returns the minimal ordinate along the specified dimension.
 Envelope getSubEnvelope(int lower, int upper)
          Returns a new envelope that encompass only some dimensions of this envelope.
 int hashCode()
          Returns a hash value for this envelope.
 boolean isEmpty()
          Determines whether or not this envelope is empty.
 void setRange(int dimension, double minimum, double maximum)
          Set the envelope's range along the specified dimension.
 java.awt.geom.Rectangle2D toRectangle2D()
          Returns a Rectangle2D with the same bounds as this Envelope.
 java.lang.String toString()
          Returns a string representation of this envelope.
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

serialVersionUID

private static final long serialVersionUID
Serial number for interoperability with different versions.

See Also:
Constant Field Values

ord

private final double[] ord
Minimum and maximum ordinate values. The first half contains minimum ordinates, while the last half contains maximum ordinates.

Constructor Detail

Envelope

private Envelope(Envelope envelope)
Construct a copy of the specified envelope.


Envelope

public Envelope(int dimension)
Construct an empty envelope of the specified dimension. All ordinates are initialized to 0.


Envelope

public Envelope(double min,
                double max)
Construct one-dimensional envelope defined by a range of values.

Parameters:
min - The minimal value.
max - The maximal value.

Envelope

public Envelope(double[] minCP,
                double[] maxCP)
         throws MismatchedDimensionException
Construct a envelope defined by two positions.

Parameters:
minCP - Minimum ordinate values.
maxCP - Maximum ordinate values.
Throws:
MismatchedDimensionException - if the two positions don't have the same dimension.
java.lang.IllegalArgumentException - if an ordinate value in the minimum point is not less than or equal to the corresponding ordinate value in the maximum point.

Envelope

public Envelope(CoordinatePoint minCP,
                CoordinatePoint maxCP)
         throws MismatchedDimensionException
Construct a envelope defined by two positions.

Parameters:
minCP - Point containing minimum ordinate values.
maxCP - Point containing maximum ordinate values.
Throws:
MismatchedDimensionException - if the two positions don't have the same dimension.
java.lang.IllegalArgumentException - if an ordinate value in the minimum point is not less than or equal to the corresponding ordinate value in the maximum point.

Envelope

public Envelope(java.awt.geom.Rectangle2D rect)
Construct two-dimensional envelope defined by a Rectangle2D.

Method Detail

checkCoherence

private void checkCoherence()
                     throws java.lang.IllegalArgumentException
Check if ordinate values in the minimum point are less than or equal to the corresponding ordinate value in the maximum point.

Throws:
java.lang.IllegalArgumentException - if an ordinate value in the minimum point is not less than or equal to the corresponding ordinate value in the maximum point.

ensureDimensionMatch

void ensureDimensionMatch(int expectedDimension)
                    throws MismatchedDimensionException
Convenience method for checking the envelope's dimension validity. This method is usually call for argument checking.

Parameters:
expectedDimension - Expected dimension for this envelope.
Throws:
MismatchedDimensionException - if this envelope doesn't have the expected dimension.

isEmpty

public boolean isEmpty()
Determines whether or not this envelope is empty. An envelope is non-empty only if it has a length greater that 0 along all dimensions.


getDimension

public int getDimension()
Returns the number of dimensions.

Specified by:
getDimension in interface Dimensioned

getMinimum

public double getMinimum(int dimension)
Returns the minimal ordinate along the specified dimension.


getMaximum

public double getMaximum(int dimension)
Returns the maximal ordinate along the specified dimension.


getCenter

public double getCenter(int dimension)
Returns the center ordinate along the specified dimension.


getLength

public double getLength(int dimension)
Returns the envelope length along the specified dimension. This length is equals to the maximum ordinate minus the minimal ordinate.


setRange

public void setRange(int dimension,
                     double minimum,
                     double maximum)
Set the envelope's range along the specified dimension.

Parameters:
dimension - The dimension to set.
minimum - The minimum value along the specified dimension.
maximum - The maximum value along the specified dimension.

add

public void add(CoordinatePoint point)
         throws MismatchedDimensionException
Adds a point to this envelope. The resulting envelope is the smallest envelope that contains both the original envelope and the specified point. After adding a point, a call to contains(org.deegree_impl.model.pt.CoordinatePoint) with the added point as an argument will return true, except if one of the point's ordinates was Double.NaN (in which case the corresponding ordinate have been ignored).

Parameters:
point - The point to add.
Throws:
MismatchedDimensionException - if the specified point doesn't have the expected dimension.

add

public void add(Envelope envelope)
         throws MismatchedDimensionException
Adds an envelope object to this envelope. The resulting envelope is the union of the two Envelope objects.

Parameters:
envelope - the Envelope to add to this envelope.
Throws:
MismatchedDimensionException - if the specified envelope doesn't have the expected dimension.

contains

public boolean contains(CoordinatePoint point)
                 throws MismatchedDimensionException
Tests if a specified coordinate is inside the boundary of this envelope.

Parameters:
point - The point to text.
Returns:
true if the specified coordinates are inside the boundary of this envelope; false otherwise.
Throws:
MismatchedDimensionException - if the specified point doesn't have the expected dimension.

createIntersection

public Envelope createIntersection(Envelope envelope)
                            throws MismatchedDimensionException
Returns a new envelope representing the intersection of this Envelope with the specified Envelope.

Parameters:
envelope - The Envelope to intersect with this envelope.
Returns:
The largest envelope contained in both the specified Envelope and in this Envelope.
Throws:
MismatchedDimensionException - if the specified envelope doesn't have the expected dimension.

getSubEnvelope

public Envelope getSubEnvelope(int lower,
                               int upper)
Returns a new envelope that encompass only some dimensions of this envelope. This method copy this envelope's ordinates into a new envelope, beginning at dimension lower and extending to dimension upper-1. Thus the dimension of the subenvelope is upper-lower.

Parameters:
lower - The first dimension to copy, inclusive.
upper - The last dimension to copy, exclusive.
Returns:
The subenvelope.
Throws:
java.lang.IndexOutOfBoundsException - if an index is out of bounds.

toRectangle2D

public java.awt.geom.Rectangle2D toRectangle2D()
                                        throws java.lang.IllegalStateException
Returns a Rectangle2D with the same bounds as this Envelope. This is a convenience method for interoperability with Java2D.

Throws:
java.lang.IllegalStateException - if this envelope is not two-dimensional.

hashCode

public int hashCode()
Returns a hash value for this envelope. This value need not remain consistent between different implementations of the same class.


equals

public boolean equals(java.lang.Object object)
Compares the specified object with this envelope for equality.


clone

public java.lang.Object clone()
Returns a deep copy of this envelope.


toString

public java.lang.String toString()
Returns a string representation of this envelope. The returned string is implementation dependent. It is usually provided for debugging purposes.