• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List

Envelope.h

00001 /**********************************************************************
00002  * $Id: Envelope.h 2556 2009-06-06 22:22:28Z strk $
00003  *
00004  * GEOS - Geometry Engine Open Source
00005  * http://geos.refractions.net
00006  *
00007  * Copyright (C) 2006 Refractions Research Inc.
00008  *
00009  * This is free software; you can redistribute and/or modify it under
00010  * the terms of the GNU Lesser General Public Licence as published
00011  * by the Free Software Foundation. 
00012  * See the COPYING file for more information.
00013  *
00014  **********************************************************************
00015  *
00016  * Last port: geom/Envelope.java rev 1.46 (JTS-1.10)
00017  *
00018  **********************************************************************/
00019 
00020 #ifndef GEOS_GEOM_ENVELOPE_H
00021 #define GEOS_GEOM_ENVELOPE_H
00022 
00023 
00024 #include <geos/export.h>
00025 #include <geos/inline.h>
00026 #include <geos/geom/Coordinate.h>
00027 
00028 #include <string>
00029 #include <vector>
00030 #include <memory>
00031 
00032 namespace geos {
00033 namespace geom { // geos::geom
00034 
00035 class Coordinate;
00036 
00054 class GEOS_DLL Envelope {
00055 
00056 public:
00057 
00058         typedef std::auto_ptr<Envelope> AutoPtr;
00059 
00063         Envelope(void);
00064 
00074         Envelope(double x1, double x2, double y1, double y2);
00075 
00083         Envelope(const Coordinate& p1, const Coordinate& p2);
00084 
00090         Envelope(const Coordinate& p);
00091 
00093         Envelope(const Envelope &env);
00094 
00096         Envelope& operator=(const Envelope& e);
00097 
00102         Envelope(const std::string &str);
00103 
00104         ~Envelope(void);
00105 
00115         static bool intersects(const Coordinate& p1, const Coordinate& p2,
00116                         const Coordinate& q);
00117 
00129         static bool intersects(const Coordinate& p1, const Coordinate& p2,
00130                         const Coordinate& q1, const Coordinate& q2);
00131 
00135         void init(void);
00136 
00146         void init(double x1, double x2, double y1, double y2);
00147 
00155         void init(const Coordinate& p1, const Coordinate& p2);
00156 
00163         void init(const Coordinate& p);
00164 
00165         // use assignment operator instead
00166         //void init(Envelope env);
00167 
00172         void setToNull(void);
00173 
00182         bool isNull(void) const;
00183 
00189         double getWidth(void) const;
00190 
00196         double getHeight(void) const;
00197 
00204         double getArea() const
00205         {
00206                 return getWidth() * getHeight();
00207         }
00208 
00213         double getMaxY() const;
00214 
00219         double getMaxX() const;
00220 
00225         double getMinY() const;
00226 
00231         double getMinX() const;
00232 
00241         bool centre(Coordinate& centre) const;
00242 
00252         bool intersection(const Envelope& env, Envelope& result) const;
00253 
00260         void translate(double transX, double transY);
00261 
00271         void expandBy(double deltaX, double deltaY);
00272 
00280         void expandBy(double distance) { expandBy(distance, distance); }
00281 
00282 
00289         void expandToInclude(const Coordinate& p);
00290 
00300         void expandToInclude(double x, double y);
00301 
00309         void expandToInclude(const Envelope* other);
00310 
00324         bool contains(const Envelope& other) const {
00325                 return covers(other);
00326         }
00327 
00328         bool contains(const Envelope* other) const {
00329                 return contains(*other);
00330         }
00331 
00341         bool contains(const Coordinate& p) const {
00342                 return covers(p.x, p.y);
00343         }
00344 
00360         bool contains(double x, double y) const {
00361                 return covers(x, y);
00362         }
00363 
00371         bool intersects(const Coordinate& p) const;
00372 
00381         bool intersects(double x, double y) const;
00382 
00392         bool intersects(const Envelope* other) const;
00393 
00394         bool intersects(const Envelope& other) const;
00395 
00406         bool covers(double x, double y) const;
00407 
00416         bool covers(const Coordinate *p) const;
00417 
00426         bool covers(const Envelope& other) const;
00427 
00428         bool covers(const Envelope* other) const {
00429                 return covers(*other);
00430         }
00431 
00432 
00443         bool equals(const Envelope* other) const;
00444 
00452         std::string toString(void) const;
00453 
00461         double distance(const Envelope* env) const;
00462 
00463         int hashCode() const;
00464 
00465 private:
00466 
00473         std::vector<std::string> split(const std::string &str,
00474                         const std::string &delimiters = " ");
00475 
00476         static double distance(double x0,double y0,double x1,double y1);
00477 
00479         double minx;
00480 
00482         double maxx;
00483 
00485         double miny;
00486 
00488         double maxy;
00489 };
00490 
00492 bool operator==(const Envelope& a, const Envelope& b);
00493 
00494 } // namespace geos::geom
00495 } // namespace geos
00496 
00497 #ifdef GEOS_INLINE
00498 # include "geos/geom/Envelope.inl"
00499 #endif
00500 
00501 #endif // ndef GEOS_GEOM_ENVELOPE_H
00502 
00503 /**********************************************************************
00504  * $Log$
00505  * Revision 1.4  2006/04/10 18:15:09  strk
00506  * Changed Geometry::envelope member to be of type auto_ptr<Envelope>.
00507  * Changed computeEnvelopeInternal() signater to return auto_ptr<Envelope>
00508  *
00509  * Revision 1.3  2006/04/05 14:04:25  strk
00510  * Fixed copy ctor to support "Null" Envelope copies.
00511  * Drop init(Envelope&) method.
00512  * Port info and various cleanups.
00513  *
00514  * Revision 1.2  2006/03/24 09:52:41  strk
00515  * USE_INLINE => GEOS_INLINE
00516  *
00517  * Revision 1.1  2006/03/09 16:46:49  strk
00518  * geos::geom namespace definition, first pass at headers split
00519  *
00520  **********************************************************************/

Generated on Thu Jul 22 2010 for GEOS by  doxygen 1.7.1