WKTWriter.h

00001 /**********************************************************************
00002  *
00003  * GEOS - Geometry Engine Open Source
00004  * http://geos.osgeo.org
00005  *
00006  * Copyright (C) 2011 Sandro Santilli <strk@keybit.net>
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  * Last port: io/WKTWriter.java rev. 1.34 (JTS-1.7)
00018  *
00019  **********************************************************************/
00020 
00021 #ifndef GEOS_IO_WKTWRITER_H
00022 #define GEOS_IO_WKTWRITER_H
00023 
00024 #include <geos/export.h>
00025 
00026 #include <string>
00027 
00028 #ifdef _MSC_VER
00029 #pragma warning(push)
00030 #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class
00031 #endif
00032 
00033 // Forward declarations
00034 namespace geos {
00035         namespace geom {
00036                 class Coordinate;
00037                 class CoordinateSequence;
00038                 class Geometry;
00039                 class GeometryCollection;
00040                 class Point;
00041                 class LineString;
00042                 class LinearRing;
00043                 class Polygon;
00044                 class MultiPoint;
00045                 class MultiLineString;
00046                 class MultiPolygon;
00047                 class PrecisionModel;
00048         } 
00049         namespace io {
00050                 class Writer;
00051         } 
00052 } 
00053 
00054 
00055 namespace geos {
00056 namespace io {
00057 
00079 class GEOS_DLL WKTWriter {
00080 public:
00081         WKTWriter();
00082         ~WKTWriter();
00083 
00084         //string(count, ch) can be used for this
00085         //static string stringOfChar(char ch, int count);
00086 
00088         std::string write(const geom::Geometry *geometry);
00089 
00090         // Send Geometry's WKT to the given Writer
00091         void write(const geom::Geometry *geometry, Writer *writer);
00092 
00093         std::string writeFormatted(const geom::Geometry *geometry);
00094 
00095         void writeFormatted(const geom::Geometry *geometry, Writer *writer);
00096 
00104         static std::string toLineString(const geom::CoordinateSequence& seq); 
00105 
00114         static std::string toLineString(const geom::Coordinate& p0, const geom::Coordinate& p1);
00115 
00123         static std::string toPoint(const geom::Coordinate& p0);
00124  
00132         void setRoundingPrecision(int p0);
00133 
00140         void setTrim(bool p0);
00141 
00152         void setOld3D(bool useOld3D ) { old3D = useOld3D; }
00153 
00154         /*
00155          * \brief
00156          * Returns the output dimension used by the
00157          * <code>WKBWriter</code>.
00158          */
00159         int getOutputDimension() const { return defaultOutputDimension; }
00160 
00161         /*
00162          * Sets the output dimension used by the <code>WKBWriter</code>.  
00163          *
00164          * @param newOutputDimension Supported values are 2 or 3. 
00165          *        Note that 3 indicates up to 3 dimensions will be
00166          *        written but 2D WKB is still produced for 2D geometries.
00167          */
00168         void setOutputDimension(int newOutputDimension);
00169         
00170 protected:
00171 
00172   int decimalPlaces;
00173 
00174         void appendGeometryTaggedText(const geom::Geometry *geometry, int level, Writer *writer);
00175 
00176         void appendPointTaggedText(
00177                         const geom::Coordinate* coordinate,
00178                         int level, Writer *writer);
00179 
00180         void appendLineStringTaggedText(
00181                         const geom::LineString *lineString,
00182                         int level, Writer *writer);
00183 
00184         void appendLinearRingTaggedText(
00185                         const geom::LinearRing *lineString,
00186                         int level, Writer *writer);
00187 
00188         void appendPolygonTaggedText(
00189                         const geom::Polygon *polygon,
00190                         int level, Writer *writer);
00191 
00192         void appendMultiPointTaggedText(
00193                         const geom::MultiPoint *multipoint,
00194                         int level, Writer *writer);
00195 
00196         void appendMultiLineStringTaggedText(
00197                         const geom::MultiLineString *multiLineString,
00198                         int level,Writer *writer);
00199 
00200         void appendMultiPolygonTaggedText(
00201                         const geom::MultiPolygon *multiPolygon,
00202                         int level, Writer *writer);
00203 
00204         void appendGeometryCollectionTaggedText(
00205                         const geom::GeometryCollection *geometryCollection,
00206                         int level,Writer *writer);
00207 
00208         void appendPointText(const geom::Coordinate* coordinate, int level,
00209                         Writer *writer);
00210 
00211         void appendCoordinate(const geom::Coordinate* coordinate,
00212                         Writer *writer);
00213 
00214         std::string writeNumber(double d);
00215 
00216         void appendLineStringText(
00217                         const geom::LineString *lineString,
00218                         int level, bool doIndent, Writer *writer);
00219 
00220         void appendPolygonText(
00221                         const geom::Polygon *polygon,
00222                         int level, bool indentFirst, Writer *writer);
00223 
00224         void appendMultiPointText(
00225                         const geom::MultiPoint *multiPoint,
00226                         int level, Writer *writer);
00227 
00228         void appendMultiLineStringText(
00229                         const geom::MultiLineString *multiLineString,
00230                         int level, bool indentFirst,Writer *writer);
00231 
00232         void appendMultiPolygonText(
00233                         const geom::MultiPolygon *multiPolygon,
00234                         int level, Writer *writer);
00235 
00236         void appendGeometryCollectionText(
00237                         const geom::GeometryCollection *geometryCollection,
00238                         int level,Writer *writer);
00239 
00240 private:
00241 
00242         enum {
00243                 INDENT = 2
00244         };
00245 
00246 //      static const int INDENT = 2;
00247 
00248         bool isFormatted;
00249 
00250         int roundingPrecision;
00251 
00252         bool trim;
00253 
00254         int level;
00255 
00256         int defaultOutputDimension;
00257     int outputDimension;
00258     bool old3D;
00259 
00260         void writeFormatted(
00261                         const geom::Geometry *geometry,
00262                         bool isFormatted, Writer *writer);
00263 
00264         void indent(int level, Writer *writer);
00265 };
00266 
00267 } // namespace geos::io
00268 } // namespace geos
00269 
00270 #ifdef _MSC_VER
00271 #pragma warning(pop)
00272 #endif
00273 
00274 #endif // #ifndef GEOS_IO_WKTWRITER_H

Generated on 30 Dec 2015 for GEOS by  doxygen 1.4.7