GEOS 3.14.0dev
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#pragma once
20
21#include <geos/geom/Location.h>
22
23#include <geos/export.h>
24#include <array>
25#include <string>
26
27namespace geos {
28namespace geom { // geos::geom
29
51class GEOS_DLL IntersectionMatrix {
52
53public:
54
62
71 IntersectionMatrix(const std::string& elements);
72
81
92 bool matches(const std::string& requiredDimensionSymbols) const;
93
106 static bool matches(int actualDimensionValue,
107 char requiredDimensionSymbol);
108
121 static bool matches(const std::string& actualDimensionSymbols,
122 const std::string& requiredDimensionSymbols);
123
135
146 void set(Location row, Location column, int dimensionValue);
147
156 void set(const std::string& dimensionSymbols);
157
170 void setAtLeast(Location row, Location column, int minimumDimensionValue);
171
192 void setAtLeastIfValid(Location row, Location column, int minimumDimensionValue);
193
204 void setAtLeast(std::string minimumDimensionSymbols);
205
214 void setAll(int dimensionValue);
215
229 int get(Location row, Location column) const {
230 return matrix[static_cast<size_t>(row)][static_cast<size_t>(column)];
231 }
232
239 bool isDisjoint() const;
240
247 bool isIntersects() const;
248
261 bool isTouches(int dimensionOfGeometryA, int dimensionOfGeometryB)
262 const;
263
281 bool isCrosses(int dimensionOfGeometryA, int dimensionOfGeometryB)
282 const;
283
289 bool isWithin() const;
290
296 bool isContains() const;
297
307 bool isEquals(int dimensionOfGeometryA, int dimensionOfGeometryB)
308 const;
309
323 bool isOverlaps(int dimensionOfGeometryA, int dimensionOfGeometryB)
324 const;
325
334 bool isCovers() const;
335
336
345 bool isCoveredBy() const;
346
356
364 std::string toString() const;
365
366
367private:
368
369 static const int firstDim; // = 3;
370
371 static const int secondDim; // = 3;
372
373 // Internal buffer for 3x3 matrix.
374 std::array<std::array<int, 3>, 3> matrix;
375
376}; // class IntersectionMatrix
377
378GEOS_DLL std::ostream& operator<< (std::ostream& os, const IntersectionMatrix& im);
379
380
381} // namespace geos::geom
382} // namespace geos
383
Implementation of Dimensionally Extended Nine-Intersection Model (DE-9IM) matrix.
Definition IntersectionMatrix.h:51
void setAll(int dimensionValue)
Changes the elements of this IntersectionMatrix to dimensionValue.
int get(Location row, Location column) const
Returns the value of one of this IntersectionMatrixs elements.
Definition IntersectionMatrix.h:229
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...
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)
Overridden constructor.
void setAtLeast(Location row, Location column, int minimumDimensionValue)
Changes the specified element to minimumDimensionValue if the element is less.
Location
Constants representing the location of a point relative to a geometry.
Definition Location.h:32
Basic namespace for all GEOS functionalities.
Definition geos.h:39