00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef GEOS_IO_WKTWRITER_H
00018 #define GEOS_IO_WKTWRITER_H
00019
00020 #include <string>
00021
00022
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
00074
00075
00077 std::string write(const geom::Geometry *geometry);
00078
00079
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
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 }
00208 }
00209
00210 #endif // #ifndef GEOS_IO_WKTWRITER_H
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226