mirror of
https://github.com/mapbox/tippecanoe.git
synced 2025-04-15 22:56:43 +00:00
Drop more points at each lower zoom level
This commit is contained in:
parent
7fc1c0cd24
commit
91eefcbd16
@ -14,6 +14,8 @@
|
||||
#include "jsonpull.h"
|
||||
#include "tile.h"
|
||||
|
||||
#define BASE_ZOOM 14
|
||||
|
||||
#define GEOM_POINT 0 /* array of positions */
|
||||
#define GEOM_MULTIPOINT 1 /* array of arrays of positions */
|
||||
#define GEOM_LINESTRING 2 /* array of arrays of positions */
|
||||
@ -303,7 +305,7 @@ void check(struct index *ix, long long n, char *metabase, unsigned *file_bbox) {
|
||||
fprintf(stderr, "\n");
|
||||
|
||||
int z;
|
||||
for (z = 14; z >= 0; z--) {
|
||||
for (z = BASE_ZOOM; z >= 0; z--) {
|
||||
struct index *i, *j = NULL;
|
||||
for (i = ix; i < ix + n && i != NULL; i = j) {
|
||||
unsigned wx, wy;
|
||||
@ -334,7 +336,7 @@ void check(struct index *ix, long long n, char *metabase, unsigned *file_bbox) {
|
||||
|
||||
printf("%d/%u/%u %x %x %lld to %lld\n", z, tx, ty, wx, wy, (long long)(i - ix), (long long)(j - ix));
|
||||
|
||||
write_tile(i, j, metabase, file_bbox, z, tx, ty, z == 14 ? 12 : 10);
|
||||
write_tile(i, j, metabase, file_bbox, z, tx, ty, z == BASE_ZOOM ? 12 : 10, BASE_ZOOM);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
20
tile.cc
20
tile.cc
@ -6,6 +6,7 @@
|
||||
#include <zlib.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <math.h>
|
||||
#include "vector_tile.pb.h"
|
||||
|
||||
extern "C" {
|
||||
@ -121,7 +122,7 @@ int draw(char **meta, mapnik::vector::tile_feature *feature, int z, unsigned tx,
|
||||
}
|
||||
|
||||
|
||||
void write_tile(struct index *start, struct index *end, char *metabase, unsigned *file_bbox, int z, unsigned tx, unsigned ty, int detail) {
|
||||
void write_tile(struct index *start, struct index *end, char *metabase, unsigned *file_bbox, int z, unsigned tx, unsigned ty, int detail, int basezoom) {
|
||||
GOOGLE_PROTOBUF_VERIFY_VERSION;
|
||||
|
||||
mapnik::vector::tile tile;
|
||||
@ -144,6 +145,13 @@ void write_tile(struct index *start, struct index *end, char *metabase, unsigned
|
||||
values.head = NULL;
|
||||
values.tail = NULL;
|
||||
|
||||
double interval = 1;
|
||||
double seq = 0;
|
||||
|
||||
if (z < basezoom) {
|
||||
interval = exp(log(2.5) * (basezoom - z));
|
||||
}
|
||||
|
||||
struct index *i;
|
||||
for (i = start; i < end; i++) {
|
||||
int t;
|
||||
@ -151,6 +159,16 @@ void write_tile(struct index *start, struct index *end, char *metabase, unsigned
|
||||
char *meta = metabase + i->fpos;
|
||||
deserialize_int(&meta, &t);
|
||||
|
||||
if (t == VT_POINT) {
|
||||
seq++;
|
||||
|
||||
if (seq >= 0) {
|
||||
seq -= interval;
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (t == VT_POINT || draw(&meta, NULL, z, tx, ty, detail)) {
|
||||
meta = metabase + i->fpos;
|
||||
deserialize_int(&meta, &t);
|
||||
|
2
tile.h
2
tile.h
@ -47,4 +47,4 @@ struct index {
|
||||
};
|
||||
|
||||
|
||||
void write_tile(struct index *start, struct index *end, char *metabase, unsigned *file_bbox, int z, unsigned x, unsigned y, int detail);
|
||||
void write_tile(struct index *start, struct index *end, char *metabase, unsigned *file_bbox, int z, unsigned x, unsigned y, int detail, int basezoom);
|
||||
|
Loading…
x
Reference in New Issue
Block a user