00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef GEOS_IO_WKTREADER_H
00018 #define GEOS_IO_WKTREADER_H
00019
00020 #include <geos/geom/GeometryFactory.h>
00021 #include <geos/geom/CoordinateSequence.h>
00022 #include <string>
00023
00024
00025 namespace geos {
00026 namespace io {
00027 class StringTokenizer;
00028 }
00029 namespace geom {
00030
00031 class Coordinate;
00032 class Geometry;
00033 class GeometryCollection;
00034 class Point;
00035 class LineString;
00036 class LinearRing;
00037 class Polygon;
00038 class MultiPoint;
00039 class MultiLineString;
00040 class MultiPolygon;
00041 class PrecisionModel;
00042 }
00043 }
00044
00045
00046 namespace geos {
00047 namespace io {
00048
00053 class WKTReader {
00054 public:
00055
00056
00065 WKTReader(const geom::GeometryFactory *gf);
00066
00071 WKTReader();
00072
00073 ~WKTReader();
00074
00076 geom::Geometry* read(const std::string &wellKnownText);
00077
00078
00079
00080 protected:
00081 geom::CoordinateSequence* getCoordinates(io::StringTokenizer *tokenizer);
00082 double getNextNumber(io::StringTokenizer *tokenizer);
00083 std::string getNextEmptyOrOpener(io::StringTokenizer *tokenizer);
00084 std::string getNextCloserOrComma(io::StringTokenizer *tokenizer);
00085 std::string getNextCloser(io::StringTokenizer *tokenizer);
00086 std::string getNextWord(io::StringTokenizer *tokenizer);
00087 geom::Geometry* readGeometryTaggedText(io::StringTokenizer *tokenizer);
00088 geom::Point* readPointText(io::StringTokenizer *tokenizer);
00089 geom::LineString* readLineStringText(io::StringTokenizer *tokenizer);
00090 geom::LinearRing* readLinearRingText(io::StringTokenizer *tokenizer);
00091 geom::MultiPoint* readMultiPointText(io::StringTokenizer *tokenizer);
00092 geom::Polygon* readPolygonText(io::StringTokenizer *tokenizer);
00093 geom::MultiLineString* readMultiLineStringText(io::StringTokenizer *tokenizer);
00094 geom::MultiPolygon* readMultiPolygonText(io::StringTokenizer *tokenizer);
00095 geom::GeometryCollection* readGeometryCollectionText(io::StringTokenizer *tokenizer);
00096 private:
00097 const geom::GeometryFactory *geometryFactory;
00098 const geom::PrecisionModel *precisionModel;
00099
00100 void getPreciseCoordinate(io::StringTokenizer *tokenizer, geom::Coordinate&);
00101
00102 bool isNumberNext(io::StringTokenizer *tokenizer);
00103 };
00104
00105 }
00106 }
00107
00108 #ifdef GEOS_INLINE
00109 # include <geos/io/WKTReader.inl>
00110 #endif
00111
00112 #endif // #ifndef GEOS_IO_WKTREADER_H
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139