mirror of
https://github.com/mapbox/tippecanoe.git
synced 2025-02-02 01:08:14 +00:00
Shrink the geometry by shaving off bits below the maxzoom tile resolution
This commit is contained in:
parent
a1d3ecf9bb
commit
a185073f0a
10
geojson.c
10
geojson.c
@ -26,6 +26,7 @@ int full_detail = -1;
|
||||
int min_detail = 7;
|
||||
|
||||
unsigned initial_x = 0, initial_y = 0;
|
||||
int geometry_scale = 0;
|
||||
int initialized = 0;
|
||||
|
||||
#define GEOM_POINT 0 /* array of positions */
|
||||
@ -164,8 +165,8 @@ void parse_geometry(int t, json_object *j, unsigned *bbox, long long *fpos, FILE
|
||||
}
|
||||
|
||||
serialize_byte(out, op, fpos, fname);
|
||||
serialize_long_long(out, x - *wx, fpos, fname);
|
||||
serialize_long_long(out, y - *wy, fpos, fname);
|
||||
serialize_long_long(out, (x >> geometry_scale) - (*wx >> geometry_scale), fpos, fname);
|
||||
serialize_long_long(out, (y >> geometry_scale) - (*wy >> geometry_scale), fpos, fname);
|
||||
*wx = x;
|
||||
*wy = y;
|
||||
} else {
|
||||
@ -494,7 +495,7 @@ int read_json(int argc, char **argv, char *fname, const char *layername, int max
|
||||
long long indexpos = 0;
|
||||
|
||||
unlink(metaname);
|
||||
unlink(poolname);
|
||||
//unlink(poolname);
|
||||
unlink(geomname);
|
||||
unlink(indexname);
|
||||
|
||||
@ -1182,6 +1183,9 @@ int main(int argc, char **argv) {
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
geometry_scale = 32 - (full_detail + maxzoom);
|
||||
printf("geometry scale is %d\n", geometry_scale);
|
||||
|
||||
if (outdir == NULL) {
|
||||
fprintf(stderr, "%s: must specify -o out.mbtiles\n", argv[0]);
|
||||
exit(EXIT_FAILURE);
|
||||
|
@ -41,8 +41,8 @@ drawvec decode_geometry(char **meta, int z, unsigned tx, unsigned ty, int detail
|
||||
deserialize_long_long(meta, &dx);
|
||||
deserialize_long_long(meta, &dy);
|
||||
|
||||
wx += dx;
|
||||
wy += dy;
|
||||
wx += dx << geometry_scale;
|
||||
wy += dy << geometry_scale;
|
||||
|
||||
long long wwx = wx;
|
||||
long long wwy = wy;
|
||||
|
4
tile.cc
4
tile.cc
@ -510,8 +510,8 @@ long long write_tile(char **geoms, char *metabase, char *stringpool, unsigned *f
|
||||
serialize_byte(geomfile[j], geom[u].op, &geompos[j], fname);
|
||||
|
||||
if (geom[u].op != VT_CLOSEPATH) {
|
||||
serialize_long_long(geomfile[j], geom[u].x + sx - wx, &geompos[j], fname);
|
||||
serialize_long_long(geomfile[j], geom[u].y + sy - wy, &geompos[j], fname);
|
||||
serialize_long_long(geomfile[j], ((geom[u].x + sx) >> geometry_scale) - (wx >> geometry_scale), &geompos[j], fname);
|
||||
serialize_long_long(geomfile[j], ((geom[u].y + sy) >> geometry_scale) - (wy >> geometry_scale), &geompos[j], fname);
|
||||
wx = geom[u].x + sx;
|
||||
wy = geom[u].y + sy;
|
||||
}
|
||||
|
1
tile.h
1
tile.h
@ -28,3 +28,4 @@ struct pool_val *deserialize_string(char **f, struct pool *p, int type);
|
||||
long long write_tile(char **geom, char *metabase, char *stringpool, unsigned *file_bbox, int z, unsigned x, unsigned y, int detail, int min_detail, int basezoom, struct pool **file_keys, char **layernames, sqlite3 *outdb, double droprate, int buffer, const char *fname, FILE *geomfile[4], int file_minzoom, int file_maxzoom, double todo, char *geomstart, long long along, double gamma, int nlayers, char *prevent);
|
||||
|
||||
extern unsigned initial_x, initial_y;
|
||||
extern int geometry_scale;
|
||||
|
Loading…
x
Reference in New Issue
Block a user