mirror of
https://github.com/felt/tippecanoe.git
synced 2026-10-02 16:35:40 +02:00
* Add a way to run tippecanoe single-threaded for profiling * Do less work when the tilestats sample values list is already full * Save a copy when retrieving the attribute key * Fewer atomic operations * Move string hashing from mbtiles to text * Only do approximate attribute deduplication when writing tiles * Feature dropping tests are sensitive to exact tile size * All tile creators now create a string pool for the tile * Features clipped away to nothing should not participate in that tile * Revert "Only do approximate attribute deduplication when writing tiles" This reverts commitc42b34b498. * Also revert the related test changes * Revert "Revert "Only do approximate attribute deduplication when writing tiles"" This reverts commit18509876c3. * Be more specific about the string hash function * Use fnv1a instead of std::hash for everything * Reduce the chance of hash collisions * Stick a hash search on the front of the tree search in addpool * Eliminate repeated hashing of the same string * Switch instead of ifs in json parsing * A few more cases to populate the hash in addpool * Store the hash in the tree instead of recalculating * Add explanatory comment for mysterious argument * Fewer copies in attribute stringification * Clean up ancient weirdness in JSON attribute stringification * More serial_val cleanup * Pass a serial_feature to rewrite instead of many broken-down arguments * Get rid of the multiple geometries within `partial` * Revert "Pass a serial_feature to rewrite instead of many broken-down arguments" This reverts commit6f4ab9b725. * Goodbye, struct coalesce * Revert "Features clipped away to nothing should not participate in that tile" This reverts commit124462fbdc. * Migrating fields from partial to serial_feature * Name reconciliation between serial_feature and partial * Replace struct partial with an augmented serial_feature * Fix some overzealous search-and-replace renaming * Don't say struct so often * Remove more of the former partial construction * Commenting and cleaning up * Trying again to avoid all these arguments to rewrite * I swear I did this same thing before and it didn't work. * More rewrite cleanup * Exile --detect-shared-borders to its own file * Add missing headers * More commenting and cleanup * More comments * Sprinkle consts around * Emplacing and std::moving * More cleanup * That shouldn't have worked after a std::move * Don't need to allocate memory to compare keys * Reduce use of the global string pool in tiling * Another avoidable mvt_value construction * Further reduction to explicit string pool passing * These reverses are no longer optimizations * These layernames can all be references * Don't drag an unused layername string around with every feature * Heed a compiler warning about potential buffer overflow * Fix my confusion about which feature's string pool is relevant * Avoid some unnecessary allocations in attribute accumulation * Maybe faster serialization? * Eliminate a comparison * Do the same here * Save a couple of allocations when parsing numbers in JSON * Immediately assign features to layers instead of subdividing later * Maintain tilestats for tippecanoe:retain_points_multiplier_sequence * Crunch out more duplicate attribute values when writing out the tile * Do tilestats for tippecanoe:retain_points_multiplier_first too * Shell filters need to be real threads, even if nothing else does * Simplify tippecanoe_minzoom/maxzoom representation * Update version and changelog
82 lines
2.6 KiB
C++
82 lines
2.6 KiB
C++
#ifndef MBTILES_HPP
|
|
#define MBTILES_HPP
|
|
|
|
#include <math.h>
|
|
#include <map>
|
|
#include "mvt.hpp"
|
|
|
|
extern size_t max_tilestats_attributes;
|
|
extern size_t max_tilestats_sample_values;
|
|
extern size_t max_tilestats_values;
|
|
|
|
struct tilestat {
|
|
std::vector<serial_val> sample_values = std::vector<serial_val>(); // sorted
|
|
double min = INFINITY;
|
|
double max = -INFINITY;
|
|
int type = 0;
|
|
};
|
|
|
|
struct layermap_entry {
|
|
size_t id = 0;
|
|
std::map<std::string, tilestat> tilestats{};
|
|
int minzoom = 0;
|
|
int maxzoom = 0;
|
|
std::string description = "";
|
|
|
|
size_t points = 0;
|
|
size_t lines = 0;
|
|
size_t polygons = 0;
|
|
size_t retain = 0; // keep for tilestats, even if no features directly here
|
|
|
|
layermap_entry(size_t _id) {
|
|
id = _id;
|
|
}
|
|
};
|
|
|
|
struct metadata {
|
|
std::string name;
|
|
std::string description;
|
|
int version;
|
|
std::string type;
|
|
std::string format;
|
|
|
|
int minzoom;
|
|
int maxzoom;
|
|
|
|
double minlat, minlon, maxlat, maxlon;
|
|
double minlat2, minlon2, maxlat2, maxlon2; // antimeridian-aware
|
|
|
|
double center_lon, center_lat;
|
|
int center_z;
|
|
|
|
std::string attribution; // not written if empty
|
|
|
|
std::string generator;
|
|
std::string generator_options;
|
|
|
|
std::string strategies_json; // not written if empty
|
|
|
|
std::string vector_layers_json;
|
|
std::string tilestats_json;
|
|
std::string decisions_json;
|
|
};
|
|
|
|
#include "tile.hpp"
|
|
|
|
sqlite3 *mbtiles_open(char *dbname, char **argv, int forcetable);
|
|
|
|
void mbtiles_write_tile(sqlite3 *outdb, int z, int tx, int ty, const char *data, int size);
|
|
void mbtiles_erase_zoom(sqlite3 *outdb, int z);
|
|
|
|
metadata make_metadata(const char *fname, int minzoom, int maxzoom, double minlat, double minlon, double maxlat, double maxlon, double minlat2, double minlon2, double maxlat2, double maxlon2, double midlat, double midlon, const char *attribution, std::map<std::string, layermap_entry> const &layermap, bool vector, const char *description, bool do_tilestats, std::map<std::string, std::string> const &attribute_descriptions, std::string const &program, std::string const &commandline, std::vector<strategy> const &strategies, int basezoom, double droprate, int retain_points_multiplier);
|
|
void mbtiles_write_metadata(sqlite3 *db, const metadata &m, bool forcetable);
|
|
|
|
void mbtiles_close(sqlite3 *outdb, const char *pgm);
|
|
|
|
std::map<std::string, layermap_entry> merge_layermaps(std::vector<std::map<std::string, layermap_entry> > const &maps);
|
|
std::map<std::string, layermap_entry> merge_layermaps(std::vector<std::map<std::string, layermap_entry> > const &maps, bool trunc);
|
|
|
|
void add_to_tilestats(std::map<std::string, tilestat> &tilestats, std::string const &layername, serial_val const &val);
|
|
|
|
#endif
|