From c8a1b082e0a9715e63e63526f3838664c73e1720 Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Mon, 10 Oct 2016 15:31:09 -0700 Subject: [PATCH] Don't serialize the per-feature minzoom until geometry merging time --- geojson.cpp | 2 +- main.cpp | 1 + serial.cpp | 6 ++++-- serial.hpp | 2 +- tile.cpp | 2 +- 5 files changed, 8 insertions(+), 5 deletions(-) diff --git a/geojson.cpp b/geojson.cpp index e1340a3b..fb74b166 100644 --- a/geojson.cpp +++ b/geojson.cpp @@ -424,7 +424,7 @@ int serialize_geometry(json_object *geometry, json_object *properties, json_obje } } - serialize_feature(geomfile, &sf, geompos, fname, *initial_x >> geometry_scale, *initial_y >> geometry_scale); + serialize_feature(geomfile, &sf, geompos, fname, *initial_x >> geometry_scale, *initial_y >> geometry_scale, false); struct index index; index.start = geomstart; diff --git a/main.cpp b/main.cpp index 8985dce2..d30dac7d 100644 --- a/main.cpp +++ b/main.cpp @@ -223,6 +223,7 @@ static void merge(struct mergelist *merges, int nmerges, unsigned char *map, FIL struct index *ix = (struct index *) (map + head->start); fwrite_check(geom_map + ix->start, 1, ix->end - ix->start, geom_out, "merge geometry"); *geompos += ix->end - ix->start; + serialize_byte(geom_out, 0, geompos, "merge geometry"); // Count this as an 75%-accomplishment, since we already 25%-counted it *progress += (ix->end - ix->start) * 3 / 4; diff --git a/serial.cpp b/serial.cpp index fa8cc385..fa791861 100644 --- a/serial.cpp +++ b/serial.cpp @@ -174,7 +174,7 @@ static void write_geometry(drawvec const &dv, long long *fpos, FILE *out, const } } -void serialize_feature(FILE *geomfile, serial_feature *sf, long long *geompos, const char *fname, long long wx, long long wy) { +void serialize_feature(FILE *geomfile, serial_feature *sf, long long *geompos, const char *fname, long long wx, long long wy, bool include_minzoom) { serialize_byte(geomfile, sf->t, geompos, fname); serialize_long_long(geomfile, sf->seq, geompos, fname); @@ -207,5 +207,7 @@ void serialize_feature(FILE *geomfile, serial_feature *sf, long long *geompos, c serialize_long_long(geomfile, sf->values[i], geompos, fname); } - serialize_byte(geomfile, sf->feature_minzoom, geompos, fname); + if (include_minzoom) { + serialize_byte(geomfile, sf->feature_minzoom, geompos, fname); + } } diff --git a/serial.hpp b/serial.hpp index e8ca1e79..f1f289fa 100644 --- a/serial.hpp +++ b/serial.hpp @@ -44,4 +44,4 @@ struct serial_feature { long long metapos; }; -void serialize_feature(FILE *geomfile, serial_feature *sf, long long *geompos, const char *fname, long long wx, long long wy); +void serialize_feature(FILE *geomfile, serial_feature *sf, long long *geompos, const char *fname, long long wx, long long wy, bool include_minzoom); diff --git a/tile.cpp b/tile.cpp index 9465b79f..2c0fcf08 100644 --- a/tile.cpp +++ b/tile.cpp @@ -361,7 +361,7 @@ void rewrite(drawvec &geom, int z, int nextzoom, int maxzoom, long long *bbox, u } } - serialize_feature(geomfile[j], &sf, &geompos[j], fname, initial_x[segment] >> geometry_scale, initial_y[segment] >> geometry_scale); + serialize_feature(geomfile[j], &sf, &geompos[j], fname, initial_x[segment] >> geometry_scale, initial_y[segment] >> geometry_scale, true); } } }