mirror of
https://github.com/mapbox/tippecanoe.git
synced 2025-04-19 00:06:59 +00:00
Trim away unused features and layers from sub-tiles
This commit is contained in:
parent
f9430a65ef
commit
6a27c19c6b
26
vt3.cpp
26
vt3.cpp
@ -114,7 +114,7 @@ static std::vector<mvt_geometry> remove_noop(std::vector<mvt_geometry> geom, std
|
||||
std::vector<mvt_geometry> out;
|
||||
|
||||
for (size_t i = 0; i < geom.size(); i++) {
|
||||
if (geom[i].op == mvt_moveto && i + 1 < geom.size() && geom[i + 1].op == mvt_moveto) {
|
||||
if (geom[i].op == mvt_moveto && (i + 1 >= geom.size() || geom[i + 1].op == mvt_moveto)) {
|
||||
if (geom[i].id != 0) {
|
||||
#if 0
|
||||
fprintf(stderr, "Removing a moveto with an id %ld\n", geom[i].id);
|
||||
@ -320,6 +320,24 @@ void split_feature(mvt_layer const &layer, mvt_feature const &feature, std::vect
|
||||
}
|
||||
}
|
||||
|
||||
void trim_tile(mvt_tile &tile) {
|
||||
for (ssize_t i = tile.layers.size() - 1; i >= 0; i--) {
|
||||
mvt_layer &layer = tile.layers[i];
|
||||
|
||||
for (ssize_t j = layer.features.size() - 1; j >= 0; j--) {
|
||||
mvt_feature &feature = layer.features[j];
|
||||
|
||||
if (feature.geometry.size() == 0) {
|
||||
layer.features.erase(layer.features.begin() + j);
|
||||
}
|
||||
}
|
||||
|
||||
if (layer.features.size() == 0) {
|
||||
tile.layers.erase(tile.layers.begin() + i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mvt_tile split_and_merge(mvt_tile tile, int tile_zoom) {
|
||||
// Features will be split into an NxN grid of sub-tiles,
|
||||
// to be merged back together at the end,
|
||||
@ -368,6 +386,12 @@ mvt_tile split_and_merge(mvt_tile tile, int tile_zoom) {
|
||||
|
||||
// Trim unused features from layers, layers from tiles
|
||||
|
||||
for (size_t x = 0; x < n; x++) {
|
||||
for (size_t y = 0; y < n; y++) {
|
||||
trim_tile(subtiles[x][y]);
|
||||
}
|
||||
}
|
||||
|
||||
// Write each tile to PBF
|
||||
// Decode each tile back from PBF
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user