All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
EWKBWriter.h
Go to the documentation of this file.
1 /* Copyright (C) 2008-2013 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/postgis/EWKBWriter.h
22 
23  \brief An utility class for writing a PostGIS EWKB.
24 */
25 
26 #ifndef __TERRALIB_POSTGIS_INTERNAL_EWKBWRITER_H
27 #define __TERRALIB_POSTGIS_INTERNAL_EWKBWRITER_H
28 
29 // TerraLib
30 #include "../common/Enums.h"
31 #include "../geometry/Visitor.h"
32 #include "Config.h"
33 
34 // Forward declarations
35 #include "../geometry_fw.h"
36 
37 namespace te
38 {
39  namespace pgis
40  {
41  /*!
42  \class EWKBWriter
43 
44  \brief An utility class for writing a PostGIS EWKB.
45 
46  \todo This class doesn't afford for Machine byte order yet!
47  */
49  {
50  public:
51 
52  /*!
53  \brief It constructs a new EWKB writer.
54 
55  \param ewkb A pointer to a buffer to output the ewkb. It must have at least the size in bytes necessary to write the EWKB.
56  \param byteOrder The byte order to be used to encode the WKB.
57  */
59 
60  /*! \brief Destructor. */
61  ~EWKBWriter();
62 
63  /*!
64  \brief It serializes the geometry to an EWKB representation into the specified buffer.
65 
66  \param geom The geometry to be serialized.
67 
68  \note You must call reset in successive calls to this method.
69  */
70  void write(const te::gm::Geometry* geom);
71 
72  /*!
73  \brief It serializes the geometry to an EWKB representation into the specified buffer.
74 
75  The ewkb parameter must have at least geom.getWkbSize() + 4 bytes in order to be used. Don't
76  pass a NULL pointer or a buffer smaller than the size needed. Note that
77  the EWKB will be on the specified byte order.
78 
79  \param geom The geometry to be serialized.
80  \param ewkb The buffer where the geometry will be serialized.
81  \param byteOrder The byte order used to store/serialize the geometry.
82  */
83  static void write(const te::gm::Geometry* geom, char* ewkb, te::common::MachineByteOrder byteOrder = te::common::NDR);
84 
85  /*!
86  \brief It resets the EWKB writer an allows a new geometry to be seriealized to a new buffer.
87 
88  \param ewkb A pointer to a buffer to output the ewkb. It must have at least the size in bytes necessary to write the EWKB.
89  \param byteOrder The byte order to be used to encode the EWKB.
90  */
91  void reset(char* ewkb, te::common::MachineByteOrder byteOrder = te::common::NDR);
92 
93  protected:
94 
95  void visit(const te::gm::Curve& /*visited*/) {}
96  void visit(const te::gm::Geometry& /*visited*/) {}
97  void visit(const te::gm::GeometryCollection& visited);
98  void visit(const te::gm::LinearRing& visited);
99  void visit(const te::gm::LineString& visited);
100  void visit(const te::gm::MultiCurve& /*visited*/) {}
101  void visit(const te::gm::MultiLineString& visited);
102  void visit(const te::gm::MultiPoint& visited);
103  void visit(const te::gm::MultiPolygon& visited);
104  void visit(const te::gm::MultiSurface& /*visited*/) {}
105  void visit(const te::gm::AbstractPoint& /*visited*/) {}
106  void visit(const te::gm::Point& visited);
107  void visit(const te::gm::PointM& visited);
108  void visit(const te::gm::PointZ& visited);
109  void visit(const te::gm::PointZM& visited);
110  void visit(const te::gm::PointKd& /*visited*/) {}
111  void visit(const te::gm::Polygon& visited);
112  void visit(const te::gm::PolyhedralSurface& /*visited*/) {}
113  void visit(const te::gm::Surface& /*visited*/) {}
114  void visit(const te::gm::TIN& /*visited*/) {}
115  void visit(const te::gm::Triangle& /*visited*/) {}
116  void visit(const te::gm::CircularString& /*visited*/) {}
117  void visit(const te::gm::CompoundCurve& /*visited*/) {}
118  void visit(const te::gm::CurvePolygon& /*visited*/) {}
119 
120  private:
121 
122  char* m_ewkb; //!< A pointer that marks the current position in a buffer to be write when parsing the geometry.
123  te::common::MachineByteOrder m_byteOrder; //!< The byte order used to encode the EWKB.
124  bool m_outputSRID; //!< If true we add a bit indicating that the srid will be outputed with the gometry.
125  };
126  } // end namespace pgis
127 } // end namespace te
128 
129 #endif // __TERRALIB_POSTGIS_INTERNAL_EWKBWRITER_H
130 
MultiLineString is a MultiCurve whose elements are LineStrings.
Configuration flags for the PostGIS Driver Implementation of TerraLib.
void visit(const te::gm::MultiSurface &)
Definition: EWKBWriter.h:104
MultiSurface is a class that represents a 2-dimensional GeometryCollection whose elements are surface...
Definition: MultiSurface.h:54
void visit(const te::gm::Triangle &)
Definition: EWKBWriter.h:115
Polygon is a subclass of CurvePolygon whose rings are defined by linear rings.
Definition: Polygon.h:50
A LinearRing is a LineString that is both closed and simple.
Definition: LinearRing.h:53
A point with z-coordinate value.
Definition: PointZ.h:51
CurvePolygon is a planar surface defined by 1 exterior boundary and 0 or more interior boundaries...
Definition: CurvePolygon.h:57
void visit(const te::gm::PolyhedralSurface &)
Definition: EWKBWriter.h:112
bool m_outputSRID
If true we add a bit indicating that the srid will be outputed with the gometry.
Definition: EWKBWriter.h:124
void visit(const te::gm::Geometry &)
Definition: EWKBWriter.h:96
TIN (triangulated irregular network) is a PolyhedralSurface consisting only of Triangle patches...
Definition: TIN.h:50
A base abstract class for 0-dimensional geometric objects that represents a single location in coordi...
Definition: AbstractPoint.h:50
A point with a z-coordinate value and an associated measurement.
Definition: PointZM.h:51
MultiCurve is a class that represents a 1-dimensional GeometryCollection whose elements are curves...
Definition: MultiCurve.h:50
LineString is a curve with linear interpolation between points.
Definition: LineString.h:62
CircularString is a curve with circular interpolation between points.
void visit(const te::gm::AbstractPoint &)
Definition: EWKBWriter.h:105
void visit(const te::gm::CircularString &)
Definition: EWKBWriter.h:116
Curve is an abstract class that represents 1-dimensional geometric objects stored as a sequence of co...
Definition: Curve.h:57
An utility class for writing a PostGIS EWKB.
Definition: EWKBWriter.h:48
MultiPolygon is a MultiSurface whose elements are Polygons.
Definition: MultiPolygon.h:50
void visit(const te::gm::Surface &)
Definition: EWKBWriter.h:113
MachineByteOrder
Endianness.
Definition: Enums.h:116
Geometry is the root class of the geometries hierarchy, it follows OGC and ISO standards.
Definition: Geometry.h:73
A point with x and y coordinate values.
Definition: Point.h:50
CompoundCurve is a curve that may have circular and linear segments.
Definition: CompoundCurve.h:53
A point with an associated measure.
Definition: PointM.h:51
void visit(const te::gm::TIN &)
Definition: EWKBWriter.h:114
void visit(const te::gm::Curve &)
Definition: EWKBWriter.h:95
#define TEPGISEXPORT
You can use this macro in order to export/import classes and functions from this module.
Definition: Config.h:221
void visit(const te::gm::CurvePolygon &)
Definition: EWKBWriter.h:118
void visit(const te::gm::PointKd &)
Definition: EWKBWriter.h:110
It is a collection of other geometric objects.
PolyhedralSurface is a contiguous collection of polygons, which share common boundary segments...
char * m_ewkb
A pointer that marks the current position in a buffer to be write when parsing the geometry...
Definition: EWKBWriter.h:122
MultiPoint is a GeometryCollection whose elements are restricted to points.
Definition: MultiPoint.h:50
Triangle is a polygon with 3 distinct, non-collinear vertices and no interior boundary.
Definition: Triangle.h:50
A k-dimensional point.
Definition: PointKd.h:53
void visit(const te::gm::CompoundCurve &)
Definition: EWKBWriter.h:117
te::common::MachineByteOrder m_byteOrder
The byte order used to encode the EWKB.
Definition: EWKBWriter.h:123
A visitor interface for the Geometry hierarchy.
Definition: Visitor.h:44
Surface is an abstract class that represents a 2-dimensional geometric objects.
Definition: Surface.h:54
void visit(const te::gm::MultiCurve &)
Definition: EWKBWriter.h:100