NGen
Loading...
Searching...
No Matches
wkb.hpp
1#ifndef NGEN_GEOPACKAGE_WKB_H
2#define NGEN_GEOPACKAGE_WKB_H
3
4#include "EndianCopy.hpp"
5#include "JSONGeometry.hpp"
6#include <boost/geometry/srs/epsg.hpp>
7#include <boost/geometry/srs/transformation.hpp>
8
9namespace bg = boost::geometry;
10
11namespace ngen {
12namespace geopackage {
13
22struct wkb {
23 using point_t = bg::model::point<double, 2, bg::cs::cartesian>;
24 using linestring_t = bg::model::linestring<point_t>;
25 using polygon_t = bg::model::polygon<point_t>;
26 using multipoint_t = bg::model::multi_point<point_t>;
27 using multilinestring_t = bg::model::multi_linestring<linestring_t>;
28 using multipolygon_t = bg::model::multi_polygon<polygon_t>;
29 using geometry = boost::variant<
30 point_t,
36 >;
37
38 using byte_t = uint8_t;
39 using byte_vector = std::vector<byte_t>;
40
45 struct wgs84;
46
47 // prevent instatiation of this struct
48 wkb() = delete;
49
55 static geometry read(const boost::span<const uint8_t> buffer);
56
57 private:
62 static point_t read_point(const boost::span<const uint8_t>, int&, uint8_t);
63
68 static linestring_t read_linestring(const boost::span<const uint8_t>, int&, uint8_t);
69
74 static polygon_t read_polygon(const boost::span<const uint8_t>, int&, uint8_t);
75
80 static multipoint_t read_multipoint(const boost::span<const uint8_t>, int&, uint8_t);
81
86 static multilinestring_t read_multilinestring(const boost::span<const uint8_t>, int&, uint8_t);
87
92 static multipolygon_t read_multipolygon(const boost::span<const uint8_t>, int&, uint8_t);
93};
94
95struct wkb::wgs84 : public boost::static_visitor<geojson::geometry>
96{
97 wgs84(uint32_t srs, const bg::srs::transformation<>& tr)
98 : srs(srs)
99 , tr(tr) {};
100
107
108 private:
109 uint32_t srs;
110 const bg::srs::transformation<>& tr;
111};
112
113} // namespace geopackage
114} // namespace ngen
115
116#endif // NGEN_GEOPACKAGE_WKB_H
boost::variant< coordinate_t, linestring_t, polygon_t, multipoint_t, multilinestring_t, multipolygon_t > geometry
Definition JSONGeometry.hpp:66
Definition DomainLayer.hpp:9
Definition wkb.hpp:96
wgs84(uint32_t srs, const bg::srs::transformation<> &tr)
Definition wkb.hpp:97
const bg::srs::transformation & tr
Definition wkb.hpp:110
geojson::geometry operator()(point_t &g)
Definition wkb.cpp:201
uint32_t srs
Definition wkb.hpp:109
A recursive WKB reader.
Definition wkb.hpp:22
static polygon_t read_polygon(const boost::span< const uint8_t >, int &, uint8_t)
Read a WKB polygon into a cartesian model.
Definition wkb.cpp:60
static point_t read_point(const boost::span< const uint8_t >, int &, uint8_t)
Read a WKB point into a cartesian model.
Definition wkb.cpp:34
std::vector< byte_t > byte_vector
Definition wkb.hpp:39
static multilinestring_t read_multilinestring(const boost::span< const uint8_t >, int &, uint8_t)
Read a WKB multilinestring into a cartesian model.
Definition wkb.cpp:117
bg::model::multi_linestring< linestring_t > multilinestring_t
Definition wkb.hpp:27
uint8_t byte_t
Definition wkb.hpp:38
static multipolygon_t read_multipolygon(const boost::span< const uint8_t >, int &, uint8_t)
Read a WKB multipolygon into a cartesian model.
Definition wkb.cpp:140
bg::model::point< double, 2, bg::cs::cartesian > point_t
Definition wkb.hpp:23
static multipoint_t read_multipoint(const boost::span< const uint8_t >, int &, uint8_t)
Read a WKB multipoint into a cartesian model.
Definition wkb.cpp:93
bg::model::multi_polygon< polygon_t > multipolygon_t
Definition wkb.hpp:28
boost::variant< point_t, linestring_t, polygon_t, multipoint_t, multilinestring_t, multipolygon_t > geometry
Definition wkb.hpp:29
static linestring_t read_linestring(const boost::span< const uint8_t >, int &, uint8_t)
Read a WKB linestring into a cartesian model.
Definition wkb.cpp:44
bg::model::multi_point< point_t > multipoint_t
Definition wkb.hpp:26
bg::model::linestring< point_t > linestring_t
Definition wkb.hpp:24
static geometry read(const boost::span< const uint8_t > buffer)
Read WKB from a given buffer.
Definition wkb.cpp:163
bg::model::polygon< point_t > polygon_t
Definition wkb.hpp:25