mirror of
https://github.com/mapbox/tippecanoe.git
synced 2025-02-23 18:40:17 +00:00
Knots are delta-encoded complex values, not a list of doubles
This commit is contained in:
parent
1b823a6351
commit
af66a8a118
31
mvt.cpp
31
mvt.cpp
@ -377,7 +377,7 @@ bool mvt_tile::decode(std::string &message, bool &was_compressed) {
|
||||
|
||||
case 11: /* knots */
|
||||
{
|
||||
auto pi = feature_reader.get_packed_double();
|
||||
auto pi = feature_reader.get_packed_uint64();
|
||||
for (auto it = pi.first; it != pi.second; ++it) {
|
||||
feature.knots.push_back(*it);
|
||||
}
|
||||
@ -649,7 +649,7 @@ std::string mvt_tile::encode(int z) {
|
||||
feature_writer.add_packed_sint32(7, std::begin(elevations), std::end(elevations));
|
||||
}
|
||||
|
||||
feature_writer.add_packed_double(11, std::begin(layers[i].features[f].knots), std::end(layers[i].features[f].knots));
|
||||
feature_writer.add_packed_uint64(11, std::begin(layers[i].features[f].knots), std::end(layers[i].features[f].knots));
|
||||
|
||||
layer_writer.add_message(2, feature_string);
|
||||
}
|
||||
@ -947,24 +947,25 @@ void tag_object_v3(mvt_layer &layer, json_object *j, std::vector<unsigned long>
|
||||
}
|
||||
|
||||
if (all_ints) {
|
||||
unsigned long vo = 10 | (j->length << 4);
|
||||
onto.push_back(vo);
|
||||
if (layer.delta_list_scaling < 0) {
|
||||
layer.delta_list_scaling = layer.attribute_scalings.size();
|
||||
|
||||
onto.push_back(0); // which scaling
|
||||
|
||||
long here = 0;
|
||||
for (size_t i = 0; i < j->length; i++) {
|
||||
onto.push_back(protozero::encode_zigzag64(std::trunc(j->array[i]->number - here)) + 1);
|
||||
here = j->array[i]->number;
|
||||
}
|
||||
|
||||
if (layer.attribute_scalings.size() == 0) {
|
||||
mvt_scaling sc;
|
||||
sc.offset = 0;
|
||||
sc.multiplier = 1;
|
||||
sc.base = 0;
|
||||
layer.attribute_scalings.push_back(sc);
|
||||
}
|
||||
|
||||
unsigned long vo = 10 | (j->length << 4);
|
||||
onto.push_back(vo);
|
||||
onto.push_back(layer.delta_list_scaling); // which scaling
|
||||
|
||||
long here = 0;
|
||||
for (size_t i = 0; i < j->length; i++) {
|
||||
onto.push_back(protozero::encode_zigzag64(std::trunc(j->array[i]->number - here)) + 1);
|
||||
here = j->array[i]->number;
|
||||
}
|
||||
} else {
|
||||
unsigned long vo = 8 | (j->length << 4);
|
||||
onto.push_back(vo);
|
||||
@ -1034,7 +1035,7 @@ void mvt_layer::tag_v3_value(mvt_value value, std::vector<unsigned long> &onto)
|
||||
tag_v3_value(value.list_value[i], onto);
|
||||
}
|
||||
|
||||
return; // Can't save duplicate
|
||||
return; // Can't save duplicate
|
||||
} else if (value.type == mvt_hash) {
|
||||
vo = 9 | (value.list_value.size() << 4);
|
||||
onto.push_back(vo);
|
||||
@ -1044,7 +1045,7 @@ void mvt_layer::tag_v3_value(mvt_value value, std::vector<unsigned long> &onto)
|
||||
tag_v3_value(value.list_value[i], onto);
|
||||
}
|
||||
|
||||
return; // Can't save duplicate
|
||||
return; // Can't save duplicate
|
||||
} else {
|
||||
fprintf(stderr, "Internal error: unknown value type %d\n", value.type);
|
||||
exit(EXIT_FAILURE);
|
||||
|
7
mvt.hpp
7
mvt.hpp
@ -59,7 +59,7 @@ struct mvt_feature {
|
||||
std::vector<unsigned> tags{};
|
||||
std::vector<unsigned long> properties{};
|
||||
std::vector<mvt_geometry> geometry{};
|
||||
std::vector<double> knots{};
|
||||
std::vector<unsigned long> knots{};
|
||||
int /* mvt_geometry_type */ type = 0;
|
||||
unsigned long long id = 0;
|
||||
bool has_id = false;
|
||||
@ -129,11 +129,14 @@ struct mvt_layer {
|
||||
std::vector<std::string> keys{};
|
||||
std::vector<mvt_value> values{};
|
||||
long long extent = 0;
|
||||
std::vector<mvt_scaling> attribute_scalings;
|
||||
long zoom = -1;
|
||||
long x = -1;
|
||||
long y = -1;
|
||||
|
||||
std::vector<mvt_scaling> attribute_scalings;
|
||||
ssize_t delta_list_scaling = -1;
|
||||
ssize_t spline_scaling = -1;
|
||||
|
||||
std::vector<std::string> string_values;
|
||||
std::vector<float> float_values{};
|
||||
std::vector<double> double_values{};
|
||||
|
Loading…
x
Reference in New Issue
Block a user