Loading...
Searching...
No Matches
EWKBWriter.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/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
37namespace 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. */
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
CircularString is a curve with circular interpolation between points.
CompoundCurve is a curve that may have circular and linear segments.
CurvePolygon is a planar surface defined by 1 exterior boundary and 0 or more interior boundaries.
Curve is an abstract class that represents 1-dimensional geometric objects stored as a sequence of co...
Definition Curve.h:59
It is a collection of other geometric objects.
Geometry is the root class of the geometries hierarchy, it follows OGC and ISO standards.
Definition Geometry.h:78
LineString is a curve with linear interpolation between points.
Definition LineString.h:65
A LinearRing is a LineString that is both closed and simple.
Definition LinearRing.h:54
MultiCurve is a class that represents a 1-dimensional GeometryCollection whose elements are curves.
Definition MultiCurve.h:51
MultiLineString is a MultiCurve whose elements are LineStrings.
MultiPoint is a GeometryCollection whose elements are restricted to points.
Definition MultiPoint.h:54
MultiPolygon is a MultiSurface whose elements are Polygons.
MultiSurface is a class that represents a 2-dimensional GeometryCollection whose elements are surface...
A point with x and y coordinate values.
Definition Point.h:51
Polygon is a subclass of CurvePolygon whose rings are defined by linear rings.
Definition Polygon.h:51
PolyhedralSurface is a contiguous collection of polygons, which share common boundary segments.
Surface is an abstract class that represents a 2-dimensional geometric objects.
Definition Surface.h:55
TIN (triangulated irregular network) is a PolyhedralSurface consisting only of Triangle patches.
Definition TIN.h:51
Triangle is a polygon with 3 distinct, non-collinear vertices and no interior boundary.
Definition Triangle.h:51
A visitor interface for the Geometry hierarchy.
Definition Visitor.h:45
An utility class for writing a PostGIS EWKB.
Definition EWKBWriter.h:49
void reset(char *ewkb, te::common::MachineByteOrder byteOrder=te::common::NDR)
It resets the EWKB writer an allows a new geometry to be seriealized to a new buffer.
void visit(const te::gm::Polygon &visited)
void visit(const te::gm::CurvePolygon &)
Definition EWKBWriter.h:118
void visit(const te::gm::PolyhedralSurface &)
Definition EWKBWriter.h:112
void visit(const te::gm::CircularString &)
Definition EWKBWriter.h:116
te::common::MachineByteOrder m_byteOrder
The byte order used to encode the EWKB.
Definition EWKBWriter.h:123
void visit(const te::gm::CompoundCurve &)
Definition EWKBWriter.h:117
void visit(const te::gm::MultiLineString &visited)
void visit(const te::gm::LinearRing &visited)
void visit(const te::gm::GeometryCollection &visited)
EWKBWriter(char *ewkb, te::common::MachineByteOrder byteOrder=te::common::NDR)
It constructs a new EWKB writer.
void visit(const te::gm::MultiPoint &visited)
void visit(const te::gm::Geometry &)
Definition EWKBWriter.h:96
void visit(const te::gm::MultiSurface &)
Definition EWKBWriter.h:104
void visit(const te::gm::MultiPolygon &visited)
void write(const te::gm::Geometry *geom)
It serializes the geometry to an EWKB representation into the specified buffer.
void visit(const te::gm::MultiCurve &)
Definition EWKBWriter.h:100
void visit(const te::gm::Curve &)
Definition EWKBWriter.h:95
void visit(const te::gm::Surface &)
Definition EWKBWriter.h:113
char * m_ewkb
A pointer that marks the current position in a buffer to be write when parsing the geometry.
Definition EWKBWriter.h:122
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::Triangle &)
Definition EWKBWriter.h:115
static void write(const te::gm::Geometry *geom, char *ewkb, te::common::MachineByteOrder byteOrder=te::common::NDR)
It serializes the geometry to an EWKB representation into the specified buffer.
~EWKBWriter()
Destructor.
void visit(const te::gm::TIN &)
Definition EWKBWriter.h:114
void visit(const te::gm::Point &visited)
void visit(const te::gm::LineString &visited)
MachineByteOrder
Endianness.
Definition Enums.h:123
TerraLib.
#define TEPGISEXPORT
You can use this macro in order to export/import classes and functions from this module.
Definition Config.h:195
Proxy configuration file for TerraView (see terraview_config.h).