- Speed up tile-join overzooming and make it use less memory, by not including empty child tiles in the enumeration
- Make tile-join distrust the source tilesets' metadata maxzoom and minzoom
- Add a special case in --detect-longitude-wraparound not to wrap around jumps of exactly 360°
- Fix a bug in --detect-longitude-wraparound when there are multiple rings
- Further improvements to tile-join speed
- Improve speed of overzooming in tile-join
- Further reduce memory usage of --no-simplification-of-shared-nodes by calculating the list of shared nodes globally using temporary files rather than in memory for each individual tile
- Make --no-simplification-of-shared-nodes behave for LineStrings as it does for Polygons, preventing simplification only at crossings, convergences, and divergences, not at every point along collinear segments
- Reduce memory usage of --no-simplification-of-shared-nodes for polygons
- Extend --no-simplification-of-shared-nodes to also simplify shared polygon borders consistently
- Fix tile-join crash when trying to join empty tilesets
- Add --no-tiny-polygon-reduction-at-maximum-zoom option
- Fix spurious reports of tiny polygons and 0-length LineStrings in "strategies"
- Add --extend-zooms-if-still-dropping-maximum option
- Add --overzoom option to tile-join
- Add tippecanoe-overzoom tool
- Allow --set-attribute to override an existing attribute value
- Add --preserve-point-density-threshold option to reduce blank areas of the map at low zooms
- Fix tile-join bug where use of --read-from would also accidentally enable --quiet
- Do more of line simplification in integer coordinates, to make behavior consistent across platforms
- Reduce excessive logging during pmtiles conversion
- Add --set-attribute option
- Accept JSON form of --accumulate-attribute
- Avoid crashing if there is a polygon ring with only one point
- Fix bugs in --no-simplification-of-shared-nodes
- Updated dockerfile (jtmiclat)
- Set build options to use C++-17 (james2432)
- Use std::fpclassify instead of plain fpclassify (james)
- Fix pmtiles warnings (bdon)
- Add
--include
/-y
option to tile-join
- Add --cluster-maxzoom option to limit zoom levels that receive clustering
- Add
point_count_abbreviated
attribute to clustered features, for consistency with supercluster - Makefile changes to support FreeBSD
- Add -r option to tile-join to provide a file containing a list of input files
- Add antimeridian_adjusted_bounds field to tileset metadata
- Remove the concept of "separate metadata." Features now always directly reference their keys and values rather than going through a second level of indirection.
- Limit the size of the string pool to 1/5 the size of memory, to prevent thrashing during feature ingestion.
- Avoid using writeable memory maps. Instead, explicitly copy data in and out of memory.
- Compress streams of features in the temporary files, to reduce disk usage and I/O latency
- Speed up feature dropping by removing unnecessary search for other small features
- Improve label placement to avoid placing labels in polygon holes
- Round coordinates instead of truncating them, for better precision when overzooming
- Don't guess an excessively large maxzoom when there is only one feature
- Set the base zoom for -Bg as part of the --smallest-maximum-zoom-guess logic
- Fix crash when using tile-join to join an empty pmtiles tileset
- Add pmtiles output format
- During tiling, limit the size of the statistics that are kept for -as-needed calculations, because they can get quite large for sources with hundreds of millions of features.
- Change tile hash function to fnv1a
- Report JSON object context on the same line as the error message
- Correct mbtiles inserts to use text instead of blob
- Add an internal data structure to represent tileset metadata
- Generate label points in a more straightforward checkerboard, and fewer of them at high zoom levels.
- Don't preflight each zoom level if one of the as-needed options is specified. Instead, go ahead and write out the tiles, and then clear out the zoom level for another try if necessary.
- Simplify geometry earlier when the in-memory representation of a tile gets large, to reduce peak memory usage
- Add --limit-tile-feature-count and --limit-tile-feature-count-at-maximum-zoom
- Coalesce small features only onto other small features with
--coalesce-smallest-as-needed
, never to large features - Clean coalesced-as-needed features before simplifying them, to improve simplification quality
- Add
--drop-denser
option to drop points in dense clusters in preference to those in sparse areas.
- Change sqlite3 schema to deduplicate identical tiles
- Limit guessed maxzoom to avoid spending too many tiles on polygon fill
- Upgrade flatbuffers version
- Do label generation after simplification, not before.
- Add an option to generate label points in place of polygons
- Add --order-smallest-first and --order-largest-first options
- When tiny polygons are being aggregated into dust, keep the attributes of the largest.
- Improve precision of polygon ring area calculations
- Add the option to use a different simplification level at maxzoom
- Add the option to use the Visvalingam simplification algorithm
- Update tests that should have been updated in 2.6.2
- Fix crash in tile-join caused by wrong-way comparison
- Stop adding features to a tile if it can't possibly work, to limit memory use
- Add --integer and --fraction options to tippecanoe-decode
- Carry
strategies
field from tileset metadata through tile-join
- Upgrade protozero to version 1.7.1
- Add another drop rate guessing options, from the same metrics -zg uses
- Reduce maxzooms being guessed a little:
- Use 1.5 standard deviations, not 2, as the minimum distinguishable
- Give overlapping polygons and linestrings more distinct indices
- Add an option to add extra detail at maxzoom that does not factor into guessing
- Restore the intended behavior that tiny polygons don't get further simplified
- Add an option to use single-precision floating point in tiles
- Improve polygon simplification by choosing a better start/end point
- Sort attribute values in tiles to make them compress a little better
- Fix dropping of "largest" points when there are duplicate points
- Add an option to prevent guessing a basezoom higher than the maxzoom
- Add --order-by and --order-descending options
- Accept tilestats limiting options in tile-join, not just tippecanoe
- Change maxzoom guessing to take into account the standard deviation of the distances between features, so data with tight clusters will choose a higher maxzoom
- Add --smallest-maximum-zoom-guess to guess maxzoom starting at some minimum
- Track the desired tile size (the maximum size if no features were dropped) in each zoom level too.
- Drop and coalesce points too as part of smallest-as-needed dropping and coalescing
- Keep statistics in the tileset metadata of what tile size reduction strategies were used at each zoom level
- Reduce memory consumption when parsing large JSON objects
- Don't exit with an error if free disk space can't be determined
- Add barebones support for FlatGeobuf input files
- Update Wagyu to version 0.5.0
- Fix calculation of mean when accumulating attributes in clusters
- Fix crash when there are null entries in the metadata table
- Fix line numbers in GeoJSON feature parsing error messages
- Be careful to avoid undefined behavior from shifting negative numbers
- Add an option to keep intersection nodes from being simplified away
- Be more consistent about when longitudes beyond 180 are allowed. Now if the entire feature is beyond 180, it will still appear.
- Don't run shell filters if the current zoom is below the minzoom
- Fix -Z and -z for tile directories in tile-join and tippecanoe-decode
- Return a successful error status for --help and --version
- Record the command line options in the tileset metadata
- MultiLineStrings were previously ignored in Geobuf input
- Accept .mvt as well as .pbf in directories of tiles
- Allow tippecanoe-decode and tile-join of directories with no metadata
- Don't let attribute exclusion apply to the attribute that has been specified to become the feature ID
- Fix a bug that disallowed a per-feature minzoom of 0
- Limit tile detail to 30 and buffer size to 127 to prevent coordinate delta overflow in vector tiles.
- Better error message if the output tileset already exists
- Point features may now be coalesced into MultiPoint features with --coalesce.
- Add --hilbert option to put features in Hilbert Curve sequence
- Make it an error, not a warning, to have missing coordinates for a point
- Use less memory on lines and polygons that are too small for the tile
- Fix coordinate rounding problem that was causing --grid-low-zooms grids to be lost at low zooms if the original polygons were not aligned to tile boundaries
- Ignore leading zeroes when converting string attributes to feature IDs
- Add an option to convert stringified number feature IDs to numbers
- Add an option to use a specified feature attribute as the feature ID
- Warn in tile-join if tilesets being joined have inconsistent maxzooms
- Fix null pointer crash when reading filter output that does not tag features with their extent
- Add
--clip-bounding-box
option to clip input geometry
- Fix a bug that allowed coalescing of features with mismatched attributes if they had been passed through a shell prefilter
- Create the output tile directory even if there are no valid features
- Issue an error message in tile-join if minzoom is greater than maxzoom
- Add options to change the tilestats limits
- Keep tile-join from generating a tileset name longer than 255 characters
- Fix the missing filename in JSON parsing warning messages
- Don't accept anything inside another JSON object's properties as a feature or geometry of its own.
- Add --exclude-all to tile-join
- Upgrade Wagyu to version 0.4.3
- Take cluster distance into account when guessing a maxzoom
- Features within the z0 tile buffer of the antimeridian (not only those that cross it) are duplicated on both sides.
- Add an option to automatically assign ids to features
- Don't guess a higher maxzoom than is allowed for manual selection
- Ensure that per-feature minzoom and maxzoom are integers
- Report compression errors in tippecanoe-decode
- Add the ability to specify the file format with -L{"format":"…"}
- Add an option to treat empty CSV columns as nulls, not empty strings
- Add a filter extension to allow filtering individual attributes
- Include a generator field in tileset metadata with the Tippecanoe version
- Be careful to remove null attributes from prefilter/postfilter output
- Add --use-source-polygon-winding and --reverse-source-polygon-winding
- Add the option to specify layer file, name, and description as JSON
- Add the option to specify the description for attributes in the tileset metadata
- In CSV input, a trailing comma now counts as a trailing empty field
- In tippecanoe-json-tool, an empty CSV field is now an empty string, not null (for consistency with tile-join)
- Explicitly check for infinite and not-a-number input coordinates
- Directly support gzipped GeoJSON as input files
- Fix thread safety issues related to the out-of-disk-space checker
- --extend-zooms-if-still-dropping now also extends zooms if features are dropped by --force-feature-limit
- Use an exit status of 100 if some zoom levels were successfully written but not all zoom levels could be tiled.
- Allow filtering features by zoom level in conditional expressions
- Lines in CSV input with empty geometry columns will be ignored
- Check integrity of sqlite3 file before decoding or tile-joining
- Always include tile and layer in tippecanoe-decode, fixing corrupt JSON.
- Clean up writing of JSON in general.
- Add --progress-interval setting to reduce progress indicator frequency
- Make clusters look better by averaging locations of clustered points
- Add --accumulate-attribute to keep attributes of dropped, coalesced, or clustered features
- Make sure numeric command line arguments are actually numbers
- Don't coalesce features whose non-string-pool attributes don't match
- Add an option to produce only a single tile
- Retain non-ASCII characters in layernames generated from filenames
- Remember to close input files after reading them
- Add --coalesce-fraction-as-needed and --coalesce-densest-as-needed
- Report distances in both feet and meters
- Fix opportunities for integer overflow and out-of-bounds references
- Add --cluster-densest-as-needed to cluster features
- Add --maximum-tile-features to set the maximum number of features in a tile
- Support CSV point input
- Don't coalesce features that have different IDs but are otherwise identical
- Remove the 700-point limit on coalesced features, since polygon merging is no longer a performance problem
- Clean up duplicated code for reading tiles from a directory
- Tippecanoe-decode can decode directories of tiles, not just mbtiles
- The --allow-existing option works on directories of tiles
- Trim .geojson, not just .json, when making layer names from filenames
- Fix a potential null pointer when parsing GeoJSON with bare geometries
- Fix a bug that could cause the wrong features to be coalesced when input was parsed in parallel
- Add tippecanoe-json-tool for sorting and joining GeoJSON files
- Fix problem where --detect-shared-borders could simplify polygons away
- Attach --coalesce-smallest-as-needed leftovers to the last feature, not the first
- Fix overflow when iterating through 0-length lists backwards
- Add an option to quiet the progress indicator but not warnings
- Enable more compiler warnings and fix related problems
- Be more careful about checking for overflow when parsing numbers
- Support UTF-16 surrogate pairs in JSON strings
- Support arbitrarily long lines in CSV files.
- Treat CSV fields as numbers only if they follow JSON number syntax
- Array bounds bug fix in binary to decimal conversion library
- Guard against impossible coordinates when decoding tilesets
- Make sure to encode tile-joined integers as ints, not doubles
- Add tile-join option to rename layers
Fix error when parsing attributes with empty-string keys
- Add --coalesce-smallest-as-needed strategy for reducing tile sizes
- Add --stats option to tipppecanoe-decode
- Limit the size and depth of the string pool for better performance
- Add feature filters using the Mapbox GL Style Specification filter syntax
- Add input support for Geobuf file format
- Add better diagnostics for NaN or Infinity in input JSON
- Fix tilestats generation when long string attribute values are elided
- Add option not to produce tilestats
- Add tile-join options to select zoom levels to copy
- Add options to filter each tile's contents through a shell pipeline
- Generate layer, feature, and attribute statistics as part of tileset metadata
- Close mbtiles file properly when there are no valid features in the input
- Add long options to tippecanoe-decode and tile-join. Add --quiet to tile-join.
- Upgrade protozero to version 1.5.2
- Ignore UTF-8 byte order mark if present
- Add an option to increase maxzoom if features are still being dropped
- Tile-join can merge and create directories, not only mbtiles
- Maxzoom guessing (-zg) takes into account resolution within each feature
- Fix crash with very long (>128K) attribute values
- Only warn once about invalid polygons in tippecanoe-decode
- Fix compression of tiles in tile-join
- Calculate the tileset bounding box in tile-join from the tile boundaries
- Enforce polygon winding and closure rules in tippecanoe-decode
- Add tile-join options to set name, attribution, description
- Preserve the tileset names from the source mbtiles in tile-join
- Fix RFC 8142 support: Don't try to split all memory mapped files
- Support RFC 8142 GeoJSON text sequences
- Organize usage output the same way as in the README
- Add -T option to coerce the types of feature attributes
- Add -zg option to guess an appropriate maxzoom
- Clean up JSON parsing at the end of each FeatureCollection to avoid running out of memory
- Add tile-join options to include or exclude specific layers
- Add --output-to-directory and --no-tile-compression options
- Add --description option for mbtiles metadata
- Clean up some utility functions
- Add --detect-longitude-wraparound option
- Stop processing higher zooms when a feature reaches its explicit maxzoom tag
- Remove polygon splitting, since polygon cleaning is now fast enough
- Add a tippecanoe-decode option to specify layer names
- Clean up layer name handling to fix layer merging crash
- Fix some code that could sometimes try to divide by zero
- Add check for $TIPPECANOE_MAX_THREADS environmental variable
- Fix area of placeholders for degenerate multipolygons
- Upgrade Wagyu to 0.3.0; downgrade C++ requirement to C++ 11
- Add -z and -Z options to tippecanoe-decode
- Use Wagyu's quick_lr_clip() instead of a separate implementation
- Upgrade Wagyu to bfbf2893
- Associate attributes with the right layer when explicitly tagged
- Choose a deeper starting tile than 0/0/0 if there is one that contains all the features
- Switch from Clipper to Wagyu for polygon topology correction
- Dot-dropping with -r/-B doesn't apply if there is a per-feature minzoom tag
- Round coordinates in low-zoom grid math instead of truncating
- Add --grid-low-zooms option to snap low-zoom features to the tile grid
- Stop --drop-smallest-as-needed from always dropping all points
- New strategies for making tiles smaller, with uniform behavior across the whole zoom level: --increase-gamma-as-needed, --drop-densest-as-needed, --drop-fraction-as-needed, --drop-smallest-as-needed.
- Option to specify the maximum tile size in bytes
- Option to turn off tiny polygon reduction
- Better error checking in JSON parsing
- Make -B/-r feature-dropping consistent between tiles and zoom levels
- Add --detect-shared-borders option for better polygon simplification
- Enforce that string feature attributes must be encoded as UTF-8
- Whitespace after commas in tile-join .csv input is no longer significant
- Tile-join is multithreaded and can merge multiple vector mbtiles files together
- Add the ability to specify layer names within the GeoJSON input
- Don't try to revive a placeholder for a degenerate polygon that had negative area
- Pass feature IDs through in tile-join
- Clean up parsing and serialization. Provide some context with parsing errors.
- Fix the spelling of the --preserve-input-order option
- Support the "id" field of GeoJSON objects and vector tile features
- Fix error reports when reading from an empty file with parallel input
- Add an option to vary the level of line and polygon simplification
- Be careful not to produce an empty tile if there was a feature with empty geometry.
- Be even more careful not to produce features with empty geometry
- Fix double-counted progress in the progress indicator
- Add ability to specify a projection to tippecanoe-decode
- Fix incorrect tile layer version numbers in tile-join output
- Fix a tile-join bug that would retain fields that were supposed to be excluded
- Add minimal support for alternate input projections (EPSG:3857).
- Add an option to calculate the density of features as a feature attribute
- Keep metadata together with geometry for features that don't span many tiles, to avoid extra memory load from indexing into a separate metadata file
- Reduce the size of critical data structures to reduce dynamic memory use
- Let zoom level 0 have just as much extent and buffer as any other zoom
- Fix tippecanoe-decode bug that would sometimes show outer rings as inner
- Don't let polygons with nonzero area disappear during cleaning
- Internal code cleanup
- Update Clipper to fix potential crash
- Make better use of C++ standard libraries
- Convert C source files to C++
- Upgrade Clipper to fix potential crashes and improve polygon topology
- Switch to protozero as the library for reading and writing protocol buffers
- Add option not to clip features
- Clean up polygons after coalescing, if necessary
- Don't trust the OS so much about how many files can be open
- Limit the size of the parallel parsing streaming input buffer
- Add an option to set the tileset's attribution
- Fix a line simplification crash when a segment degenerates to a single point
- Warn if temporary disk space starts to run low
- Add --drop-polygons to drop a fraction of polygons by zoom level
- Only complain once about failing to clean polygons
- Use an on-disk radix sort for the index to control virtual memory thrashing when the geometry and index are too large to fit in memory
- Fix build problem (wrong spelling of long long max/min constants)
- Add an option to give specific layer names to specific input files
- Remove temporary files that were accidentally left behind
- Be more careful about checking memory allocations and array bounds
- Add GNU-style long options
- Tippecanoe-decode can decode .pbf files that aren't in an .mbtiles container
- Don't get stuck in a loop trying to split up very small, very complicated polygons
- Increase maximum tile size for tippecanoe-decode
- Incorporate Mapnik's Clipper upgrades for consistent results between Mac and Linux
- Claim vector tile version 2 in mbtiles
- Split too-complex polygons into multiple features
- Bug fixes to maxzoom, and more tests
- There are tests that can be run with "make test".
- Feature properties that are arrays or hashes get stringified rather than being left out with a warning.
- Make clipping behavior with no buffer consistent with Mapnik. Features that are exactly on a tile boundary appear in both tiles.
- Parallel processing of input with -P works with streamed input too
- Error handling if unsupported options given to -p or -a
- Fix crashing bug when layers are being merged with -l
- Add an option to do line simplification only at zooms below maxzoom
- Make sure line simplification matches on opposite sides of a tile boundary
- Use multiple threads for line simplification and polygon cleaning
- Add option of parallelized input when reading from a line-delimited file
- Fix internal error when number of CPUs is not a power of 2
- Add missing #include
- Base zoom for dot-dropping can be specified independently of maxzoom for tiling.
- Tippecanoe can calculate a base zoom and drop rate for you.
- Encode numeric attributes as integers instead of floating point if possible
- Bug fix for problem that would occasionally produce empty point geometries
- More bug fixes for polygon generation
- Features that cross the antimeridian are split into two parts instead of being partially lost off the edge
- More polygon correctness
- Query the system for the number of available CPUs instead of guessing
- Merge input files into one layer if a layer name is specified
- Document and install tippecanoe-enumerate and tippecanoe-decode
- Tile generation is multithreaded to take advantage of multiple CPUs
- More compact data representation reduces memory usage and improves speed
- Polygon clipping uses Clipper and makes sure interior and exterior rings are distinguished by winding order
- Individual GeoJSON features can specify their own minzoom and maxzoom
- New
tile-join
utility can add new properties from a CSV file to an existing tileset - Feature coalescing, line-reversing, and reordering by attribute are now options, not defaults
- Output of
decode
utility is now in GeoJSON format - Tile generation with a minzoom spends less time on unused lower zoom levels
- Bare geometries without a Feature wrapper are accepted
- Default tile resolution is 4096 units at all zooms since renderers assume it
- Switched to top-down rendering, yielding performance improvements
- Add a dot-density gamma feature to thin out especially dense clusters
- Add support for multiple layers, making it possible to include more than one GeoJSON featurecollection in a map. #29
- Added flags that let you optionally avoid simplifying lines, restricting maximum tile sizes, and coalescing features #30
- Added check that minimum zoom level is less than maximum zoom level
- Added
-v
flag to check tippecanoe's version