From b68c19042ba4720cf6a5c272812d4f90725268d7 Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Fri, 24 Aug 2018 16:19:47 -0700 Subject: [PATCH] Fix elevation inconsistencies --- geometry.cpp | 2 ++ mvt.cpp | 10 +++++----- write_json.cpp | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/geometry.cpp b/geometry.cpp index f240fd2..691f8cf 100644 --- a/geometry.cpp +++ b/geometry.cpp @@ -1145,6 +1145,7 @@ static int clip(double *x0, double *y0, double *x1, double *y1, double xmin, dou y = *y0 + (*y1 - *y0) * (xmax - *x0) / (*x1 - *x0); x = xmax; + e.resize(0); for (size_t i = 0; i < e0->size() && i < e1->size(); i++) { e.push_back((*e0)[i] + ((*e1)[i] - (*e0)[i]) * (xmax - *x0) / (*x1 - *x0)); } @@ -1152,6 +1153,7 @@ static int clip(double *x0, double *y0, double *x1, double *y1, double xmin, dou y = *y0 + (*y1 - *y0) * (xmin - *x0) / (*x1 - *x0); x = xmin; + e.resize(0); for (size_t i = 0; i < e0->size() && i < e1->size(); i++) { e.push_back((*e0)[i] + ((*e1)[i] - (*e0)[i]) * (xmin - *x0) / (*x1 - *x0)); } diff --git a/mvt.cpp b/mvt.cpp index c74f983..1d30215 100644 --- a/mvt.cpp +++ b/mvt.cpp @@ -314,7 +314,7 @@ bool mvt_tile::decode(std::string &message, bool &was_compressed) { protozero::pbf_reader feature_reader(layer_reader.get_message()); mvt_feature feature; std::vector geoms; - size_t dimensions = 2; + size_t dimensions = 0; std::vector elevations; while (feature_reader.next()) { @@ -391,7 +391,7 @@ bool mvt_tile::decode(std::string &message, bool &was_compressed) { mvt_geometry decoded = mvt_geometry(op, px, py); - for (size_t i = 2; i < dimensions; i++) { + for (size_t i = 0; i < dimensions; i++) { if (elevation_index < elevations.size()) { decoded.elevations.push_back(elevations[elevation_index]); elevation_index++; @@ -515,7 +515,7 @@ std::string mvt_tile::encode() { for (size_t f = 0; f < layers[i].features.size(); f++) { std::string feature_string; protozero::pbf_writer feature_writer(feature_string); - size_t dimensions = 2; + size_t dimensions = 0; feature_writer.add_enum(3, layers[i].features[f].type); feature_writer.add_packed_uint32(2, std::begin(layers[i].features[f].tags), std::end(layers[i].features[f].tags)); @@ -562,7 +562,7 @@ std::string mvt_tile::encode() { py = wwy; length++; - if (geom[g].elevations.size() + 2 > dimensions) { + if (geom[g].elevations.size() > dimensions) { dimensions = geom[g].elevations.size(); } } else if (op == mvt_closepath) { @@ -579,7 +579,7 @@ std::string mvt_tile::encode() { feature_writer.add_packed_uint32(4, std::begin(geometry), std::end(geometry)); - if (dimensions > 2) { + if (dimensions > 0) { std::vector elevations; for (size_t g = 0; g < geom.size(); g++) { diff --git a/write_json.cpp b/write_json.cpp index d6504bc..f2f2583 100644 --- a/write_json.cpp +++ b/write_json.cpp @@ -379,7 +379,7 @@ void write_coordinates(json_writer &state, lonlat const &p) { state.json_write_float(p.lat); for (size_t i = 0; i < p.elevations.size(); i++) { - state.json_write_number(p.elevations[i]); + state.json_write_float(p.elevations[i]); } state.json_end_array();