Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members | Related Pages

WKTWriter.h

00001 /**********************************************************************
00002  * $Id: WKTWriter.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) 2005-2006 Refractions Research Inc.
00008  * Copyright (C) 2001-2002 Vivid Solutions Inc.
00009  *
00010  * This is free software; you can redistribute and/or modify it under
00011  * the terms of the GNU Lesser General Public Licence as published
00012  * by the Free Software Foundation. 
00013  * See the COPYING file for more information.
00014  *
00015  **********************************************************************/
00016 
00017 #ifndef GEOS_IO_WKTWRITER_H
00018 #define GEOS_IO_WKTWRITER_H
00019 
00020 #include <geos/export.h>
00021 
00022 #include <string>
00023 
00024 // Forward declarations
00025 namespace geos {
00026         namespace geom {
00027                 class Coordinate;
00028                 class CoordinateSequence;
00029                 class Geometry;
00030                 class GeometryCollection;
00031                 class Point;
00032                 class LineString;
00033                 class LinearRing;
00034                 class Polygon;
00035                 class MultiPoint;
00036                 class MultiLineString;
00037                 class MultiPolygon;
00038                 class PrecisionModel;
00039         } 
00040         namespace io {
00041                 class Writer;
00042         } 
00043 } 
00044 
00045 
00046 namespace geos {
00047 namespace io {
00048 
00070 class GEOS_DLL WKTWriter {
00071 public:
00072         WKTWriter();
00073         ~WKTWriter();
00074 
00075         //string(count, ch) can be used for this
00076         //static string stringOfChar(char ch, int count);
00077 
00079         std::string write(const geom::Geometry *geometry);
00080 
00081         // Send Geometry's WKT to the given Writer
00082         void write(const geom::Geometry *geometry, Writer *writer);
00083 
00084         std::string writeFormatted(const geom::Geometry *geometry);
00085 
00086         void writeFormatted(const geom::Geometry *geometry, Writer *writer);
00087 
00095         static std::string toLineString(const geom::CoordinateSequence& seq); 
00096 
00105         static std::string toLineString(const geom::Coordinate& p0, const geom::Coordinate& p1);
00106 
00114         static std::string toPoint(const geom::Coordinate& p0);
00115  
00116 
00117 protected:
00118 
00119         std::string formatter;
00120 
00121         void appendGeometryTaggedText(const geom::Geometry *geometry, int level, Writer *writer);
00122 
00123         void appendPointTaggedText(
00124                         const geom::Coordinate* coordinate,
00125                         int level, Writer *writer);
00126 
00127         void appendLineStringTaggedText(
00128                         const geom::LineString *lineString,
00129                         int level, Writer *writer);
00130 
00131         void appendLinearRingTaggedText(
00132                         const geom::LinearRing *lineString,
00133                         int level, Writer *writer);
00134 
00135         void appendPolygonTaggedText(
00136                         const geom::Polygon *polygon,
00137                         int level, Writer *writer);
00138 
00139         void appendMultiPointTaggedText(
00140                         const geom::MultiPoint *multipoint,
00141                         int level, Writer *writer);
00142 
00143         void appendMultiLineStringTaggedText(
00144                         const geom::MultiLineString *multiLineString,
00145                         int level,Writer *writer);
00146 
00147         void appendMultiPolygonTaggedText(
00148                         const geom::MultiPolygon *multiPolygon,
00149                         int level, Writer *writer);
00150 
00151         void appendGeometryCollectionTaggedText(
00152                         const geom::GeometryCollection *geometryCollection,
00153                         int level,Writer *writer);
00154 
00155         void appendPointText(const geom::Coordinate* coordinate, int level,
00156                         Writer *writer);
00157 
00158         void appendCoordinate(const geom::Coordinate* coordinate,
00159                         Writer *writer);
00160 
00161         std::string writeNumber(double d);
00162 
00163         void appendLineStringText(
00164                         const geom::LineString *lineString,
00165                         int level, bool doIndent, Writer *writer);
00166 
00167         void appendPolygonText(
00168                         const geom::Polygon *polygon,
00169                         int level, bool indentFirst, Writer *writer);
00170 
00171         void appendMultiPointText(
00172                         const geom::MultiPoint *multiPoint,
00173                         int level, Writer *writer);
00174 
00175         void appendMultiLineStringText(
00176                         const geom::MultiLineString *multiLineString,
00177                         int level, bool indentFirst,Writer *writer);
00178 
00179         void appendMultiPolygonText(
00180                         const geom::MultiPolygon *multiPolygon,
00181                         int level, Writer *writer);
00182 
00183         void appendGeometryCollectionText(
00184                         const geom::GeometryCollection *geometryCollection,
00185                         int level,Writer *writer);
00186 
00187 private:
00188 
00189         enum {
00190                 INDENT = 2
00191         };
00192 
00193 //      static const int INDENT = 2;
00194 
00195         static std::string createFormatter(
00196                         const geom::PrecisionModel* precisionModel);
00197 
00198         bool isFormatted;
00199 
00200         int level;
00201 
00202         void writeFormatted(
00203                         const geom::Geometry *geometry,
00204                         bool isFormatted, Writer *writer);
00205 
00206         void indent(int level, Writer *writer);
00207 };
00208 
00209 } // namespace geos::io
00210 } // namespace geos
00211 
00212 #endif // #ifndef GEOS_IO_WKTWRITER_H
00213 
00214 /**********************************************************************
00215  * $Log$
00216  * Revision 1.3  2006/06/12 16:55:53  strk
00217  * fixed compiler warnings, fixed some methods to omit unused parameters.
00218  *
00219  * Revision 1.2  2006/03/22 16:58:35  strk
00220  * Removed (almost) all inclusions of geom.h.
00221  * Removed obsoleted .cpp files.
00222  * Fixed a bug in WKTReader not using the provided CoordinateSequence
00223  * implementation, optimized out some memory allocations.
00224  *
00225  * Revision 1.1  2006/03/20 18:18:15  strk
00226  * io.h header split
00227  *
00228  **********************************************************************/

Generated on Thu Jun 11 06:17:02 2009 for GEOS by  doxygen 1.4.4