GEOS 3.6.2
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 <memory>
30
31namespace geos {
32namespace geom { // geos::geom
33
34class Coordinate;
35
53class GEOS_DLL Envelope {
54
55public:
56
57 typedef std::auto_ptr<Envelope> AutoPtr;
58
62 Envelope(void);
63
73 Envelope(double x1, double x2, double y1, double y2);
74
82 Envelope(const Coordinate& p1, const Coordinate& p2);
83
90
92 Envelope(const Envelope &env);
93
96
101 Envelope(const std::string &str);
102
103 ~Envelope(void);
104
114 static bool intersects(const Coordinate& p1, const Coordinate& p2,
115 const Coordinate& q);
116
128 static bool intersects(const Coordinate& p1, const Coordinate& p2,
129 const Coordinate& q1, const Coordinate& q2);
130
134 void init(void);
135
145 void init(double x1, double x2, double y1, double y2);
146
154 void init(const Coordinate& p1, const Coordinate& p2);
155
162 void init(const Coordinate& p);
163
164 // use assignment operator instead
165 //void init(Envelope env);
166
171 void setToNull(void);
172
181 bool isNull(void) const;
182
188 double getWidth(void) const;
189
195 double getHeight(void) const;
196
203 double getArea() const
204 {
205 return getWidth() * getHeight();
206 }
207
212 double getMaxY() const;
213
218 double getMaxX() const;
219
224 double getMinY() const;
225
230 double getMinX() const;
231
241
251 bool intersection(const Envelope& env, Envelope& result) const;
252
259 void translate(double transX, double transY);
260
270 void expandBy(double deltaX, double deltaY);
271
280
281
289
299 void expandToInclude(double x, double y);
300
308 void expandToInclude(const Envelope* other);
309
323 bool contains(const Envelope& other) const {
324 return covers(other);
325 }
326
327 bool contains(const Envelope* other) const {
328 return contains(*other);
329 }
330
340 bool contains(const Coordinate& p) const {
341 return covers(p.x, p.y);
342 }
343
359 bool contains(double x, double y) const {
360 return covers(x, y);
361 }
362
370 bool intersects(const Coordinate& p) const;
371
380 bool intersects(double x, double y) const;
381
391 bool intersects(const Envelope* other) const;
392
393 bool intersects(const Envelope& other) const;
394
405 bool covers(double x, double y) const;
406
415 bool covers(const Coordinate *p) const;
416
425 bool covers(const Envelope& other) const;
426
427 bool covers(const Envelope* other) const {
428 return covers(*other);
429 }
430
431
442 bool equals(const Envelope* other) const;
443
451 std::string toString(void) const;
452
460 double distance(const Envelope* env) const;
461
462 int hashCode() const;
463
464private:
465
472 std::vector<std::string> split(const std::string &str,
473 const std::string &delimiters = " ");
474
475 static double distance(double x0,double y0,double x1,double y1);
476
478 double minx;
479
481 double maxx;
482
484 double miny;
485
487 double maxy;
488};
489
491GEOS_DLL bool operator==(const Envelope& a, const Envelope& b);
492
493} // namespace geos::geom
494} // namespace geos
495
496#ifdef GEOS_INLINE
497# include "geos/geom/Envelope.inl"
498#endif
499
500#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:53
double getMinX() const
bool intersection(const Envelope &env, Envelope &result) const
Envelope(const Coordinate &p)
Creates an Envelope for a region defined by a single Coordinate.
bool contains(const Envelope &other) const
Tests if the Envelope other lies wholely inside this Envelope (inclusive of the boundary).
Definition Envelope.h:323
void expandToInclude(double x, double y)
Enlarges the boundary of the Envelope so that it contains (x,y). Does nothing if (x,...
bool intersects(double x, double y) const
void setToNull(void)
Makes this Envelope a "null" envelope, that is, the envelope of the empty geometry.
Envelope(const Envelope &env)
Copy constructor.
void init(void)
Initialize to a null Envelope.
bool equals(const Envelope *other) const
Returns true if the Envelope other spatially equals this Envelope.
bool centre(Coordinate &centre) const
bool covers(double x, double y) const
double getWidth(void) const
Returns the difference between the maximum and minimum x values.
void init(const Coordinate &p1, const Coordinate &p2)
Initialize an Envelope to a region defined by two Coordinates.
double getArea() const
Definition Envelope.h:203
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.
void expandBy(double distance)
Expands this envelope by a given distance in all directions. Both positive and negative distances are...
Definition Envelope.h:279
bool contains(double x, double y) const
Returns true if the given point lies in or on the envelope.
Definition Envelope.h:359
Envelope & operator=(const Envelope &e)
Assignment operator.
Envelope(const std::string &str)
Create an Envelope from an Envelope string representation produced by Envelope.toString().
void init(const Coordinate &p)
Initialize an Envelope to a region defined by a single Coordinate.
double getMaxX() const
double getMaxY() const
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.
bool isNull(void) const
Returns true if this Envelope is a "null" envelope.
Envelope(const Coordinate &p1, const Coordinate &p2)
Creates an Envelope for a region defined by two Coordinates.
bool intersects(const Coordinate &p) const
void expandToInclude(const Envelope *other)
Enlarges the boundary of the Envelope so that it contains other. Does nothing if other is wholly on o...
Envelope(void)
Creates a null Envelope.
bool contains(const Coordinate &p) const
Returns true if the given point lies in or on the envelope.
Definition Envelope.h:340
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
bool intersects(const Envelope *other) const
void translate(double transX, double transY)
Translates this envelope by given amounts in the X and Y direction.
bool covers(const Envelope &other) const
double getMinY() const
std::string toString(void) const
Returns a string of the form Env[minx:maxx,miny:maxy] .
double distance(const Envelope *env) const
Computes the distance between this and another Envelope.
Envelope(double x1, double x2, double y1, double y2)
Creates an Envelope for a region defined by maximum and minimum values.
double getHeight(void) const
Returns the difference between the maximum and minimum y values.
Contains the Geometry interface hierarchy and supporting classes.
Definition IndexedNestedRingTester.h:26
GEOS_DLL bool operator==(const Coordinate &a, const Coordinate &b)
Equality operator for Coordinate. 2D only.
Basic namespace for all GEOS functionalities.
Definition IndexedNestedRingTester.h:25