GEOS
3.4.2
|
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