GEOS 3.10.1
Envelope.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/Envelope.java rev 1.46 (JTS-1.10)
16 *
17 **********************************************************************/
18
19#ifndef GEOS_GEOM_ENVELOPE_H
20#define GEOS_GEOM_ENVELOPE_H
21
22
23#include <geos/export.h>
24#include <geos/inline.h>
25#include <geos/geom/Coordinate.h>
26
27#include <string>
28#include <vector>
29#include <ostream> // for operator<<
30#include <memory>
31
32namespace geos {
33namespace geom { // geos::geom
34
35class Envelope;
36
38GEOS_DLL std::ostream& operator<< (std::ostream& os, const Envelope& o);
39
40class Coordinate;
41
58class GEOS_DLL Envelope {
59
60public:
61
62 friend std::ostream& operator<< (std::ostream& os, const Envelope& o);
63
64 typedef std::unique_ptr<Envelope> Ptr;
65
70
79 Envelope(double x1, double x2, double y1, double y2);
80
87 Envelope(const Coordinate& p1, const Coordinate& p2);
88
94 explicit Envelope(const Coordinate& p);
95
100 explicit Envelope(const std::string& str);
101
111 static bool intersects(const Coordinate& p1, const Coordinate& p2,
112 const Coordinate& q);
113
125 static bool intersects(const Coordinate& p1, const Coordinate& p2,
126 const Coordinate& q1, const Coordinate& q2);
127
136 bool intersects(const Coordinate& a, const Coordinate& b) const;
137
141 void init();
142
151 void init(double x1, double x2, double y1, double y2);
152
159 void init(const Coordinate& p1, const Coordinate& p2);
160
166 void init(const Coordinate& p);
167
168 // use assignment operator instead
169 //void init(Envelope env);
170
175 void setToNull();
176
183 bool isNull() const;
184
190 double getWidth() const;
191
197 double getHeight() const;
198
205 double
206 getArea() const
207 {
208 return getWidth() * getHeight();
209 }
210
215 double getMaxY() const;
216
221 double getMaxX() const;
222
227 double getMinY() const;
228
233 double getMinX() const;
234
242 bool centre(Coordinate& centre) const;
243
253 bool intersection(const Envelope& env, Envelope& result) const;
254
261 void translate(double transX, double transY);
262
270 void expandBy(double deltaX, double deltaY);
271
279 void
280 expandBy(double p_distance)
281 {
282 expandBy(p_distance, p_distance);
283 }
284
285
293
304 void expandToInclude(double x, double y);
305
313 void expandToInclude(const Envelope* other);
314 void expandToInclude(const Envelope& other);
315
328 bool
329 contains(const Envelope& other) const
330 {
331 return covers(other);
332 }
333
334 bool
335 contains(const Envelope* other) const
336 {
337 return contains(*other);
338 }
339
347 bool
348 contains(const Coordinate& p) const
349 {
350 return covers(p.x, p.y);
351 }
352
363 bool
364 contains(double x, double y) const
365 {
366 return covers(x, y);
367 }
368
375 bool intersects(const Coordinate& p) const;
376
384 bool intersects(double x, double y) const;
385
392 bool intersects(const Envelope* other) const;
393
394 bool intersects(const Envelope& other) const;
395
403 bool disjoint(const Envelope* other) const;
404
405 bool disjoint(const Envelope& other) const;
406
414 bool covers(double x, double y) const;
415
422 bool covers(const Coordinate* p) const;
423
430 bool covers(const Envelope& other) const;
431
432 bool
433 covers(const Envelope* other) const
434 {
435 return covers(*other);
436 }
437
438
445 bool equals(const Envelope* other) const;
446
452 std::string toString() const;
453
460 double distance(const Envelope& env) const;
461
468 double distanceSquared(const Envelope& env) const;
469
479 static double distanceToCoordinate(const Coordinate & c, const Coordinate & p1, const Coordinate & p2);
480
490 static double distanceSquaredToCoordinate(const Coordinate & c, const Coordinate & p1, const Coordinate & p2);
491
492 std::size_t hashCode() const;
493
494private:
495
502 static std::vector<std::string> split(const std::string& str,
503 const std::string& delimiters = " ");
504
505 static double distance(double x0, double y0, double x1, double y1);
506
508 double minx;
509
511 double maxx;
512
514 double miny;
515
517 double maxy;
518};
519
521GEOS_DLL bool operator==(const Envelope& a, const Envelope& b);
522
523GEOS_DLL bool operator!=(const Envelope& a, const Envelope& b);
524
527GEOS_DLL bool operator< (const Envelope& a, const Envelope& b);
528
529
530} // namespace geos::geom
531} // namespace geos
532
533#ifdef GEOS_INLINE
534# include "geos/geom/Envelope.inl"
535#endif
536
537#endif // ndef GEOS_GEOM_ENVELOPE_H
Coordinate is the lightweight class used to store coordinates.
Definition: Coordinate.h:60
double y
y-coordinate
Definition: Coordinate.h:83
double x
x-coordinate
Definition: Coordinate.h:80
An Envelope defines a rectangulare region of the 2D coordinate plane.
Definition: Envelope.h:58
bool disjoint(const Envelope *other) const
double getMinX() const
Returns the Envelope minimum x-value. min x > max x indicates that this is a null Envelope.
bool intersection(const Envelope &env, Envelope &result) const
Computes the intersection of two Envelopes.
Envelope(const Coordinate &p)
Creates an Envelope for a region defined by a single Coordinate.
double distanceSquared(const Envelope &env) const
Computes the square of the distance between this and another Envelope.
bool contains(const Envelope &other) const
Tests if the Envelope other lies wholly inside this Envelope (inclusive of the boundary).
Definition: Envelope.h:329
void expandToInclude(double x, double y)
Enlarges the boundary of the Envelope so that it contains (x,y).
bool intersects(double x, double y) const
Check if the point (x, y) intersects (lies inside) the region of this Envelope.
bool intersects(const Coordinate &a, const Coordinate &b) const
Check if the extent defined by two extremal points intersects the extent of this Envelope.
bool equals(const Envelope *other) const
Returns true if the Envelope other spatially equals this Envelope.
void setToNull()
Makes this Envelope a "null" envelope, that is, the envelope of the empty geometry.
bool centre(Coordinate &centre) const
Computes the coordinate of the centre of this envelope (as long as it is non-null).
bool covers(double x, double y) const
Tests if the given point lies in or on the envelope.
double distance(const Envelope &env) const
Computes the distance between this and another Envelope.
void init(const Coordinate &p1, const Coordinate &p2)
Initialize an Envelope to a region defined by two Coordinates.
double getArea() const
Gets the area of this envelope.
Definition: Envelope.h:206
void expandToInclude(const Coordinate &p)
Enlarges the boundary of the Envelope so that it contains p. Does nothing if p is already on or withi...
void expandBy(double deltaX, double deltaY)
Expands this envelope by a given distance in all directions. Both positive and negative distances are...
void init(double x1, double x2, double y1, double y2)
Initialize an Envelope for a region defined by maximum and minimum values.
bool contains(double x, double y) const
Returns true if the given point lies in or on the envelope.
Definition: Envelope.h:364
bool isNull() const
Returns true if this Envelope is a "null" envelope.
double getHeight() const
Returns the difference between the maximum and minimum y values.
Envelope()
Creates a null Envelope.
Envelope(const std::string &str)
Create an Envelope from an Envelope string representation produced by Envelope::toString()
double getWidth() const
Returns the difference between the maximum and minimum x values.
void init(const Coordinate &p)
Initialize an Envelope to a region defined by a single Coordinate.
double getMaxX() const
Returns the Envelope maximum x-value. min x > max x indicates that this is a null Envelope.
double getMaxY() const
Returns the Envelope maximum y-value. min y > max y indicates that this is a null Envelope.
static bool intersects(const Coordinate &p1, const Coordinate &p2, const Coordinate &q)
Test the point q to see whether it intersects the Envelope defined by p1-p2.
Envelope(const Coordinate &p1, const Coordinate &p2)
Creates an Envelope for a region defined by two Coordinates.
void expandBy(double p_distance)
Expands this envelope by a given distance in all directions.
Definition: Envelope.h:280
bool intersects(const Coordinate &p) const
Check if the point p intersects (lies inside) the region of this Envelope.
void expandToInclude(const Envelope *other)
Enlarges the boundary of the Envelope so that it contains other.
bool contains(const Coordinate &p) const
Returns true if the given point lies in or on the envelope.
Definition: Envelope.h:348
void init()
Initialize to a null Envelope.
static bool intersects(const Coordinate &p1, const Coordinate &p2, const Coordinate &q1, const Coordinate &q2)
Test the envelope defined by p1-p2 for intersection with the envelope defined by q1-q2.
bool covers(const Coordinate *p) const
Tests if the given point lies in or on the envelope.
std::string toString() const
Returns a string of the form Env[minx:maxx,miny:maxy].
bool intersects(const Envelope *other) const
Check if the region defined by other Envelope intersects the region of this Envelope.
void translate(double transX, double transY)
Translates this envelope by given amounts in the X and Y direction.
bool covers(const Envelope &other) const
Tests if the Envelope other lies wholly inside this Envelope (inclusive of the boundary).
static double distanceSquaredToCoordinate(const Coordinate &c, const Coordinate &p1, const Coordinate &p2)
Computes the squared distance between one Coordinate and an Envelope defined by two other Coordinates...
double getMinY() const
Returns the Envelope minimum y-value. min y > max y indicates that this is a null Envelope.
Envelope(double x1, double x2, double y1, double y2)
Creates an Envelope for a region defined by maximum and minimum values.
static double distanceToCoordinate(const Coordinate &c, const Coordinate &p1, const Coordinate &p2)
Computes the distance between one Coordinate and an Envelope defined by two other Coordinates....
bool operator<(const Coordinate &a, const Coordinate &b)
Strict weak ordering operator for Coordinate.
Definition: Coordinate.h:140
bool operator!=(const Coordinate &a, const Coordinate &b)
Inequality operator for Coordinate. 2D only.
bool operator==(const Coordinate &a, const Coordinate &b)
Equality operator for Coordinate. 2D only.
std::ostream & operator<<(std::ostream &os, const Coordinate &c)
Output function.
Basic namespace for all GEOS functionalities.
Definition: geos.h:40