From 9387fe6546887063ae0cf5e1fada38bbcfb026a1 Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Thu, 14 Feb 2019 10:48:22 -0800 Subject: [PATCH 1/2] Current behavior if the ID attribute is also excluded --- ...-z0_--use-attribute-for-id_special_-X.json | 40 +++++++++++++++++++ ...se-attribute-for-id_special_-xspecial.json | 40 +++++++++++++++++++ ...-use-attribute-for-id_special_-yother.json | 40 +++++++++++++++++++ 3 files changed, 120 insertions(+) create mode 100644 tests/stringid/out/-z0_--use-attribute-for-id_special_-X.json create mode 100644 tests/stringid/out/-z0_--use-attribute-for-id_special_-xspecial.json create mode 100644 tests/stringid/out/-z0_--use-attribute-for-id_special_-yother.json diff --git a/tests/stringid/out/-z0_--use-attribute-for-id_special_-X.json b/tests/stringid/out/-z0_--use-attribute-for-id_special_-X.json new file mode 100644 index 0000000..cf329f7 --- /dev/null +++ b/tests/stringid/out/-z0_--use-attribute-for-id_special_-X.json @@ -0,0 +1,40 @@ +{ "type": "FeatureCollection", "properties": { +"bounds": "1.000000,1.000000,12.000000,1.000000", +"center": "1.000000,1.000000,0", +"description": "tests/stringid/out/-z0_--use-attribute-for-id_special_-X.json.check.mbtiles", +"format": "pbf", +"json": "{\"vector_layers\": [ { \"id\": \"in\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} } ],\"tilestats\": {\"layerCount\": 1,\"layers\": [{\"layer\": \"in\",\"count\": 12,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []}]}}", +"maxzoom": "0", +"minzoom": "0", +"name": "tests/stringid/out/-z0_--use-attribute-for-id_special_-X.json.check.mbtiles", +"type": "overlay", +"version": "2" +}, "features": [ +{ "type": "FeatureCollection", "properties": { "zoom": 0, "x": 0, "y": 0 }, "features": [ +{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "id": 12345, "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.966797, 1.054628 ] } } +, +{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 1.933594, 1.054628 ] } } +, +{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 2.988281, 1.054628 ] } } +, +{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 3.955078, 1.054628 ] } } +, +{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 4.921875, 1.054628 ] } } +, +{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 5.976562, 1.054628 ] } } +, +{ "type": "Feature", "id": 1234, "properties": { }, "geometry": { "type": "Point", "coordinates": [ 6.943359, 1.054628 ] } } +, +{ "type": "Feature", "id": 1234, "properties": { }, "geometry": { "type": "Point", "coordinates": [ 7.998047, 1.054628 ] } } +, +{ "type": "Feature", "id": 1234, "properties": { }, "geometry": { "type": "Point", "coordinates": [ 8.964844, 1.054628 ] } } +, +{ "type": "Feature", "id": 1234, "properties": { }, "geometry": { "type": "Point", "coordinates": [ 9.931641, 1.054628 ] } } +, +{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 10.986328, 1.054628 ] } } +, +{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 11.953125, 1.054628 ] } } +] } +] } +] } diff --git a/tests/stringid/out/-z0_--use-attribute-for-id_special_-xspecial.json b/tests/stringid/out/-z0_--use-attribute-for-id_special_-xspecial.json new file mode 100644 index 0000000..f06bb5f --- /dev/null +++ b/tests/stringid/out/-z0_--use-attribute-for-id_special_-xspecial.json @@ -0,0 +1,40 @@ +{ "type": "FeatureCollection", "properties": { +"bounds": "1.000000,1.000000,12.000000,1.000000", +"center": "1.000000,1.000000,0", +"description": "tests/stringid/out/-z0_--use-attribute-for-id_special_-xspecial.json.check.mbtiles", +"format": "pbf", +"json": "{\"vector_layers\": [ { \"id\": \"in\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"something\": \"Boolean\", \"yes\": \"String\"} } ],\"tilestats\": {\"layerCount\": 1,\"layers\": [{\"layer\": \"in\",\"count\": 12,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"something\",\"count\": 1,\"type\": \"boolean\",\"values\": [false]},{\"attribute\": \"yes\",\"count\": 1,\"type\": \"string\",\"values\": [\"no\"]}]}]}}", +"maxzoom": "0", +"minzoom": "0", +"name": "tests/stringid/out/-z0_--use-attribute-for-id_special_-xspecial.json.check.mbtiles", +"type": "overlay", +"version": "2" +}, "features": [ +{ "type": "FeatureCollection", "properties": { "zoom": 0, "x": 0, "y": 0 }, "features": [ +{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "id": 12345, "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.966797, 1.054628 ] } } +, +{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 1.933594, 1.054628 ] } } +, +{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 2.988281, 1.054628 ] } } +, +{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 3.955078, 1.054628 ] } } +, +{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 4.921875, 1.054628 ] } } +, +{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 5.976562, 1.054628 ] } } +, +{ "type": "Feature", "id": 1234, "properties": { "yes": "no", "something": false }, "geometry": { "type": "Point", "coordinates": [ 6.943359, 1.054628 ] } } +, +{ "type": "Feature", "id": 1234, "properties": { "yes": "no", "something": false }, "geometry": { "type": "Point", "coordinates": [ 7.998047, 1.054628 ] } } +, +{ "type": "Feature", "id": 1234, "properties": { "yes": "no", "something": false }, "geometry": { "type": "Point", "coordinates": [ 8.964844, 1.054628 ] } } +, +{ "type": "Feature", "id": 1234, "properties": { "yes": "no", "something": false }, "geometry": { "type": "Point", "coordinates": [ 9.931641, 1.054628 ] } } +, +{ "type": "Feature", "properties": { "yes": "no", "something": false }, "geometry": { "type": "Point", "coordinates": [ 10.986328, 1.054628 ] } } +, +{ "type": "Feature", "properties": { "yes": "no", "something": false }, "geometry": { "type": "Point", "coordinates": [ 11.953125, 1.054628 ] } } +] } +] } +] } diff --git a/tests/stringid/out/-z0_--use-attribute-for-id_special_-yother.json b/tests/stringid/out/-z0_--use-attribute-for-id_special_-yother.json new file mode 100644 index 0000000..1109c6f --- /dev/null +++ b/tests/stringid/out/-z0_--use-attribute-for-id_special_-yother.json @@ -0,0 +1,40 @@ +{ "type": "FeatureCollection", "properties": { +"bounds": "1.000000,1.000000,12.000000,1.000000", +"center": "1.000000,1.000000,0", +"description": "tests/stringid/out/-z0_--use-attribute-for-id_special_-yother.json.check.mbtiles", +"format": "pbf", +"json": "{\"vector_layers\": [ { \"id\": \"in\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} } ],\"tilestats\": {\"layerCount\": 1,\"layers\": [{\"layer\": \"in\",\"count\": 12,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []}]}}", +"maxzoom": "0", +"minzoom": "0", +"name": "tests/stringid/out/-z0_--use-attribute-for-id_special_-yother.json.check.mbtiles", +"type": "overlay", +"version": "2" +}, "features": [ +{ "type": "FeatureCollection", "properties": { "zoom": 0, "x": 0, "y": 0 }, "features": [ +{ "type": "FeatureCollection", "properties": { "layer": "in", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "id": 12345, "properties": { }, "geometry": { "type": "Point", "coordinates": [ 0.966797, 1.054628 ] } } +, +{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 1.933594, 1.054628 ] } } +, +{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 2.988281, 1.054628 ] } } +, +{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 3.955078, 1.054628 ] } } +, +{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 4.921875, 1.054628 ] } } +, +{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 5.976562, 1.054628 ] } } +, +{ "type": "Feature", "id": 1234, "properties": { }, "geometry": { "type": "Point", "coordinates": [ 6.943359, 1.054628 ] } } +, +{ "type": "Feature", "id": 1234, "properties": { }, "geometry": { "type": "Point", "coordinates": [ 7.998047, 1.054628 ] } } +, +{ "type": "Feature", "id": 1234, "properties": { }, "geometry": { "type": "Point", "coordinates": [ 8.964844, 1.054628 ] } } +, +{ "type": "Feature", "id": 1234, "properties": { }, "geometry": { "type": "Point", "coordinates": [ 9.931641, 1.054628 ] } } +, +{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 10.986328, 1.054628 ] } } +, +{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 11.953125, 1.054628 ] } } +] } +] } +] } From 435a788c3fb227de83d59f90f766eabf42c8a72b Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Thu, 14 Feb 2019 11:40:58 -0800 Subject: [PATCH 2/2] Don't exclude the attribute that is specified to be the feature ID --- CHANGELOG.md | 5 ++++ serial.cpp | 25 ++++++++++--------- ...-z0_--use-attribute-for-id_special_-X.json | 4 +-- ...se-attribute-for-id_special_-xspecial.json | 4 +-- ...-use-attribute-for-id_special_-yother.json | 4 +-- version.hpp | 2 +- 6 files changed, 25 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a7d3b39..044883d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.32.11 + +* Don't let attribute exclusion apply to the attribute that has been specified + to become the feature ID + ## 1.32.10 * Fix a bug that disallowed a per-feature minzoom of 0 diff --git a/serial.cpp b/serial.cpp index 6599af5..98ac1ef 100644 --- a/serial.cpp +++ b/serial.cpp @@ -583,18 +583,6 @@ int serialize_feature(struct serialization_state *sst, serial_feature &sf) { } for (ssize_t i = (ssize_t) sf.full_keys.size() - 1; i >= 0; i--) { - if (sst->exclude_all) { - if (sst->include->count(sf.full_keys[i]) == 0) { - sf.full_keys.erase(sf.full_keys.begin() + i); - sf.full_values.erase(sf.full_values.begin() + i); - continue; - } - } else if (sst->exclude->count(sf.full_keys[i]) != 0) { - sf.full_keys.erase(sf.full_keys.begin() + i); - sf.full_values.erase(sf.full_values.begin() + i); - continue; - } - coerce_value(sf.full_keys[i], sf.full_values[i].type, sf.full_values[i].s, sst->attribute_types); if (sf.full_keys[i] == attribute_for_id) { @@ -633,6 +621,19 @@ int serialize_feature(struct serialization_state *sst, serial_feature &sf) { } } } + + if (sst->exclude_all) { + if (sst->include->count(sf.full_keys[i]) == 0) { + sf.full_keys.erase(sf.full_keys.begin() + i); + sf.full_values.erase(sf.full_values.begin() + i); + continue; + } + } else if (sst->exclude->count(sf.full_keys[i]) != 0) { + sf.full_keys.erase(sf.full_keys.begin() + i); + sf.full_values.erase(sf.full_values.begin() + i); + continue; + } + } if (!sst->filters) { diff --git a/tests/stringid/out/-z0_--use-attribute-for-id_special_-X.json b/tests/stringid/out/-z0_--use-attribute-for-id_special_-X.json index cf329f7..24af479 100644 --- a/tests/stringid/out/-z0_--use-attribute-for-id_special_-X.json +++ b/tests/stringid/out/-z0_--use-attribute-for-id_special_-X.json @@ -24,7 +24,7 @@ , { "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 5.976562, 1.054628 ] } } , -{ "type": "Feature", "id": 1234, "properties": { }, "geometry": { "type": "Point", "coordinates": [ 6.943359, 1.054628 ] } } +{ "type": "Feature", "id": 27, "properties": { }, "geometry": { "type": "Point", "coordinates": [ 6.943359, 1.054628 ] } } , { "type": "Feature", "id": 1234, "properties": { }, "geometry": { "type": "Point", "coordinates": [ 7.998047, 1.054628 ] } } , @@ -32,7 +32,7 @@ , { "type": "Feature", "id": 1234, "properties": { }, "geometry": { "type": "Point", "coordinates": [ 9.931641, 1.054628 ] } } , -{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 10.986328, 1.054628 ] } } +{ "type": "Feature", "id": 27, "properties": { }, "geometry": { "type": "Point", "coordinates": [ 10.986328, 1.054628 ] } } , { "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 11.953125, 1.054628 ] } } ] } diff --git a/tests/stringid/out/-z0_--use-attribute-for-id_special_-xspecial.json b/tests/stringid/out/-z0_--use-attribute-for-id_special_-xspecial.json index f06bb5f..d6f05c6 100644 --- a/tests/stringid/out/-z0_--use-attribute-for-id_special_-xspecial.json +++ b/tests/stringid/out/-z0_--use-attribute-for-id_special_-xspecial.json @@ -24,7 +24,7 @@ , { "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 5.976562, 1.054628 ] } } , -{ "type": "Feature", "id": 1234, "properties": { "yes": "no", "something": false }, "geometry": { "type": "Point", "coordinates": [ 6.943359, 1.054628 ] } } +{ "type": "Feature", "id": 27, "properties": { "yes": "no", "something": false }, "geometry": { "type": "Point", "coordinates": [ 6.943359, 1.054628 ] } } , { "type": "Feature", "id": 1234, "properties": { "yes": "no", "something": false }, "geometry": { "type": "Point", "coordinates": [ 7.998047, 1.054628 ] } } , @@ -32,7 +32,7 @@ , { "type": "Feature", "id": 1234, "properties": { "yes": "no", "something": false }, "geometry": { "type": "Point", "coordinates": [ 9.931641, 1.054628 ] } } , -{ "type": "Feature", "properties": { "yes": "no", "something": false }, "geometry": { "type": "Point", "coordinates": [ 10.986328, 1.054628 ] } } +{ "type": "Feature", "id": 27, "properties": { "yes": "no", "something": false }, "geometry": { "type": "Point", "coordinates": [ 10.986328, 1.054628 ] } } , { "type": "Feature", "properties": { "yes": "no", "something": false }, "geometry": { "type": "Point", "coordinates": [ 11.953125, 1.054628 ] } } ] } diff --git a/tests/stringid/out/-z0_--use-attribute-for-id_special_-yother.json b/tests/stringid/out/-z0_--use-attribute-for-id_special_-yother.json index 1109c6f..b9a615d 100644 --- a/tests/stringid/out/-z0_--use-attribute-for-id_special_-yother.json +++ b/tests/stringid/out/-z0_--use-attribute-for-id_special_-yother.json @@ -24,7 +24,7 @@ , { "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 5.976562, 1.054628 ] } } , -{ "type": "Feature", "id": 1234, "properties": { }, "geometry": { "type": "Point", "coordinates": [ 6.943359, 1.054628 ] } } +{ "type": "Feature", "id": 27, "properties": { }, "geometry": { "type": "Point", "coordinates": [ 6.943359, 1.054628 ] } } , { "type": "Feature", "id": 1234, "properties": { }, "geometry": { "type": "Point", "coordinates": [ 7.998047, 1.054628 ] } } , @@ -32,7 +32,7 @@ , { "type": "Feature", "id": 1234, "properties": { }, "geometry": { "type": "Point", "coordinates": [ 9.931641, 1.054628 ] } } , -{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 10.986328, 1.054628 ] } } +{ "type": "Feature", "id": 27, "properties": { }, "geometry": { "type": "Point", "coordinates": [ 10.986328, 1.054628 ] } } , { "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 11.953125, 1.054628 ] } } ] } diff --git a/version.hpp b/version.hpp index 22b8618..46f7b53 100644 --- a/version.hpp +++ b/version.hpp @@ -1,6 +1,6 @@ #ifndef VERSION_HPP #define VERSION_HPP -#define VERSION "v1.32.10" +#define VERSION "v1.32.11" #endif