geometry/WKTParser.h
Go to the documentation of this file.
1 /* Copyright (C) 2008 National Institute For Space Research (INPE) - Brazil.
2 
3  This file is part of the TerraLib - a Framework for building GIS enabled applications.
4 
5  TerraLib is free software: you can redistribute it and/or modify
6  it under the terms of the GNU Lesser General Public License as published by
7  the Free Software Foundation, either version 3 of the License,
8  or (at your option) any later version.
9 
10  TerraLib is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public License
16  along with TerraLib. See COPYING. If not, write to
17  TerraLib Team at <terralib-team@terralib.org>.
18  */
19 
20 /*!
21  \file terralib/geometry/WKTParser.h
22 
23  \brief A class that implements the grammar rules for well known text (WKT) for Geometry.
24  It is based on boost::spirit V2 and WKT BNF definition available in the OGC Simple Features Specification.
25 
26  \warning Do not use this class. It is for TerraLib internal use. Try the te::gm::WKTReader instead.
27 */
28 
29 #ifndef __TERRALIB_GEOMETRY_INTERNAL_WKTPARSER_H
30 #define __TERRALIB_GEOMETRY_INTERNAL_WKTPARSER_H
31 
32 // TerraLib
33 #include "WKTActions.h"
34 
35 // boost
36 #include <boost/bind/bind.hpp>
37 #include <boost/spirit/include/qi.hpp>
38 
39 // STL
40 #include <iostream>
41 #include <string>
42 
43 // Auxiliaries namespaces
44 namespace qi = boost::spirit::qi;
45 namespace ascii = boost::spirit::ascii;
46 
47 // Using the following boost::spirit definitions
48 using qi::char_;
49 using qi::double_;
50 using ascii::no_case;
51 
52 namespace te
53 {
54  namespace gm
55  {
56  /*!
57  \class Parser
58 
59  \brief A class that implements the Grammar Rules for well known text (WKT) format of Geometry.
60  */
61  template<typename Iterator>
62  class WKTParser : public qi::grammar<Iterator, ascii::space_type>
63  {
64  public:
65 
66  /** @name Constructor
67  * Initilizer methods.
68  */
69  //@{
70 
71  /*! \brief Default constructor. */
72  WKTParser() : WKTParser::base_type(geometry)
73  {
74  // Geometries (root)
76 
77  // Initializing all rules
83  initPoint();
84  initLine();
85  initPolygon();
87  initMultiLine();
90  initTIN();
91  initTriangle();
93 
94  // Empty key word
95  empty = no_case["empty"] >> !char_;
96  }
97 
98  //@}
99 
100  private:
101 
102  /** @name Initializer methods.
103  * Methods to initialize the grammar rules.
104  */
105  //@{
106 
107  /*!
108  \brief Initializes geometry tagged rules.
109  */
111  {
112  // Geometries Tags
115  | polygonTagged
120  | tinTagged
123  ;
124  }
125 
126  /*!
127  \brief Initializes geometries z tagged rules.
128  */
130  {
131  // Geometries Z Tags
139  | tinZTagged
142  ;
143  }
144 
145  /*!
146  \brief Initializes geometries m tagged rules.
147  */
149  {
150  // Geometries M Tags
158  | tinMTagged
161  ;
162  }
163 
164  /*!
165  \brief Initializes geometries zm tagged rules.
166  */
168  {
169  // Geometries ZM Tags
177  | tinZMTagged
180  ;
181  }
182 
183  /*!
184  \brief Initializes coordinates rules.
185  */
187  {
188 #if BOOST_VERSION < 106000
189  // (x,y)
190  coordinate = (double_ >> double_)[boost::bind(&WKTActions::createPoint, &m_a, ::_1)]; // It is an action!
191  // (x,y,z)
192  coordinateZ = (double_ >> double_ >> double_)[boost::bind(&WKTActions::createPointZ, &m_a, ::_1)];
193  // (x,y,m)
194  coordinateM = (double_ >> double_ >> double_)[boost::bind(&WKTActions::createPointM, &m_a, ::_1)];
195  // (x,y,z,m)
196  coordinateZM = (double_ >> double_ >> double_ >> double_)[boost::bind(&WKTActions::createPointZM, &m_a, ::_1)];
197 
198 #else
199  // (x,y)
200  coordinate = (double_ >> double_)[boost::bind(&WKTActions::createPoint, &m_a, boost::placeholders::_1)]; // It is an action!
201  // (x,y,z)
202  coordinateZ = (double_ >> double_ >> double_)[boost::bind(&WKTActions::createPointZ, &m_a, boost::placeholders::_1)];
203  // (x,y,m)
204  coordinateM = (double_ >> double_ >> double_)[boost::bind(&WKTActions::createPointM, &m_a, boost::placeholders::_1)];
205  // (x,y,z,m)
206  coordinateZM = (double_ >> double_ >> double_ >> double_)[boost::bind(&WKTActions::createPointZM, &m_a, boost::placeholders::_1)];
207 #endif
208  }
209 
210  /*!
211  \brief Initializes point rules.
212  */
213  void initPoint()
214  {
215  // Point Tagged Text
216  pointTagged = no_case["point"] >> pointTxt;
217  // Point Z Tagged
218  pointZTagged = no_case["point z"] >> pointZTxt;
219  // Point M Tagged
220  pointMTagged = no_case["point m"] >> pointMTxt;
221  // Point ZM Tagged
222  pointZMTagged = no_case["point zm"] >> pointZMTxt;
223 
224  // Point
225  pointTxt = empty[boost::bind(&WKTActions::createPoint, &m_a)] | '(' >> coordinate >> ')';
226  // Point Z
227  pointZTxt = empty[boost::bind(&WKTActions::createPointZ, &m_a)] | '(' >> coordinateZ >> ')';
228  // Point M
229  pointMTxt = empty[boost::bind(&WKTActions::createPointM, &m_a)] | '(' >> coordinateM >> ')';
230  // Point ZM
231  pointZMTxt = empty[boost::bind(&WKTActions::createPointZM, &m_a)] | '(' >> coordinateZM >> ')';
232  }
233 
234  /*!
235  \brief Initializes line rules.
236  */
237  void initLine()
238  {
239  // LineString Tagged Text
240  lineStringTagged = no_case["linestring"] >> lineStringTxt;
241  // LineString Z Tagged Text
242  lineStringZTagged = no_case["linestring z"] >> lineStringZTxt;
243  // LineString M Tagged Text
244  lineStringMTagged = no_case["linestring m"] >> lineStringMTxt;
245  // LineString ZM Tagged Text
246  lineStringZMTagged = no_case["linestring zm"] >> lineStringZMTxt;
247 
248  // LineString
249  lineStringTxt = (empty | '(' >> coordinate >> *(',' >> coordinate) >> ')')[boost::bind(&WKTActions::createLine, &m_a)];
250  // LineString Z
251  lineStringZTxt = (empty | '(' >> coordinateZ >> *(',' >> coordinateZ) >> ')')[boost::bind(&WKTActions::createLineZ, &m_a)];
252  // LineString M
253  lineStringMTxt = (empty | '(' >> coordinateM >> *(',' >> coordinateM) >> ')')[boost::bind(&WKTActions::createLineM, &m_a)];
254  // LineString ZM
255  lineStringZMTxt = (empty | '(' >> coordinateZM >> *(',' >> coordinateZM) >> ')')[boost::bind(&WKTActions::createLineZM, &m_a)];
256 
257  // LinearRing
258  linearRingTxt = (empty | '(' >> coordinate >> *(',' >> coordinate) >> ')')[boost::bind(&WKTActions::createLinearRing, &m_a)];
259  // LineString Z
260  linearRingZTxt = (empty | '(' >> coordinateZ >> *(',' >> coordinateZ) >> ')')[boost::bind(&WKTActions::createLinearRingZ, &m_a)];
261  // LineString M
262  linearRingMTxt = (empty | '(' >> coordinateM >> *(',' >> coordinateM) >> ')')[boost::bind(&WKTActions::createLinearRingM, &m_a)];
263  // LineString ZM
264  linearRingZMTxt = (empty | '(' >> coordinateZM >> *(',' >> coordinateZM) >> ')')[boost::bind(&WKTActions::createLinearRingZM, &m_a)];
265  }
266 
267  /*!
268  \brief Initializes polygon rules.
269  */
270  void initPolygon()
271  {
272  // Polygon Tagged Text
273  polygonTagged = no_case["polygon"] >> polygonTxt;
274  // Polygon Z Tagged Text
275  polygonZTagged = no_case["polygon z"] >> polygonZTxt;
276  // Polygon M Tagged Text
277  polygonMTagged = no_case["polygon m"] >> polygonMTxt;
278  // Polygon ZM Tagged Text
279  polygonZMTagged = no_case["polygon zm"] >> polygonZMTxt;
280 
281  // Polygon
282  polygonTxt = (empty | '(' >> linearRingTxt >> *(',' >> linearRingTxt) >> ')')[boost::bind(&WKTActions::createPolygon, &m_a)];
283  // Polygon Z
284  polygonZTxt = (empty | '(' >> linearRingZTxt >> *(',' >> linearRingZTxt) >> ')')[boost::bind(&WKTActions::createPolygonZ, &m_a)];
285  // Polygon M
286  polygonMTxt = (empty | '(' >> linearRingMTxt >> *(',' >> linearRingMTxt) >> ')')[boost::bind(&WKTActions::createPolygonM, &m_a)];
287  // Polygon ZM
288  polygonZMTxt = (empty | '(' >> linearRingZMTxt >> *(',' >> linearRingZMTxt) >> ')')[boost::bind(&WKTActions::createPolygonZM, &m_a)];
289  }
290 
291  /*!
292  \brief Initializes multi point rules.
293  */
295  {
296  // MultiPoint Tagged Text
297  multiPointTagged = (no_case["multipoint"] >> multiPointTxt)[boost::bind(&WKTActions::createMultiPoint, &m_a)];
298  // MultiPoint Z Tagged Text
299  multiPointZTagged = (no_case["multipoint z"] >> multiPointZTxt)[boost::bind(&WKTActions::createMultiPointZ, &m_a)];
300  // MultiPoint M Tagged Text
301  multiPointMTagged = (no_case["multipoint m"] >> multiPointMTxt)[boost::bind(&WKTActions::createMultiPointM, &m_a)];
302  // MultiPoint ZM Tagged Text
303  multiPointZMTagged = (no_case["multipoint zm"] >> multiPointZMTxt)[boost::bind(&WKTActions::createMultiPointZM, &m_a)];
304 
305  // MultiPoint
306  multiPointTxt = empty | '(' >> pointTxt >> *(',' >> pointTxt) >> ')';
307  // MultiPoint Z
308  multiPointZTxt = empty | '(' >> pointZTxt >> *(',' >> pointZTxt) >> ')';
309  // MultiPoint M
310  multiPointMTxt = empty | '(' >> pointMTxt >> *(',' >> pointMTxt) >> ')';
311  // MultiPoint ZM
312  multiPointZMTxt = empty | '(' >> pointZMTxt >> *(',' >> pointZMTxt) >> ')';
313  }
314 
315  /*!
316  \brief Initializes multi line rules.
317  */
319  {
320  // MultiLineString Tagged Text
321  multiLineStringTagged = (no_case["multilinestring"] >> multiLineStringTxt)[boost::bind(&WKTActions::createMultiLineString, &m_a)];
322  // MultiLineString Z Tagged Text
323  multiLineStringZTagged = (no_case["multilinestring z"] >> multiLineStringZTxt)[boost::bind(&WKTActions::createMultiLineStringZ, &m_a)];
324  // MultiLineString M Tagged Text
325  multiLineStringMTagged = (no_case["multilinestring m"] >> multiLineStringMTxt)[boost::bind(&WKTActions::createMultiLineStringM, &m_a)];
326  // MultiLineString ZM Tagged Text
327  multiLineStringZMTagged = (no_case["multilinestring zm"] >> multiLineStringZMTxt)[boost::bind(&WKTActions::createMultiLineStringZM, &m_a)];
328 
329  // MultiLineString
330  multiLineStringTxt = empty | '('>> lineStringTxt >> *(',' >> lineStringTxt) >> ')';
331  // MultiLineString Z
332  multiLineStringZTxt = empty | '('>> lineStringZTxt >> *(',' >> lineStringZTxt) >> ')';
333  // MultiLineString M
334  multiLineStringMTxt = empty | '('>> lineStringMTxt >> *(',' >> lineStringMTxt) >> ')';
335  // MultiLineString ZM
336  multiLineStringZMTxt = empty | '('>> lineStringZMTxt >> *(',' >> lineStringZMTxt) >> ')';
337  }
338 
339  /*!
340  \brief Initializes multi polygon rules.
341  */
343  {
344  // MultiPolygon Tagged Text
345  multiPolygonTagged = (no_case["multipolygon"] >> multiPolygonTxt)[boost::bind(&WKTActions::createMultiPolygon, &m_a)];
346  // MultiPolygon Z Tagged Text
347  multiPolygonZTagged = (no_case["multipolygon z"] >> multiPolygonZTxt)[boost::bind(&WKTActions::createMultiPolygonZ, &m_a)];
348  // MultiPolygon M Tagged Text
349  multiPolygonMTagged = (no_case["multipolygon m"] >> multiPolygonMTxt)[boost::bind(&WKTActions::createMultiPolygonM, &m_a)];
350  // MultiPolygon ZM Tagged Text
351  multiPolygonZMTagged = (no_case["multipolygon zm"] >> multiPolygonZMTxt)[boost::bind(&WKTActions::createMultiPolygonZM, &m_a)];
352 
353  // MultiPolygon
354  multiPolygonTxt = empty |'(' >> polygonTxt >> *(',' >> polygonTxt) >> ')';
355  // MultiPolygon Z
356  multiPolygonZTxt = empty |'(' >> polygonZTxt >> *(',' >> polygonZTxt) >> ')';
357  // MultiPolygon M
358  multiPolygonMTxt = empty |'(' >> polygonMTxt >> *(',' >> polygonMTxt) >> ')';
359  // MultiPolygon ZM
360  multiPolygonZMTxt = empty |'(' >> polygonZMTxt >> *(',' >> polygonZMTxt) >> ')';
361  }
362 
363  /*!
364  \brief Initializes polyhedral surface rules.
365  */
367  {
368  // Polyhedral Surface Tagged Text
369  polyhedralSurfaceTagged = no_case["polyhedralsurface"] >> polyhedralSurfaceTxt;
370  // Polyhedral Z Surface Tagged Text
371  polyhedralSurfaceZTagged = no_case["polyhedralsurface z"] >> polyhedralSurfaceZTxt;
372  // Polyhedral M Surface Tagged Text
373  polyhedralSurfaceMTagged = no_case["polyhedralsurface m"] >> polyhedralSurfaceMTxt;
374  // Polyhedral ZM Surface Tagged Text
375  polyhedralSurfaceZMTagged = no_case["polyhedralsurface zm"] >> polyhedralSurfaceZMTxt;
376 
377  // Polyhedral Surface
378  polyhedralSurfaceTxt = (empty | '(' >> polygonTxt >> *(',' >> polygonTxt) >> ')')[boost::bind(&WKTActions::createPolyhedralSurface, &m_a)];
379  // Polyhedral Surface Z
380  polyhedralSurfaceZTxt = (empty | '(' >> polygonZTxt >> *(',' >> polygonZTxt) >> ')')[boost::bind(&WKTActions::createPolyhedralSurfaceZ, &m_a)];
381  // Polyhedral Surface M
382  polyhedralSurfaceMTxt = (empty | '(' >> polygonMTxt >> *(',' >> polygonMTxt) >> ')')[boost::bind(&WKTActions::createPolyhedralSurfaceM, &m_a)];
383  // Polyhedral Surface ZM
384  polyhedralSurfaceZMTxt = (empty | '(' >> polygonZMTxt >> *(',' >> polygonZMTxt) >> ')')[boost::bind(&WKTActions::createPolyhedralSurfaceZM, &m_a)];
385  }
386 
387  /*!
388  \brief Initializes TIN rules.
389  */
390  void initTIN()
391  {
392  // TIN Tagged Text
393  tinTagged = (no_case["tin"] >> tinTxt)[boost::bind(&WKTActions::createTIN, &m_a)];
394  // TIN Z Tagged Text
395  tinZTagged = (no_case["tin z"] >> tinZTxt)[boost::bind(&WKTActions::createTINZ, &m_a)];
396  // TIN M Tagged Text
397  tinMTagged = (no_case["tin m"] >> tinMTxt)[boost::bind(&WKTActions::createTINM, &m_a)];
398  // TIN ZM Tagged Text
399  tinZMTagged = (no_case["tin zm"] >> tinZMTxt)[boost::bind(&WKTActions::createTINZM, &m_a)];
400 
401  // TIN
402  tinTxt = empty | '(' >> polygonTxt >> *(',' >> polygonTxt) >> ')';
403  // TIN Z
404  tinZTxt = empty | '(' >> polygonZTxt >> *(',' >> polygonZTxt) >> ')';
405  // TIN M
406  tinMTxt = empty | '(' >> polygonMTxt >> *(',' >> polygonMTxt) >> ')';
407  // TIN ZM
408  tinZMTxt = empty | '(' >> polygonZMTxt >> *(',' >> polygonZMTxt) >> ')';
409  }
410 
411  /*!
412  \brief Initializes triangle rules.
413  */
415  {
416  // Triangle Tagged Text
417  triangleTagged = (no_case["triangle"] >> triangleTxt)[boost::bind(&WKTActions::createTriangle, &m_a)];
418  // Triangle Z Tagged Text
419  triangleZTagged = (no_case["triangle z"] >> triangleZTxt)[boost::bind(&WKTActions::createTriangleZ, &m_a)];
420  // Triangle M Tagged Text
421  triangleMTagged = (no_case["triangle m"] >> triangleMTxt)[boost::bind(&WKTActions::createTriangleM, &m_a)];
422  // Triangle ZM Tagged Text
423  triangleZMTagged = (no_case["triangle zm"] >> triangleZMTxt)[boost::bind(&WKTActions::createTriangleZM, &m_a)];
424 
425  // Polygon
426  triangleTxt = empty | '(' >> linearRingTxt >> *(',' >> linearRingTxt) >> ')';
427  // Polygon Z
428  triangleZTxt = empty | '(' >> linearRingZTxt >> *(',' >> linearRingZTxt) >> ')';
429  // Polygon M
430  triangleMTxt = empty | '(' >> linearRingMTxt >> *(',' >> linearRingMTxt) >> ')';
431  // Polygon ZM
432  triangleZMTxt = empty | '(' >> linearRingZMTxt >> *(',' >> linearRingZMTxt) >> ')';
433  }
434 
435  /*!
436  \brief Initializes geometry collection rules.
437  */
439  {
440  // GeometryCollection Tagged Text
441  geometryCollectionTagged = (no_case["geometrycollection"] >> geometryCollectionTxt)[boost::bind(&WKTActions::createGeometryCollection, &m_a)];
442  // GeometryCollection Z Tagged Text
443  geometryCollectionZTagged = (no_case["geometrycollection z"] >> geometryCollectionZTxt)[boost::bind(&WKTActions::createGeometryCollectionZ, &m_a)];
444  // GeometryCollection M Tagged Text
445  geometryCollectionMTagged = (no_case["geometrycollection m"] >> geometryCollectionMTxt)[boost::bind(&WKTActions::createGeometryCollectionM, &m_a)];
446  // GeometryCollection ZM Tagged Text
447  geometryCollectionZMTagged = (no_case["geometrycollection zm"] >> geometryCollectionZMTxt)[boost::bind(&WKTActions::createGeometryCollectionZM, &m_a)];
448 
449  // Geometry Collection
450  geometryCollectionTxt = empty | '(' >> geometryTagged >> *(',' >> geometryTagged) >> ')';
451  // GeometryCollection Z
452  geometryCollectionZTxt = empty | '(' >> geometryZTagged >> *(',' >> geometryZTagged) >> ')';
453  // GeometryCollection M
454  geometryCollectionMTxt = empty | '(' >> geometryMTagged >> *(',' >> geometryMTagged) >> ')';
455  // GeometryCollection ZM
456  geometryCollectionZMTxt = empty | '(' >> geometryZMTagged >> *(',' >> geometryZMTagged) >> ')';
457  }
458 
459  //@}
460 
461  public:
462 
463  /** @name Access method.
464  * Method to access the geometry generated.
465  */
466  //@{
467 
468  /*!
469  \brief It returns the geometry generated by the parser process.
470 
471  \note The caller of this method will take the ownership of the geometry.
472  */
474 
475  //@}
476 
477  /*!
478  \brief This method resets the Parser to original state.
479 
480  \note Should be called case the parser processing faill.
481  \note Basically, it is responsable to free the memory.
482  */
483  void reset() { m_a.reset(); }
484 
485  private:
486 
487  WKTActions m_a; //<! Semanthic actions to grammar rules.
488 
489  /** @name Rules of WKT Grammar.
490  */
491  //@{
492 
493  //<! Geometry type (root)
494  qi::rule<Iterator, ascii::space_type> geometry;
495 
496  //<! Geometries
497  qi::rule<Iterator, ascii::space_type> geometryTagged, geometryZTagged, geometryMTagged, geometryZMTagged;
498 
499  //<! Coordinates
500  qi::rule<Iterator, ascii::space_type> coordinate, coordinateZ, coordinateM, coordinateZM;
501 
502  //<! Points
503  qi::rule<Iterator, ascii::space_type> pointTagged, pointZTagged, pointMTagged, pointZMTagged;
504 
505  //<! Lines
506  qi::rule<Iterator, ascii::space_type> lineStringTagged, lineStringZTagged, lineStringMTagged, lineStringZMTagged;
507 
508  //<! Polygons
509  qi::rule<Iterator, ascii::space_type> polygonTagged, polygonZTagged, polygonMTagged, polygonZMTagged;
510 
511  //<! Polyhedral Surfaces
513 
514  //<! MultiPoints
515  qi::rule<Iterator, ascii::space_type> multiPointTagged, multiPointZTagged, multiPointMTagged, multiPointZMTagged;
516 
517  //<! MultiLines
519 
520  //<! MultiPolygons
522 
523  //<! Triangle
524  qi::rule<Iterator, ascii::space_type> triangleTagged, triangleZTagged, triangleMTagged, triangleZMTagged;
525 
526  //<! TIN
527  qi::rule<Iterator, ascii::space_type> tinTagged, tinZTagged, tinMTagged, tinZMTagged;
528 
529  //<! Geometry Collection
531 
532  //<! Text format for Points
533  qi::rule<Iterator, ascii::space_type> pointTxt, pointZTxt, pointMTxt, pointZMTxt;
534 
535  //<! Text format for Lines
536  qi::rule<Iterator, ascii::space_type> lineStringTxt, lineStringZTxt, lineStringMTxt, lineStringZMTxt;
537 
538  //<! Text format for LinearRing
539  qi::rule<Iterator, ascii::space_type> linearRingTxt, linearRingZTxt, linearRingMTxt, linearRingZMTxt;
540 
541  //<! Text format for Polygons
542  qi::rule<Iterator, ascii::space_type> polygonTxt, polygonZTxt, polygonMTxt, polygonZMTxt;
543 
544  //<! Text format for Polyhedral Surfaces
546 
547  //<! Text format for MultiPoints
548  qi::rule<Iterator, ascii::space_type> multiPointTxt, multiPointZTxt, multiPointMTxt, multiPointZMTxt;
549 
550  //<! Text format for MultiLines
552 
553  //<! Text format for MultiPolygons
554  qi::rule<Iterator, ascii::space_type> multiPolygonTxt, multiPolygonZTxt, multiPolygonMTxt, multiPolygonZMTxt;
555 
556  //<! Text format for TIN
557  qi::rule<Iterator, ascii::space_type> tinTxt, tinZTxt, tinMTxt, tinZMTxt;
558 
559  //<! Text format for Triangles
560  qi::rule<Iterator, ascii::space_type> triangleTxt, triangleZTxt, triangleMTxt, triangleZMTxt;
561 
562  //<! Text format for GeometryCollections
564 
565  //<! Empty keyword rule
566  qi::rule<Iterator, ascii::space_type> empty;
567 
568  //@}
569 
570  }; // WKTParser
571 
572  } // namespace gm
573 } // namespace te
574 
575 #endif // __TERRALIB_GEOMETRY_INTERNAL_WKTPARSER_H
576 
qi::rule< Iterator, ascii::space_type > multiLineStringZMTagged
qi::rule< Iterator, ascii::space_type > lineStringZMTxt
qi::rule< Iterator, ascii::space_type > multiPointZTagged
qi::rule< Iterator, ascii::space_type > multiPolygonTagged
qi::rule< Iterator, ascii::space_type > lineStringZMTagged
qi::rule< Iterator, ascii::space_type > polygonTagged
void initLine()
Initializes line rules.
qi::rule< Iterator, ascii::space_type > tinTxt
qi::rule< Iterator, ascii::space_type > tinZTxt
void initGeometriesZM()
Initializes geometries zm tagged rules.
void initTriangle()
Initializes triangle rules.
qi::rule< Iterator, ascii::space_type > multiPolygonZTxt
qi::rule< Iterator, ascii::space_type > multiPolygonTxt
qi::rule< Iterator, ascii::space_type > polyhedralSurfaceZMTagged
qi::rule< Iterator, ascii::space_type > geometryCollectionZMTxt
qi::rule< Iterator, ascii::space_type > multiPointZTxt
qi::rule< Iterator, ascii::space_type > multiPolygonMTxt
qi::rule< Iterator, ascii::space_type > geometryCollectionMTagged
qi::rule< Iterator, ascii::space_type > geometryCollectionMTxt
qi::rule< Iterator, ascii::space_type > polyhedralSurfaceTagged
qi::rule< Iterator, ascii::space_type > geometryTagged
qi::rule< Iterator, ascii::space_type > geometryCollectionTxt
qi::rule< Iterator, ascii::space_type > multiPolygonZTagged
qi::rule< Iterator, ascii::space_type > pointTxt
qi::rule< Iterator, ascii::space_type > tinMTagged
void reset()
This method resets the Parser to original state.
WKTParser()
Default constructor.
void initMultiLine()
Initializes multi line rules.
void initGeometriesZ()
Initializes geometries z tagged rules.
qi::rule< Iterator, ascii::space_type > geometryZMTagged
qi::rule< Iterator, ascii::space_type > polygonMTagged
qi::rule< Iterator, ascii::space_type > polygonZTxt
qi::rule< Iterator, ascii::space_type > pointMTxt
void initGeometryCollection()
Initializes geometry collection rules.
qi::rule< Iterator, ascii::space_type > lineStringMTxt
void initGeometriesM()
Initializes geometries m tagged rules.
qi::rule< Iterator, ascii::space_type > multiPointZMTxt
qi::rule< Iterator, ascii::space_type > polygonTxt
qi::rule< Iterator, ascii::space_type > tinMTxt
qi::rule< Iterator, ascii::space_type > polyhedralSurfaceZTagged
qi::rule< Iterator, ascii::space_type > multiLineStringTxt
qi::rule< Iterator, ascii::space_type > tinZMTxt
qi::rule< Iterator, ascii::space_type > linearRingZTxt
qi::rule< Iterator, ascii::space_type > triangleZTagged
qi::rule< Iterator, ascii::space_type > pointZTagged
qi::rule< Iterator, ascii::space_type > polygonZMTagged
void initPolyhedralSurface()
Initializes polyhedral surface rules.
qi::rule< Iterator, ascii::space_type > geometryZTagged
qi::rule< Iterator, ascii::space_type > multiPointTxt
qi::rule< Iterator, ascii::space_type > triangleMTagged
qi::rule< Iterator, ascii::space_type > tinZTagged
qi::rule< Iterator, ascii::space_type > pointZTxt
Geometry * getGeometry()
It returns the geometry generated by the parser process.
qi::rule< Iterator, ascii::space_type > multiPolygonMTagged
URI C++ Library.
Definition: Attributes.h:37
qi::rule< Iterator, ascii::space_type > triangleTxt
qi::rule< Iterator, ascii::space_type > geometryCollectionTagged
void initCoordinates()
Initializes coordinates rules.
qi::rule< Iterator, ascii::space_type > multiLineStringZTagged
qi::rule< Iterator, ascii::space_type > triangleZMTxt
void initGeometries()
Initializes geometry tagged rules.
qi::rule< Iterator, ascii::space_type > pointZMTxt
Geometry * getGeometry()
It returns the geometry generated by the parser process.
qi::rule< Iterator, ascii::space_type > coordinateM
qi::rule< Iterator, ascii::space_type > multiPolygonZMTxt
qi::rule< Iterator, ascii::space_type > lineStringMTagged
qi::rule< Iterator, ascii::space_type > multiLineStringZMTxt
qi::rule< Iterator, ascii::space_type > multiPolygonZMTagged
qi::rule< Iterator, ascii::space_type > triangleZTxt
qi::rule< Iterator, ascii::space_type > linearRingMTxt
qi::rule< Iterator, ascii::space_type > lineStringZTxt
void initPolygon()
Initializes polygon rules.
qi::rule< Iterator, ascii::space_type > coordinateZM
void initTIN()
Initializes TIN rules.
Geometry is the root class of the geometries hierarchy, it follows OGC and ISO standards.
qi::rule< Iterator, ascii::space_type > polyhedralSurfaceMTagged
qi::rule< Iterator, ascii::space_type > tinTagged
qi::rule< Iterator, ascii::space_type > triangleTagged
qi::rule< Iterator, ascii::space_type > multiLineStringMTagged
qi::rule< Iterator, ascii::space_type > lineStringTxt
qi::rule< Iterator, ascii::space_type > polygonZTagged
qi::rule< Iterator, ascii::space_type > pointMTagged
qi::rule< Iterator, ascii::space_type > multiLineStringMTxt
qi::rule< Iterator, ascii::space_type > polygonMTxt
void initMultiPolygon()
Initializes multi polygon rules.
qi::rule< Iterator, ascii::space_type > multiPointZMTagged
qi::rule< Iterator, ascii::space_type > geometry
qi::rule< Iterator, ascii::space_type > linearRingZMTxt
qi::rule< Iterator, ascii::space_type > polygonZMTxt
qi::rule< Iterator, ascii::space_type > triangleZMTagged
A class that implements the Grammar Rules for well known text (WKT) format for Geometry.
qi::rule< Iterator, ascii::space_type > empty
qi::rule< Iterator, ascii::space_type > polyhedralSurfaceZTxt
void initPoint()
Initializes point rules.
qi::rule< Iterator, ascii::space_type > lineStringZTagged
qi::rule< Iterator, ascii::space_type > polyhedralSurfaceTxt
qi::rule< Iterator, ascii::space_type > geometryCollectionZTagged
qi::rule< Iterator, ascii::space_type > multiPointTagged
qi::rule< Iterator, ascii::space_type > multiLineStringZTxt
qi::rule< Iterator, ascii::space_type > pointTagged
qi::rule< Iterator, ascii::space_type > polyhedralSurfaceMTxt
qi::rule< Iterator, ascii::space_type > linearRingTxt
qi::rule< Iterator, ascii::space_type > multiPointMTxt
qi::rule< Iterator, ascii::space_type > triangleMTxt
qi::rule< Iterator, ascii::space_type > coordinateZ
qi::rule< Iterator, ascii::space_type > tinZMTagged
qi::rule< Iterator, ascii::space_type > lineStringTagged
qi::rule< Iterator, ascii::space_type > coordinate
qi::rule< Iterator, ascii::space_type > pointZMTagged
void initMultiPoint()
Initializes multi point rules.
qi::rule< Iterator, ascii::space_type > geometryCollectionZTxt
qi::rule< Iterator, ascii::space_type > geometryCollectionZMTagged
void reset()
This method resets the Action class to original state.
qi::rule< Iterator, ascii::space_type > multiLineStringTagged
qi::rule< Iterator, ascii::space_type > geometryMTagged
qi::rule< Iterator, ascii::space_type > polyhedralSurfaceZMTxt
A class that implements the semanthic actions to grammar rules for well known text (WKT) format for G...
qi::rule< Iterator, ascii::space_type > multiPointMTagged