Class IntersectionMatrix
- All Implemented Interfaces:
Cloneable
Geometrys.
This class can also represent matrix patterns (such as "T*T******")
which are used for matching instances of DE-9IM matrices.
DE-9IM matrices are 3x3 matrices with integer entries.
The matrix indices {0,1,2} represent the topological locations
that occur in a geometry (Interior, Boundary, Exterior).
These are provided by the constants
Location.INTERIOR, Location.BOUNDARY, and Location.EXTERIOR.
When used to specify the topological relationship between two geometries,
the matrix entries represent the possible dimensions of each intersection:
Dimension.A = 2, Dimension.L = 1, Dimension.P = 0 and Dimension.FALSE = -1.
When used to represent a matrix pattern entries can have the additional values
Dimension.TRUE {"T") and Dimension.DONTCARE ("*").
For a description of the DE-9IM and the spatial predicates derived from it, see the following references:
- OGC 99-049 OpenGIS Simple Features Specification for SQL , Section 2.1.13
- OGC 06-103r4 OpenGIS Implementation Standard for Geographic information - Simple feature access - Part 1: Common architecture , Section 6.1.15 (which provides some further details on certain predicate specifications).
- Wikipedia article on DE-9IM
Methods are provided to:
- set and query the elements of the matrix in a convenient fashion
- convert to and from the standard string representation (specified in SFS Section 2.1.13.2).
- test if a matrix matches a given pattern string.
- test if a matrix (possibly with geometry dimensions) matches a standard named spatial predicate
- Version:
- 1.7
-
Constructor Summary
ConstructorsConstructorDescriptionCreates anIntersectionMatrixwithFALSEdimension values.IntersectionMatrix(String elements) Creates anIntersectionMatrixwith the given dimension symbols.Creates anIntersectionMatrixwith the same elements asother. -
Method Summary
Modifier and TypeMethodDescriptionvoidAdds one matrix to another.intget(int row, int column) Returns the value of one of this matrix entries.booleanTests whether this matrix matches [T*****FF*[.booleanTests if this matrix matches[T*F**F***]or[*TF**F***]or[**FT*F***]or[**F*TF***]booleanisCovers()Tests if this matrix matches[T*****FF*]or[*T****FF*]or[***T**FF*]or[****T*FF*]booleanisCrosses(int dimensionOfGeometryA, int dimensionOfGeometryB) Tests whether this geometry crosses the specified geometry.booleanTests if this matrix matches[FF*FF****].booleanisEquals(int dimensionOfGeometryA, int dimensionOfGeometryB) Tests whether the argument dimensions are equal and this matrix matches the pattern [T*F**FFF*].booleanTests ifisDisjointreturns false.booleanisOverlaps(int dimensionOfGeometryA, int dimensionOfGeometryB) Tests if this matrix matches [T*T***T**] (for two points or two surfaces) [1*T***T**] (for two curves) .booleanisTouches(int dimensionOfGeometryA, int dimensionOfGeometryB) Tests if this matrix matches[FT*******],[F**T*****]or[F***T****].static booleanisTrue(int actualDimensionValue) Tests if the dimension value matches TRUE (i.e.booleanisWithin()Tests whether this matrix matches[T*F**F***].static booleanmatches(int actualDimensionValue, char requiredDimensionSymbol) Tests if the dimension value satisfies the dimension symbol.booleanTests whether this matrix matches the given matrix pattern.static booleanTests if each of the actual dimension symbols in a matrix string satisfies the corresponding required dimension symbol in a pattern string.voidset(int row, int column, int dimensionValue) Changes the value of one of thisIntersectionMatrixs elements.voidChanges the elements of thisIntersectionMatrixto the dimension symbols indimensionSymbols.voidsetAll(int dimensionValue) Changes the elements of thisIntersectionMatrixtodimensionValue.voidsetAtLeast(int row, int column, int minimumDimensionValue) Changes the specified element tominimumDimensionValueif the element is less.voidsetAtLeast(String minimumDimensionSymbols) For each element in thisIntersectionMatrix, changes the element to the corresponding minimum dimension symbol if the element is less.voidsetAtLeastIfValid(int row, int column, int minimumDimensionValue) If row >= 0 and column >= 0, changes the specified element tominimumDimensionValueif the element is less.toString()Returns a nine-characterStringrepresentation of thisIntersectionMatrix.Transposes this IntersectionMatrix.
-
Constructor Details
-
IntersectionMatrix
public IntersectionMatrix()Creates anIntersectionMatrixwithFALSEdimension values. -
IntersectionMatrix
Creates anIntersectionMatrixwith the given dimension symbols.- Parameters:
elements- a String of nine dimension symbols in row major order
-
IntersectionMatrix
Creates anIntersectionMatrixwith the same elements asother.- Parameters:
other- anIntersectionMatrixto copy
-
-
Method Details
-
add
Adds one matrix to another. Addition is defined by taking the maximum dimension value of each position in the summand matrices.- Parameters:
im- the matrix to add
-
isTrue
public static boolean isTrue(int actualDimensionValue) Tests if the dimension value matches TRUE (i.e. has value 0, 1, 2 or TRUE).- Parameters:
actualDimensionValue- a number that can be stored in theIntersectionMatrix. Possible values are{TRUE, FALSE, DONTCARE, 0, 1, 2}.- Returns:
- true if the dimension value matches TRUE
-
matches
public static boolean matches(int actualDimensionValue, char requiredDimensionSymbol) Tests if the dimension value satisfies the dimension symbol.- Parameters:
actualDimensionValue- a number that can be stored in theIntersectionMatrix. Possible values are{TRUE, FALSE, DONTCARE, 0, 1, 2}.requiredDimensionSymbol- a character used in the string representation of anIntersectionMatrix. Possible values are{T, F, * , 0, 1, 2}.- Returns:
- true if the dimension symbol matches the dimension value
-
matches
Tests if each of the actual dimension symbols in a matrix string satisfies the corresponding required dimension symbol in a pattern string.- Parameters:
actualDimensionSymbols- nine dimension symbols to validate. Possible values are{T, F, * , 0, 1, 2}.requiredDimensionSymbols- nine dimension symbols to validate against. Possible values are{T, F, * , 0, 1, 2}.- Returns:
- true if each of the required dimension symbols encompass the corresponding actual dimension symbol
-
set
public void set(int row, int column, int dimensionValue) Changes the value of one of thisIntersectionMatrixs elements.- Parameters:
row- the row of thisIntersectionMatrix, indicating the interior, boundary or exterior of the firstGeometrycolumn- the column of thisIntersectionMatrix, indicating the interior, boundary or exterior of the secondGeometrydimensionValue- the new value of the element
-
set
Changes the elements of thisIntersectionMatrixto the dimension symbols indimensionSymbols.- Parameters:
dimensionSymbols- nine dimension symbols to which to set thisIntersectionMatrixs elements. Possible values are{T, F, * , 0, 1, 2}
-
setAtLeast
public void setAtLeast(int row, int column, int minimumDimensionValue) Changes the specified element tominimumDimensionValueif the element is less.- Parameters:
row- the row of thisIntersectionMatrix, indicating the interior, boundary or exterior of the firstGeometrycolumn- the column of thisIntersectionMatrix, indicating the interior, boundary or exterior of the secondGeometryminimumDimensionValue- the dimension value with which to compare the element. The order of dimension values from least to greatest is{DONTCARE, TRUE, FALSE, 0, 1, 2}.
-
setAtLeastIfValid
public void setAtLeastIfValid(int row, int column, int minimumDimensionValue) If row >= 0 and column >= 0, changes the specified element tominimumDimensionValueif the element is less. Does nothing if row <0 or column < 0.- Parameters:
row- the row of thisIntersectionMatrix, indicating the interior, boundary or exterior of the firstGeometrycolumn- the column of thisIntersectionMatrix, indicating the interior, boundary or exterior of the secondGeometryminimumDimensionValue- the dimension value with which to compare the element. The order of dimension values from least to greatest is{DONTCARE, TRUE, FALSE, 0, 1, 2}.
-
setAtLeast
For each element in thisIntersectionMatrix, changes the element to the corresponding minimum dimension symbol if the element is less.- Parameters:
minimumDimensionSymbols- nine dimension symbols with which to compare the elements of thisIntersectionMatrix. The order of dimension values from least to greatest is{DONTCARE, TRUE, FALSE, 0, 1, 2}.
-
setAll
public void setAll(int dimensionValue) Changes the elements of thisIntersectionMatrixtodimensionValue.- Parameters:
dimensionValue- the dimension value to which to set thisIntersectionMatrixs elements. Possible values{TRUE, FALSE, DONTCARE, 0, 1, 2}.
-
get
public int get(int row, int column) Returns the value of one of this matrix entries. The value of the provided index is one of the values from theLocationclass. The value returned is a constant from theDimensionclass.- Parameters:
row- the row of thisIntersectionMatrix, indicating the interior, boundary or exterior of the firstGeometrycolumn- the column of thisIntersectionMatrix, indicating the interior, boundary or exterior of the secondGeometry- Returns:
- the dimension value at the given matrix position.
-
isDisjoint
public boolean isDisjoint()Tests if this matrix matches[FF*FF****].- Returns:
trueif the twoGeometrys related by this matrix are disjoint
-
isIntersects
public boolean isIntersects()Tests ifisDisjointreturns false.- Returns:
trueif the twoGeometrys related by this matrix intersect
-
isTouches
public boolean isTouches(int dimensionOfGeometryA, int dimensionOfGeometryB) Tests if this matrix matches[FT*******],[F**T*****]or[F***T****].- Parameters:
dimensionOfGeometryA- the dimension of the firstGeometrydimensionOfGeometryB- the dimension of the secondGeometry- Returns:
trueif the twoGeometrys related by this matrix touch; Returns false if bothGeometrys are points.
-
isCrosses
public boolean isCrosses(int dimensionOfGeometryA, int dimensionOfGeometryB) Tests whether this geometry crosses the specified geometry.The
crossespredicate has the following equivalent definitions:- The geometries have some but not all interior points in common.
- The DE-9IM Intersection Matrix for the two geometries matches
[T*T******](for P/L, P/A, and L/A situations)[T*****T**](for L/P, L/A, and A/L situations)[0********](for L/L situations)
false.The SFS defined this predicate only for P/L, P/A, L/L, and L/A situations. JTS extends the definition to apply to L/P, A/P and A/L situations as well. This makes the relation symmetric.
- Parameters:
dimensionOfGeometryA- the dimension of the firstGeometrydimensionOfGeometryB- the dimension of the secondGeometry- Returns:
trueif the twoGeometrys related by this matrix cross.
-
isWithin
public boolean isWithin()Tests whether this matrix matches[T*F**F***].- Returns:
trueif the firstGeometryis within the second
-
isContains
public boolean isContains()Tests whether this matrix matches [T*****FF*[.- Returns:
trueif the firstGeometrycontains the second
-
isCovers
public boolean isCovers()Tests if this matrix matches[T*****FF*]or[*T****FF*]or[***T**FF*]or[****T*FF*]- Returns:
trueif the firstGeometrycovers the second
-
isCoveredBy
public boolean isCoveredBy()Tests if this matrix matches[T*F**F***]or[*TF**F***]or[**FT*F***]or[**F*TF***]- Returns:
trueif the firstGeometryis covered by the second
-
isEquals
public boolean isEquals(int dimensionOfGeometryA, int dimensionOfGeometryB) Tests whether the argument dimensions are equal and this matrix matches the pattern [T*F**FFF*].Note: This pattern differs from the one stated in Simple feature access - Part 1: Common architecture. That document states the pattern as [TFFFTFFFT]. This would specify that two identical POINTs are not equal, which is not desirable behaviour. The pattern used here has been corrected to compute equality in this situation.
- Parameters:
dimensionOfGeometryA- the dimension of the firstGeometrydimensionOfGeometryB- the dimension of the secondGeometry- Returns:
trueif the twoGeometrys related by this matrix are equal; theGeometrys must have the same dimension to be equal
-
isOverlaps
public boolean isOverlaps(int dimensionOfGeometryA, int dimensionOfGeometryB) Tests if this matrix matches- [T*T***T**] (for two points or two surfaces)
- [1*T***T**] (for two curves)
- Parameters:
dimensionOfGeometryA- the dimension of the firstGeometrydimensionOfGeometryB- the dimension of the secondGeometry- Returns:
trueif the twoGeometrys related by this matrix overlap. For this function to returntrue, theGeometrys must be two points, two curves or two surfaces.
-
matches
Tests whether this matrix matches the given matrix pattern.- Parameters:
pattern- A pattern containing nine dimension symbols with which to compare the entries of this matrix. Possible symbol values are{T, F, * , 0, 1, 2}.- Returns:
trueif this matrix matches the pattern
-
transpose
Transposes this IntersectionMatrix.- Returns:
- this
IntersectionMatrixas a convenience
-
toString
-