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
Definition: WKTParser.h:518
qi::rule< Iterator, ascii::space_type > lineStringZMTxt
Definition: WKTParser.h:536
qi::rule< Iterator, ascii::space_type > multiPointZTagged
Definition: WKTParser.h:515
qi::rule< Iterator, ascii::space_type > multiPolygonTagged
Definition: WKTParser.h:521
qi::rule< Iterator, ascii::space_type > lineStringZMTagged
Definition: WKTParser.h:506
qi::rule< Iterator, ascii::space_type > polygonTagged
Definition: WKTParser.h:509
void initLine()
Initializes line rules.
Definition: WKTParser.h:237
qi::rule< Iterator, ascii::space_type > tinTxt
Definition: WKTParser.h:557
qi::rule< Iterator, ascii::space_type > tinZTxt
Definition: WKTParser.h:557
void initGeometriesZM()
Initializes geometries zm tagged rules.
Definition: WKTParser.h:167
void initTriangle()
Initializes triangle rules.
Definition: WKTParser.h:414
qi::rule< Iterator, ascii::space_type > multiPolygonZTxt
Definition: WKTParser.h:554
qi::rule< Iterator, ascii::space_type > multiPolygonTxt
Definition: WKTParser.h:554
qi::rule< Iterator, ascii::space_type > polyhedralSurfaceZMTagged
Definition: WKTParser.h:512
qi::rule< Iterator, ascii::space_type > geometryCollectionZMTxt
Definition: WKTParser.h:563
qi::rule< Iterator, ascii::space_type > multiPointZTxt
Definition: WKTParser.h:548
qi::rule< Iterator, ascii::space_type > multiPolygonMTxt
Definition: WKTParser.h:554
qi::rule< Iterator, ascii::space_type > geometryCollectionMTagged
Definition: WKTParser.h:530
qi::rule< Iterator, ascii::space_type > geometryCollectionMTxt
Definition: WKTParser.h:563
qi::rule< Iterator, ascii::space_type > polyhedralSurfaceTagged
Definition: WKTParser.h:512
qi::rule< Iterator, ascii::space_type > geometryTagged
Definition: WKTParser.h:497
qi::rule< Iterator, ascii::space_type > geometryCollectionTxt
Definition: WKTParser.h:563
qi::rule< Iterator, ascii::space_type > multiPolygonZTagged
Definition: WKTParser.h:521
void createGeometryCollection()
qi::rule< Iterator, ascii::space_type > pointTxt
Definition: WKTParser.h:533
qi::rule< Iterator, ascii::space_type > tinMTagged
Definition: WKTParser.h:527
void reset()
This method resets the Parser to original state.
Definition: WKTParser.h:483
WKTParser()
Default constructor.
Definition: WKTParser.h:72
void initMultiLine()
Initializes multi line rules.
Definition: WKTParser.h:318
void initGeometriesZ()
Initializes geometries z tagged rules.
Definition: WKTParser.h:129
qi::rule< Iterator, ascii::space_type > geometryZMTagged
Definition: WKTParser.h:497
qi::rule< Iterator, ascii::space_type > polygonMTagged
Definition: WKTParser.h:509
qi::rule< Iterator, ascii::space_type > polygonZTxt
Definition: WKTParser.h:542
qi::rule< Iterator, ascii::space_type > pointMTxt
Definition: WKTParser.h:533
void createGeometryCollectionZ()
void initGeometryCollection()
Initializes geometry collection rules.
Definition: WKTParser.h:438
qi::rule< Iterator, ascii::space_type > lineStringMTxt
Definition: WKTParser.h:536
void initGeometriesM()
Initializes geometries m tagged rules.
Definition: WKTParser.h:148
qi::rule< Iterator, ascii::space_type > multiPointZMTxt
Definition: WKTParser.h:548
void createPolyhedralSurfaceM()
qi::rule< Iterator, ascii::space_type > polygonTxt
Definition: WKTParser.h:542
qi::rule< Iterator, ascii::space_type > tinMTxt
Definition: WKTParser.h:557
qi::rule< Iterator, ascii::space_type > polyhedralSurfaceZTagged
Definition: WKTParser.h:512
qi::rule< Iterator, ascii::space_type > multiLineStringTxt
Definition: WKTParser.h:551
qi::rule< Iterator, ascii::space_type > tinZMTxt
Definition: WKTParser.h:557
qi::rule< Iterator, ascii::space_type > linearRingZTxt
Definition: WKTParser.h:539
qi::rule< Iterator, ascii::space_type > triangleZTagged
Definition: WKTParser.h:524
qi::rule< Iterator, ascii::space_type > pointZTagged
Definition: WKTParser.h:503
qi::rule< Iterator, ascii::space_type > polygonZMTagged
Definition: WKTParser.h:509
Geometry * getGeometry()
It returns the geometry generated by the parser process.
void initPolyhedralSurface()
Initializes polyhedral surface rules.
Definition: WKTParser.h:366
qi::rule< Iterator, ascii::space_type > geometryZTagged
Definition: WKTParser.h:497
qi::rule< Iterator, ascii::space_type > multiPointTxt
Definition: WKTParser.h:548
qi::rule< Iterator, ascii::space_type > triangleMTagged
Definition: WKTParser.h:524
qi::rule< Iterator, ascii::space_type > tinZTagged
Definition: WKTParser.h:527
qi::rule< Iterator, ascii::space_type > pointZTxt
Definition: WKTParser.h:533
qi::rule< Iterator, ascii::space_type > multiPolygonMTagged
Definition: WKTParser.h:521
URI C++ Library.
void createMultiLineStringZ()
qi::rule< Iterator, ascii::space_type > triangleTxt
Definition: WKTParser.h:560
qi::rule< Iterator, ascii::space_type > geometryCollectionTagged
Definition: WKTParser.h:530
WKTActions m_a
Definition: WKTParser.h:487
void initCoordinates()
Initializes coordinates rules.
Definition: WKTParser.h:186
qi::rule< Iterator, ascii::space_type > multiLineStringZTagged
Definition: WKTParser.h:518
qi::rule< Iterator, ascii::space_type > triangleZMTxt
Definition: WKTParser.h:560
void initGeometries()
Initializes geometry tagged rules.
Definition: WKTParser.h:110
qi::rule< Iterator, ascii::space_type > pointZMTxt
Definition: WKTParser.h:533
Geometry * getGeometry()
It returns the geometry generated by the parser process.
Definition: WKTParser.h:473
qi::rule< Iterator, ascii::space_type > coordinateM
Definition: WKTParser.h:500
qi::rule< Iterator, ascii::space_type > multiPolygonZMTxt
Definition: WKTParser.h:554
qi::rule< Iterator, ascii::space_type > lineStringMTagged
Definition: WKTParser.h:506
qi::rule< Iterator, ascii::space_type > multiLineStringZMTxt
Definition: WKTParser.h:551
qi::rule< Iterator, ascii::space_type > multiPolygonZMTagged
Definition: WKTParser.h:521
qi::rule< Iterator, ascii::space_type > triangleZTxt
Definition: WKTParser.h:560
qi::rule< Iterator, ascii::space_type > linearRingMTxt
Definition: WKTParser.h:539
qi::rule< Iterator, ascii::space_type > lineStringZTxt
Definition: WKTParser.h:536
void initPolygon()
Initializes polygon rules.
Definition: WKTParser.h:270
qi::rule< Iterator, ascii::space_type > coordinateZM
Definition: WKTParser.h:500
void initTIN()
Initializes TIN rules.
Definition: WKTParser.h:390
Geometry is the root class of the geometries hierarchy, it follows OGC and ISO standards.
Definition: Geometry.h:74
qi::rule< Iterator, ascii::space_type > polyhedralSurfaceMTagged
Definition: WKTParser.h:512
qi::rule< Iterator, ascii::space_type > tinTagged
Definition: WKTParser.h:527
void createPolyhedralSurfaceZM()
qi::rule< Iterator, ascii::space_type > triangleTagged
Definition: WKTParser.h:524
qi::rule< Iterator, ascii::space_type > multiLineStringMTagged
Definition: WKTParser.h:518
qi::rule< Iterator, ascii::space_type > lineStringTxt
Definition: WKTParser.h:536
qi::rule< Iterator, ascii::space_type > polygonZTagged
Definition: WKTParser.h:509
qi::rule< Iterator, ascii::space_type > pointMTagged
Definition: WKTParser.h:503
qi::rule< Iterator, ascii::space_type > multiLineStringMTxt
Definition: WKTParser.h:551
qi::rule< Iterator, ascii::space_type > polygonMTxt
Definition: WKTParser.h:542
void initMultiPolygon()
Initializes multi polygon rules.
Definition: WKTParser.h:342
void createMultiLineString()
void createGeometryCollectionZM()
qi::rule< Iterator, ascii::space_type > multiPointZMTagged
Definition: WKTParser.h:515
void createMultiLineStringM()
void createMultiPolygonM()
qi::rule< Iterator, ascii::space_type > geometry
Definition: WKTParser.h:494
qi::rule< Iterator, ascii::space_type > linearRingZMTxt
Definition: WKTParser.h:539
qi::rule< Iterator, ascii::space_type > polygonZMTxt
Definition: WKTParser.h:542
qi::rule< Iterator, ascii::space_type > triangleZMTagged
Definition: WKTParser.h:524
void createMultiPolygonZ()
A class that implements the Grammar Rules for well known text (WKT) format for Geometry.
Definition: WKTActions.h:54
void createPolyhedralSurfaceZ()
qi::rule< Iterator, ascii::space_type > empty
Definition: WKTParser.h:566
qi::rule< Iterator, ascii::space_type > polyhedralSurfaceZTxt
Definition: WKTParser.h:545
void initPoint()
Initializes point rules.
Definition: WKTParser.h:213
qi::rule< Iterator, ascii::space_type > lineStringZTagged
Definition: WKTParser.h:506
qi::rule< Iterator, ascii::space_type > polyhedralSurfaceTxt
Definition: WKTParser.h:545
qi::rule< Iterator, ascii::space_type > geometryCollectionZTagged
Definition: WKTParser.h:530
qi::rule< Iterator, ascii::space_type > multiPointTagged
Definition: WKTParser.h:515
void createMultiLineStringZM()
qi::rule< Iterator, ascii::space_type > multiLineStringZTxt
Definition: WKTParser.h:551
qi::rule< Iterator, ascii::space_type > pointTagged
Definition: WKTParser.h:503
qi::rule< Iterator, ascii::space_type > polyhedralSurfaceMTxt
Definition: WKTParser.h:545
qi::rule< Iterator, ascii::space_type > linearRingTxt
Definition: WKTParser.h:539
qi::rule< Iterator, ascii::space_type > multiPointMTxt
Definition: WKTParser.h:548
qi::rule< Iterator, ascii::space_type > triangleMTxt
Definition: WKTParser.h:560
qi::rule< Iterator, ascii::space_type > coordinateZ
Definition: WKTParser.h:500
qi::rule< Iterator, ascii::space_type > tinZMTagged
Definition: WKTParser.h:527
qi::rule< Iterator, ascii::space_type > lineStringTagged
Definition: WKTParser.h:506
qi::rule< Iterator, ascii::space_type > coordinate
Definition: WKTParser.h:500
qi::rule< Iterator, ascii::space_type > pointZMTagged
Definition: WKTParser.h:503
void initMultiPoint()
Initializes multi point rules.
Definition: WKTParser.h:294
qi::rule< Iterator, ascii::space_type > geometryCollectionZTxt
Definition: WKTParser.h:563
qi::rule< Iterator, ascii::space_type > geometryCollectionZMTagged
Definition: WKTParser.h:530
void reset()
This method resets the Action class to original state.
qi::rule< Iterator, ascii::space_type > multiLineStringTagged
Definition: WKTParser.h:518
qi::rule< Iterator, ascii::space_type > geometryMTagged
Definition: WKTParser.h:497
qi::rule< Iterator, ascii::space_type > polyhedralSurfaceZMTxt
Definition: WKTParser.h:545
void createPolyhedralSurface()
void createMultiPolygonZM()
void createGeometryCollectionM()
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
Definition: WKTParser.h:515