mirror of
https://github.com/felt/tippecanoe.git
synced 2026-10-02 08:25:40 +02:00
Speeding up tippecanoe-overzoom (#191)
* Speed up mvt_value comparison
* Converting repetitive ifs to cases
* More conversions from ifs to cases
* Optimize the always-true filter case
* Don't convert types of attributes without accumulators
* Unordered map seems to be faster than map
* Add missing header
* Fix some warnings
* Fix the warnings better
* Avoid an int->string->int conversion
* Lazily initialize layer key and values maps when actually needed
* More switches from maps to unordered_maps
* Sure, I'll take the microoptimization
* More emplacement
* Save some copies
* Emplaces and moves
* Lazy linear scan of attributes instead of building a map
* Extra printfs, missing header
* Avoid clipping if the input and output tiles are the same
* But do clip if the tile extent is being reduced
* Make sure I'm not constructing std::strings here at runtime
* More worrying about runtime string construction
* A couple more std::moves
* Const references!
* More const references
* Another std::move
* Make the string_value of mvt_value std::optional
* Reserve storage when decoding
* Provision for different mvt_values to share a string pool
* Use the string pool when decoding
* Avoid another string construction
* Try limiting the depth of the search for duplicate attributes
* Revert "Try limiting the depth of the search for duplicate attributes"
This reverts commit 9ec94a15ff.
* Update changelog
* Fix typo noticed during code review
This commit is contained in:
+19
-10
@@ -336,31 +336,40 @@ void layer_to_geojson(mvt_layer const &layer, unsigned z, unsigned x, unsigned y
|
||||
const char *key = layer.keys[feat.tags[t]].c_str();
|
||||
mvt_value const &val = layer.values[feat.tags[t + 1]];
|
||||
|
||||
if (val.type == mvt_string) {
|
||||
switch (val.type) {
|
||||
case mvt_string:
|
||||
state.json_write_string(key);
|
||||
state.json_write_string(val.string_value);
|
||||
} else if (val.type == mvt_int) {
|
||||
state.json_write_string(val.get_string_value());
|
||||
break;
|
||||
case mvt_int:
|
||||
state.json_write_string(key);
|
||||
state.json_write_signed(val.numeric_value.int_value);
|
||||
} else if (val.type == mvt_double) {
|
||||
break;
|
||||
case mvt_double:
|
||||
state.json_write_string(key);
|
||||
state.json_write_number(val.numeric_value.double_value);
|
||||
} else if (val.type == mvt_float) {
|
||||
break;
|
||||
case mvt_float:
|
||||
state.json_write_string(key);
|
||||
state.json_write_number(val.numeric_value.float_value);
|
||||
} else if (val.type == mvt_sint) {
|
||||
break;
|
||||
case mvt_sint:
|
||||
state.json_write_string(key);
|
||||
state.json_write_signed(val.numeric_value.sint_value);
|
||||
} else if (val.type == mvt_uint) {
|
||||
break;
|
||||
case mvt_uint:
|
||||
state.json_write_string(key);
|
||||
state.json_write_unsigned(val.numeric_value.uint_value);
|
||||
} else if (val.type == mvt_bool) {
|
||||
break;
|
||||
case mvt_bool:
|
||||
state.json_write_string(key);
|
||||
state.json_write_bool(val.numeric_value.bool_value);
|
||||
} else if (val.type == mvt_null) {
|
||||
break;
|
||||
case mvt_null:
|
||||
state.json_write_string(key);
|
||||
state.json_write_null();
|
||||
} else {
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "Internal error: property with unknown type\n");
|
||||
exit(EXIT_IMPOSSIBLE);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user