diff --git a/geojson.c b/geojson.c index d285f304..3f15c15e 100644 --- a/geojson.c +++ b/geojson.c @@ -381,7 +381,6 @@ void read_json(FILE *f, char *fname, char *layername, int maxzoom, int minzoom, unsigned bbox[] = { UINT_MAX, UINT_MAX, 0, 0 }; - serialize_int(metafile, mb_geometry[t], &fpos, fname, jp); parse_geometry(t, coordinates, bbox, &fpos, metafile, VT_MOVETO, fname, jp); serialize_int(metafile, VT_END, &fpos, fname, jp); @@ -467,6 +466,7 @@ void read_json(FILE *f, char *fname, char *layername, int maxzoom, int minzoom, ix.index = encode(x << (32 - z), y << (32 - z)); } ix.fpos = start; + ix.type = mb_geometry[t]; ix.maxzoom = z; fwrite_check(&ix, sizeof(struct index), 1, indexfile, fname, jp); } diff --git a/tile.cc b/tile.cc index 0fc98f7a..1ed706fb 100644 --- a/tile.cc +++ b/tile.cc @@ -376,10 +376,7 @@ long long write_tile(struct index *start, struct index *end, char *metabase, uns } dup.insert(std::pair(i->fpos, 1)); - int t; - char *meta = metabase + i->fpos; - deserialize_int(&meta, &t); - + int t = i->type; if (t == VT_POINT) { seq++; @@ -390,6 +387,7 @@ long long write_tile(struct index *start, struct index *end, char *metabase, uns } } + char *meta = metabase + i->fpos; drawvec geom = decode_geometry(&meta, z, tx, ty, line_detail); bool reduced = false; diff --git a/tile.h b/tile.h index 06127652..9b29f8b0 100644 --- a/tile.h +++ b/tile.h @@ -19,8 +19,9 @@ struct pool_val *deserialize_string(char **f, struct pool *p, int type); struct index { unsigned long long index; - long long fpos : 56; + long long fpos : 48; int maxzoom : 8; + int type : 8; }; long long write_tile(struct index *start, struct index *end, char *metabase, unsigned *file_bbox, int z, unsigned x, unsigned y, int detail, int basezoom, struct pool *file_keys, char *layername, sqlite3 *outdb, double droprate, int buffer);