GEOS 3.9.1
IntersectionMatrix.h
1/**********************************************************************
2 *
3 * GEOS - Geometry Engine Open Source
4 * http://geos.osgeo.org
5 *
6 * Copyright (C) 2006 Refractions Research Inc.
7 *
8 * This is free software; you can redistribute and/or modify it under
9 * the terms of the GNU Lesser General Public Licence as published
10 * by the Free Software Foundation.
11 * See the COPYING file for more information.
12 *
13 **********************************************************************
14 *
15 * Last port: geom/IntersectionMatrix.java rev. 1.18
16 *
17 **********************************************************************/
18
19#ifndef GEOS_GEOM_INTERSECTIONMATRIX_H
20#define GEOS_GEOM_INTERSECTIONMATRIX_H
21
22#include <geos/geom/Location.h>
23
24#include <geos/export.h>
25#include <array>
26#include <string>
27
28#include <geos/inline.h>
29
30namespace geos {
31namespace geom { // geos::geom
32
54class GEOS_DLL IntersectionMatrix {
55
56public:
57
65
74 IntersectionMatrix(const std::string& elements);
75
84
95 bool matches(const std::string& requiredDimensionSymbols) const;
96
109 static bool matches(int actualDimensionValue,
110 char requiredDimensionSymbol);
111
124 static bool matches(const std::string& actualDimensionSymbols,
125 const std::string& requiredDimensionSymbols);
126
138
149 void set(Location row, Location column, int dimensionValue);
150
159 void set(const std::string& dimensionSymbols);
160
173 void setAtLeast(Location row, Location column, int minimumDimensionValue);
174
195 void setAtLeastIfValid(Location row, Location column, int minimumDimensionValue);
196
207 void setAtLeast(std::string minimumDimensionSymbols);
208
217 void setAll(int dimensionValue);
218
232 int get(geom::Location row, geom::Location column) const {
233 return matrix[static_cast<size_t>(row)][static_cast<size_t>(column)];
234 }
235
242 bool isDisjoint() const;
243
250 bool isIntersects() const;
251
264 bool isTouches(int dimensionOfGeometryA, int dimensionOfGeometryB)
265 const;
266
284 bool isCrosses(int dimensionOfGeometryA, int dimensionOfGeometryB)
285 const;
286
292 bool isWithin() const;
293
299 bool isContains() const;
300
310 bool isEquals(int dimensionOfGeometryA, int dimensionOfGeometryB)
311 const;
312
326 bool isOverlaps(int dimensionOfGeometryA, int dimensionOfGeometryB)
327 const;
328
337 bool isCovers() const;
338
339
348 bool isCoveredBy() const;
349
359
367 std::string toString() const;
368
369private:
370
371 static const int firstDim; // = 3;
372
373 static const int secondDim; // = 3;
374
375 // Internal buffer for 3x3 matrix.
376 std::array<std::array<int, 3>, 3> matrix;
377
378}; // class IntersectionMatrix
379
380GEOS_DLL std::ostream& operator<< (std::ostream& os, const IntersectionMatrix& im);
381
382
383} // namespace geos::geom
384} // namespace geos
385
386#endif // ndef GEOS_GEOM_INTERSECTIONMATRIX_H
Implementation of Dimensionally Extended Nine-Intersection Model (DE-9IM) matrix.
Definition IntersectionMatrix.h:54
void setAll(int dimensionValue)
Changes the elements of this IntersectionMatrix to dimensionValue.
bool isCovers() const
Returns true if this IntersectionMatrix is T*****FF* or T****FF or ***T**FF* or ****T*FF*
bool isWithin() const
Returns true if this IntersectionMatrix is T*F**F***.
bool isCoveredBy() const
Returns true if this IntersectionMatrix is T*F**F*** *TF**F*** or **FT*F*** or **F*TF***
bool isIntersects() const
Returns true if isDisjoint returns false.
bool isTouches(int dimensionOfGeometryA, int dimensionOfGeometryB) const
Returns true if this IntersectionMatrix is FT*******, F**T***** or F***T****.
bool isEquals(int dimensionOfGeometryA, int dimensionOfGeometryB) const
Returns true if this IntersectionMatrix is T*F**FFF*.
IntersectionMatrix * transpose()
Transposes this IntersectionMatrix.
void set(Location row, Location column, int dimensionValue)
Changes the value of one of this IntersectionMatrixs elements.
bool isCrosses(int dimensionOfGeometryA, int dimensionOfGeometryB) const
Returns true if this IntersectionMatrix is:
void setAtLeast(std::string minimumDimensionSymbols)
For each element in this IntersectionMatrix, changes the element to the corresponding minimum dimensi...
void setAtLeastIfValid(Location row, Location column, int minimumDimensionValue)
If row >= 0 and column >= 0, changes the specified element to minimumDimensionValue if the element is...
int get(geom::Location row, geom::Location column) const
Returns the value of one of this IntersectionMatrixs elements.
Definition IntersectionMatrix.h:232
void set(const std::string &dimensionSymbols)
Changes the elements of this IntersectionMatrix to the dimension symbols in dimensionSymbols.
void add(IntersectionMatrix *other)
Adds one matrix to another.
IntersectionMatrix()
Default constructor.
bool isDisjoint() const
Returns true if this IntersectionMatrix is FF*FF****.
static bool matches(const std::string &actualDimensionSymbols, const std::string &requiredDimensionSymbols)
Returns true if each of the actual dimension symbols satisfies the corresponding required dimension s...
bool matches(const std::string &requiredDimensionSymbols) const
Returns whether the elements of this IntersectionMatrix satisfies the required dimension symbols.
IntersectionMatrix(const IntersectionMatrix &other)
Copy constructor.
bool isContains() const
Returns true if this IntersectionMatrix is T*****FF*.
static bool matches(int actualDimensionValue, char requiredDimensionSymbol)
Tests if given dimension value satisfies the dimension symbol.
std::string toString() const
Returns a nine-character String representation of this IntersectionMatrix.
bool isOverlaps(int dimensionOfGeometryA, int dimensionOfGeometryB) const
Returns true if this IntersectionMatrix is:
IntersectionMatrix(const std::string &elements)
Overriden constructor.
void setAtLeast(Location row, Location column, int minimumDimensionValue)
Changes the specified element to minimumDimensionValue if the element is less.
std::ostream & operator<<(std::ostream &os, const Coordinate &c)
Output function.
Location
Constants representing the location of a point relative to a geometry.
Definition Location.h:34
Basic namespace for all GEOS functionalities.
Definition IndexedNestedRingTester.h:26