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 <geos/export.h>
00021
00022 #include <string>
00023
00024
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
00076
00077
00079 std::string write(const geom::Geometry *geometry);
00080
00081
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
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 }
00210 }
00211
00212 #endif // #ifndef GEOS_IO_WKTWRITER_H
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228