DistanceOp.h

00001 /**********************************************************************
00002  * $Id: DistanceOp.h 1831 2006-09-07 09:01:08Z 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 #ifndef GEOS_OP_DISTANCE_DISTANCEOP_H
00017 #define GEOS_OP_DISTANCE_DISTANCEOP_H
00018 
00019 #include <geos/algorithm/PointLocator.h> // for composition
00020 
00021 #include <vector>
00022 
00023 // Forward declarations
00024 namespace geos {
00025         namespace geom { 
00026                 class Coordinate;
00027                 class Polygon;
00028                 class LineString;
00029                 class Point;
00030                 class Geometry;
00031                 class CoordinateSequence;
00032         }
00033         namespace operation { 
00034                 namespace distance { 
00035                         class GeometryLocation;
00036                 }
00037         }
00038 }
00039 
00040 
00041 namespace geos {
00042 namespace operation { // geos::operation
00043 namespace distance { // geos::operation::distance
00044 
00060 class DistanceOp {
00061 public:
00068         static double distance(const geom::Geometry *g0, const geom::Geometry *g1);
00069 
00078         static geom::CoordinateSequence* closestPoints(geom::Geometry *g0, geom::Geometry *g1);
00079 
00084         DistanceOp(const geom::Geometry *g0, const geom::Geometry *g1);
00085 
00086         ~DistanceOp();
00087 
00093         double distance();
00094 
00102         geom::CoordinateSequence* closestPoints();
00103 
00114         std::vector<GeometryLocation*>* closestLocations();
00115 
00116 private:
00117 
00118         algorithm::PointLocator ptLocator;
00119         std::vector<geom::Geometry const*> geom;
00120         std::vector<geom::Coordinate *> newCoords;
00121         std::vector<GeometryLocation*> *minDistanceLocation;
00122         double minDistance;
00123         void updateMinDistance(double dist);
00124         void updateMinDistance(std::vector<GeometryLocation*> *locGeom, bool flip);
00125         void computeMinDistance();
00126         void computeContainmentDistance();
00127 
00128         void computeInside(std::vector<GeometryLocation*> *locs,
00129                         const std::vector<const geom::Polygon*>& polys,
00130                         std::vector<GeometryLocation*> *locPtPoly);
00131 
00132         void computeInside(GeometryLocation *ptLoc,
00133                         const geom::Polygon *poly,
00134                         std::vector<GeometryLocation*> *locPtPoly);
00135 
00136         void computeLineDistance();
00137 
00138         void computeMinDistanceLines(
00139                         const std::vector<const geom::LineString*>& lines0,
00140                         const std::vector<const geom::LineString*>& lines1,
00141                         std::vector<GeometryLocation*>& locGeom);
00142 
00143         void computeMinDistancePoints(
00144                         const std::vector<const geom::Point*>& points0,
00145                         const std::vector<const geom::Point*>& points1,
00146                         std::vector<GeometryLocation*>& locGeom);
00147 
00148         void computeMinDistanceLinesPoints(
00149                         const std::vector<const geom::LineString*>& lines0,
00150                         const std::vector<const geom::Point*>& points1,
00151                         std::vector<GeometryLocation*>& locGeom);
00152 
00153         void computeMinDistance(const geom::LineString *line0,
00154                         const geom::LineString *line1,
00155                         std::vector<GeometryLocation*>& locGeom);
00156 
00157         void computeMinDistance(const geom::LineString *line,
00158                         const geom::Point *pt,
00159                         std::vector<GeometryLocation*>& locGeom);
00160 };
00161 
00162 
00163 } // namespace geos::operation::distance
00164 } // namespace geos::operation
00165 } // namespace geos
00166 
00167 #endif // GEOS_OP_DISTANCE_DISTANCEOP_H
00168 
00169 /**********************************************************************
00170  * $Log$
00171  * Revision 1.1  2006/03/21 17:55:01  strk
00172  * opDistance.h header split
00173  *
00174  **********************************************************************/
00175 

Generated on Fri Mar 27 04:52:39 2009 for GEOS by  doxygen 1.5.4