WKTWriter.h

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

Generated on Fri Mar 27 04:53:05 2009 for GEOS by  doxygen 1.5.4