Gonna get it right this time

This commit is contained in:
Erica Fischer
2024-09-06 12:57:31 -07:00
parent 8232993342
commit 2b54558257
10 changed files with 3642 additions and 19 deletions
+8
View File
@@ -371,6 +371,14 @@ overzoom-test: tippecanoe-overzoom
./tippecanoe-decode tests/pbf/0-0-0-pop-2-0-1.pbf.out 2 0 1 > tests/pbf/0-0-0-pop-2-0-1.pbf.out.json.check
cmp tests/pbf/0-0-0-pop-2-0-1.pbf.out.json.check tests/pbf/0-0-0-pop-2-0-1.pbf.out.json
rm tests/pbf/0-0-0-pop-2-0-1.pbf.out tests/pbf/0-0-0-pop-2-0-1.pbf.out.json.check
./tippecanoe-overzoom -o tests/pbf/0-0-0-pop-1-1-0.pbf.out --assign-to-bins tests/pbf/h3-1-1-0.geojson tests/pbf/0-0-0.pbf 1/1/0 1/1/0
./tippecanoe-decode tests/pbf/0-0-0-pop-1-1-0.pbf.out 1 1 0 > tests/pbf/0-0-0-pop-1-1-0.pbf.out.json.check
cmp tests/pbf/0-0-0-pop-1-1-0.pbf.out.json.check tests/pbf/0-0-0-pop-1-1-0.pbf.out.json
rm tests/pbf/0-0-0-pop-1-1-0.pbf.out tests/pbf/0-0-0-pop-1-1-0.pbf.out.json.check
./tippecanoe-overzoom -o tests/pbf/0-0-0-pop-0-0-0.pbf.out --assign-to-bins tests/pbf/h3-0-0-0.geojson tests/pbf/0-0-0.pbf 0/0/0 0/0/0
./tippecanoe-decode tests/pbf/0-0-0-pop-0-0-0.pbf.out 0 0 0 > tests/pbf/0-0-0-pop-0-0-0.pbf.out.json.check
cmp tests/pbf/0-0-0-pop-0-0-0.pbf.out.json.check tests/pbf/0-0-0-pop-0-0-0.pbf.out.json
rm tests/pbf/0-0-0-pop-0-0-0.pbf.out tests/pbf/0-0-0-pop-0-0-0.pbf.out.json.check
join-test: tippecanoe tippecanoe-decode tile-join
./tippecanoe -q -f -z12 -o tests/join-population/tabblock_06001420.mbtiles -YALAND10:'Land area' -L'{"file": "tests/join-population/tabblock_06001420.json", "description": "population"}'
+1 -1
View File
@@ -197,7 +197,7 @@ int main(int argc, char **argv) {
exit(EXIT_OPEN);
}
bins = parse_layers(f, nz, nx, ny, 1LL << detail);
bins = parse_layers(f, nz, nx, ny, 1LL << detail, true);
fclose(f);
}
+1 -1
View File
@@ -82,7 +82,7 @@ std::vector<mvt_layer> parse_layers(int fd, int z, unsigned x, unsigned y, std::
exit(EXIT_OPEN);
}
std::vector<mvt_layer> out = parse_layers(f, z, x, y, extent);
std::vector<mvt_layer> out = parse_layers(f, z, x, y, extent, true);
if (fclose(f) != 0) {
perror("fclose postfilter output");
+16 -16
View File
@@ -178,7 +178,7 @@ static std::vector<mvt_geometry> to_feature(drawvec &geom) {
return out;
}
std::vector<mvt_layer> parse_layers(FILE *fp, int z, unsigned x, unsigned y, int extent) {
std::vector<mvt_layer> parse_layers(FILE *fp, int z, unsigned x, unsigned y, int extent, bool fix_longitudes) {
std::map<std::string, mvt_layer> ret;
std::shared_ptr<std::string> tile_stringpool = std::make_shared<std::string>();
@@ -282,26 +282,26 @@ std::vector<mvt_layer> parse_layers(FILE *fp, int z, unsigned x, unsigned y, int
dv = fix_polygon(dv, false, false);
}
if (z > 0) {
// handle longitude wraparound
//
// this is supposed to be data for a single tile,
// so any jump from the left hand side of the world
// to the right side, or vice versa, is unexpected,
// so move it to the other side.
//
// (unless this is z0, in which case it is still
// reasonable to have a big, world-spanning polygon,
// and I'm not sure what to do about that.)
// handle longitude wraparound
//
// this is supposed to be data for a single tile,
// so any jump from the left hand side of the world
// to the right side, or vice versa, is unexpected,
// so move it to the other side.
//
// (unless this is z0, in which case it is still
// reasonable to have a big, world-spanning polygon,
// and I'm not sure what to do about that.)
if (fix_longitudes) {
for (size_t i = 0; i < dv.size(); i++) {
if (i > 0) {
if ((dv[0].x < (1LL << 31)) &&
(dv[i].x > (1LL << 31))) {
if ((dv[0].x < (1LL << 30)) &&
(dv[i].x > 3 * (1LL << 30))) {
dv[i].x -= 1LL << 32;
}
if ((dv[0].x > (1LL << 31)) &&
(dv[i].x < (1LL << 31))) {
if ((dv[0].x > 3 * (1LL << 30)) &&
(dv[i].x < (1LL << 30))) {
dv[i].x += 1LL << 32;
}
}
+1 -1
View File
@@ -12,6 +12,6 @@ extern int mb_geometry[GEOM_TYPES];
void json_context(json_object *j);
void parse_geometry(int t, json_object *j, drawvec &out, int op, const char *fname, int line, json_object *feature);
std::vector<mvt_layer> parse_layers(FILE *fp, int z, unsigned x, unsigned y, int extent);
std::vector<mvt_layer> parse_layers(FILE *fp, int z, unsigned x, unsigned y, int extent, bool fix_longitudes);
serial_val stringify_value(json_object *value, const char *reading, int line, json_object *feature);
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long