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

DistanceOp.h

00001 /**********************************************************************
00002  * $Id: DistanceOp.h 2560 2009-06-08 10:29:54Z 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: operation/distance/DistanceOp.java rev 1.21 (JTS-1.10)
00017  *
00018  **********************************************************************/
00019 
00020 #ifndef GEOS_OP_DISTANCE_DISTANCEOP_H
00021 #define GEOS_OP_DISTANCE_DISTANCEOP_H
00022 
00023 #include <geos/export.h>
00024 
00025 #include <geos/algorithm/PointLocator.h> // for composition
00026 
00027 #include <vector>
00028 
00029 // Forward declarations
00030 namespace geos {
00031         namespace geom { 
00032                 class Coordinate;
00033                 class Polygon;
00034                 class LineString;
00035                 class Point;
00036                 class Geometry;
00037                 class CoordinateSequence;
00038         }
00039         namespace operation { 
00040                 namespace distance { 
00041                         class GeometryLocation;
00042                 }
00043         }
00044 }
00045 
00046 
00047 namespace geos {
00048 namespace operation { // geos::operation
00049 namespace distance { // geos::operation::distance
00050 
00069 class GEOS_DLL DistanceOp {
00070 public:
00079         static double distance(const geom::Geometry& g0,
00080                                const geom::Geometry& g1);
00081 
00083         static double distance(const geom::Geometry *g0,
00084                                 const geom::Geometry *g1);
00085 
00096         static bool isWithinDistance(const geom::Geometry& g0,
00097                                      const geom::Geometry& g1,
00098                                                     double distance);
00099 
00112         static geom::CoordinateSequence* nearestPoints(
00113                                                 const geom::Geometry *g0,
00114                                                 const geom::Geometry *g1);
00115 
00129         static geom::CoordinateSequence* closestPoints(
00130                                                 const geom::Geometry *g0,
00131                                                 const geom::Geometry *g1);
00132 
00134         DistanceOp(const geom::Geometry *g0, const geom::Geometry *g1);
00135 
00144         DistanceOp(const geom::Geometry& g0, const geom::Geometry& g1);
00145 
00156         DistanceOp(const geom::Geometry& g0, const geom::Geometry& g1,
00157                                               double terminateDistance);
00158 
00159         ~DistanceOp();
00160 
00166         double distance();
00167 
00177         geom::CoordinateSequence* closestPoints();
00178 
00187         geom::CoordinateSequence* nearestPoints();
00188 
00189 private:
00190 
00203         std::vector<GeometryLocation*>* nearestLocations();
00204 
00205         // input (TODO: use two references instead..)
00206         std::vector<geom::Geometry const*> geom;
00207         double terminateDistance; 
00208 
00209         // working 
00210         algorithm::PointLocator ptLocator;
00211         // TODO: use auto_ptr
00212         std::vector<GeometryLocation*> *minDistanceLocation;
00213         double minDistance;
00214 
00215         // memory management
00216         std::vector<geom::Coordinate *> newCoords;
00217 
00218 
00219         void updateMinDistance(std::vector<GeometryLocation*>& locGeom,
00220                                bool flip);
00221 
00222         void computeMinDistance();
00223 
00224         void computeContainmentDistance();
00225 
00226         void computeInside(std::vector<GeometryLocation*> *locs,
00227                         const std::vector<const geom::Polygon*>& polys,
00228                         std::vector<GeometryLocation*> *locPtPoly);
00229 
00230         void computeInside(GeometryLocation *ptLoc,
00231                         const geom::Polygon *poly,
00232                         std::vector<GeometryLocation*> *locPtPoly);
00233 
00238         void computeFacetDistance();
00239 
00240         void computeMinDistanceLines(
00241                         const std::vector<const geom::LineString*>& lines0,
00242                         const std::vector<const geom::LineString*>& lines1,
00243                         std::vector<GeometryLocation*>& locGeom);
00244 
00245         void computeMinDistancePoints(
00246                         const std::vector<const geom::Point*>& points0,
00247                         const std::vector<const geom::Point*>& points1,
00248                         std::vector<GeometryLocation*>& locGeom);
00249 
00250         void computeMinDistanceLinesPoints(
00251                         const std::vector<const geom::LineString*>& lines0,
00252                         const std::vector<const geom::Point*>& points1,
00253                         std::vector<GeometryLocation*>& locGeom);
00254 
00255         void computeMinDistance(const geom::LineString *line0,
00256                         const geom::LineString *line1,
00257                         std::vector<GeometryLocation*>& locGeom);
00258 
00259         void computeMinDistance(const geom::LineString *line,
00260                         const geom::Point *pt,
00261                         std::vector<GeometryLocation*>& locGeom);
00262 };
00263 
00264 
00265 } // namespace geos::operation::distance
00266 } // namespace geos::operation
00267 } // namespace geos
00268 
00269 #endif // GEOS_OP_DISTANCE_DISTANCEOP_H
00270 
00271 /**********************************************************************
00272  * $Log$
00273  * Revision 1.1  2006/03/21 17:55:01  strk
00274  * opDistance.h header split
00275  *
00276  **********************************************************************/
00277 

Generated on Thu Jul 22 2010 for GEOS by  doxygen 1.7.1