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