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