diff --git a/Makefile b/Makefile index 3968ed49..78959fc0 100644 --- a/Makefile +++ b/Makefile @@ -58,7 +58,7 @@ C = $(wildcard *.c) $(wildcard *.cpp) INCLUDES = -I/usr/local/include -I. LIBS = -L/usr/local/lib -tippecanoe: geojson.o jsonpull/jsonpull.o tile.o pool.o mbtiles.o geometry.o projection.o memfile.o mvt.o serial.o main.o text.o dirtiles.o pmtiles_file.o plugin.o read_json.o write_json.o geobuf.o flatgeobuf.o evaluator.o geocsv.o csv.o geojson-loop.o json_logger.o visvalingam.o compression.o clip.o sort.o +tippecanoe: geojson.o jsonpull/jsonpull.o tile.o pool.o mbtiles.o geometry.o projection.o memfile.o mvt.o serial.o main.o text.o dirtiles.o pmtiles_file.o plugin.o read_json.o write_json.o geobuf.o flatgeobuf.o evaluator.o geocsv.o csv.o geojson-loop.o json_logger.o visvalingam.o compression.o clip.o sort.o earcut.o $(CXX) $(PG) $(LIBS) $(FINAL_FLAGS) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) -lm -lz -lsqlite3 -lpthread tippecanoe-enumerate: enumerate.o diff --git a/geometry.hpp b/geometry.hpp index 5da7cdf3..41d86ee3 100644 --- a/geometry.hpp +++ b/geometry.hpp @@ -104,4 +104,6 @@ std::string overzoom(mvt_tile tile, int oz, int ox, int oy, int nz, int nx, int std::string overzoom(std::string s, int oz, int ox, int oy, int nz, int nx, int ny, int detail, int buffer, std::set const &keep, bool do_compress); +drawvec fix_by_triangulation(drawvec const &dv, int z, int detail); + #endif diff --git a/mapbox/geometry/earcut.hpp b/mapbox/geometry/earcut.hpp index a73ae87c..b98508f1 100644 --- a/mapbox/geometry/earcut.hpp +++ b/mapbox/geometry/earcut.hpp @@ -263,11 +263,8 @@ void Earcut::earcutLinked(Node* ear, int pass) { Node* prev; Node* next; - int iterations = 0; - // iterate through ears, slicing them one by one while (ear->prev != ear->next) { - iterations++; prev = ear->prev; next = ear->next; diff --git a/tile.cpp b/tile.cpp index d94b1493..33870f48 100644 --- a/tile.cpp +++ b/tile.cpp @@ -612,6 +612,12 @@ void *partial_feature_worker(void *v) { int out_detail = (*partials)[i].extra_detail; drawvec geom = (*partials)[i].geoms[0]; + + if (t == VT_POLYGON) { + geom = clean_or_clip_poly(geom, 0, 0, false, false); + fix_by_triangulation(geom, z, out_detail); + } + to_tile_scale(geom, z, out_detail); if (t == VT_POLYGON) {