From 4bcef2cb112cfd9bab4c5fdb725cf1f0aa0e527c Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Thu, 13 Sep 2018 17:04:22 -0700 Subject: [PATCH] Work on reading dimension descriptions --- mvt.cpp | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ mvt.hpp | 8 ++++++++ 2 files changed, 57 insertions(+) diff --git a/mvt.cpp b/mvt.cpp index 8aa6b2b..3d5d858 100644 --- a/mvt.cpp +++ b/mvt.cpp @@ -144,6 +144,7 @@ bool mvt_tile::decode(std::string &message, bool &was_compressed) { { protozero::pbf_reader layer_reader(reader.get_message()); mvt_layer layer; + std::vector dimensions; while (layer_reader.next()) { switch (layer_reader.tag()) { @@ -277,6 +278,54 @@ bool mvt_tile::decode(std::string &message, bool &was_compressed) { break; } + case 10: /* dimensions */ + { + protozero::pbf_reader dimension_reader(layer_reader.get_message()); + mvt_dimension dimension; + + dimension.scale = 1; + dimension.global_offset = 0; + dimension.offset = 0; + + while (dimension_reader.next()) { + switch (dimension_reader.tag()) { + case 2: + dimension.is_elevation = dimension_reader.get_bool(); + break; + + case 3: + dimension.offset = dimension_reader.get_sint64(); + break; + + case 4: + dimension.scale = dimension_reader.get_sint64(); + break; + + case 8: + dimension.scale = dimension_reader.get_double(); + break; + + case 5: + dimension.global_offset = dimension_reader.get_sint64(); + break; + + case 9: + dimension.global_offset = dimension_reader.get_double(); + break; + + case 10: + dimension.name = dimension_reader.get_string(); + break; + + default: + dimension_reader.skip(); + break; + } + } + + break; + } + case 15: /* version */ layer.version = layer_reader.get_uint32(); break; diff --git a/mvt.hpp b/mvt.hpp index 587f2cf..f7f877b 100644 --- a/mvt.hpp +++ b/mvt.hpp @@ -112,6 +112,14 @@ struct mvt_value { } }; +struct mvt_dimension { + bool is_elevation; + long offset; + double scale; + double global_offset; + std::string name; +}; + struct mvt_layer { int version = 0; std::string name = "";