mirror of
https://github.com/felt/tippecanoe.git
synced 2026-10-02 08:25:40 +02:00
Per-thread layermap will contain the file keys, not just a layer ID
This commit is contained in:
+4
-4
@@ -167,7 +167,7 @@ long long parse_geometry(int t, json_object *j, long long *bbox, drawvec &out, i
|
|||||||
return g;
|
return g;
|
||||||
}
|
}
|
||||||
|
|
||||||
int serialize_geometry(json_object *geometry, json_object *properties, json_object *id, const char *reading, int line, volatile long long *layer_seq, volatile long long *progress_seq, long long *metapos, long long *geompos, long long *indexpos, std::set<std::string> *exclude, std::set<std::string> *include, int exclude_all, FILE *metafile, FILE *geomfile, FILE *indexfile, struct memfile *poolfile, struct memfile *treefile, const char *fname, int basezoom, int layer, double droprate, long long *file_bbox, json_object *tippecanoe, int segment, int *initialized, unsigned *initial_x, unsigned *initial_y, struct reader *readers, std::set<type_and_string> *file_keys, int maxzoom, json_object *feature, std::map<std::string, int> *layermap) {
|
int serialize_geometry(json_object *geometry, json_object *properties, json_object *id, const char *reading, int line, volatile long long *layer_seq, volatile long long *progress_seq, long long *metapos, long long *geompos, long long *indexpos, std::set<std::string> *exclude, std::set<std::string> *include, int exclude_all, FILE *metafile, FILE *geomfile, FILE *indexfile, struct memfile *poolfile, struct memfile *treefile, const char *fname, int basezoom, int layer, double droprate, long long *file_bbox, json_object *tippecanoe, int segment, int *initialized, unsigned *initial_x, unsigned *initial_y, struct reader *readers, std::set<type_and_string> *file_keys, int maxzoom, json_object *feature, std::map<std::string, layermap_entry> *layermap) {
|
||||||
json_object *geometry_type = json_hash_get(geometry, "type");
|
json_object *geometry_type = json_hash_get(geometry, "type");
|
||||||
if (geometry_type == NULL) {
|
if (geometry_type == NULL) {
|
||||||
static int warned = 0;
|
static int warned = 0;
|
||||||
@@ -373,12 +373,12 @@ int serialize_geometry(json_object *geometry, json_object *properties, json_obje
|
|||||||
|
|
||||||
if (tippecanoe_layername.size() != 0) {
|
if (tippecanoe_layername.size() != 0) {
|
||||||
if (layermap->count(tippecanoe_layername) == 0) {
|
if (layermap->count(tippecanoe_layername) == 0) {
|
||||||
layermap->insert(std::pair<std::string, int>(tippecanoe_layername, layermap->size()));
|
layermap->insert(std::pair<std::string, layermap_entry>(tippecanoe_layername, layermap_entry(layermap->size())));
|
||||||
}
|
}
|
||||||
|
|
||||||
auto ai = layermap->find(tippecanoe_layername);
|
auto ai = layermap->find(tippecanoe_layername);
|
||||||
if (ai != layermap->end()) {
|
if (ai != layermap->end()) {
|
||||||
layer = ai->second;
|
layer = ai->second.id;
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "Internal error: can't find layer name %s\n", tippecanoe_layername.c_str());
|
fprintf(stderr, "Internal error: can't find layer name %s\n", tippecanoe_layername.c_str());
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
@@ -471,7 +471,7 @@ void check_crs(json_object *j, const char *reading) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void parse_json(json_pull *jp, const char *reading, volatile long long *layer_seq, volatile long long *progress_seq, long long *metapos, long long *geompos, long long *indexpos, std::set<std::string> *exclude, std::set<std::string> *include, int exclude_all, FILE *metafile, FILE *geomfile, FILE *indexfile, struct memfile *poolfile, struct memfile *treefile, char *fname, int basezoom, int layer, double droprate, long long *file_bbox, int segment, int *initialized, unsigned *initial_x, unsigned *initial_y, struct reader *readers, std::set<type_and_string> *file_keys, int maxzoom, std::map<std::string, int> *layermap) {
|
void parse_json(json_pull *jp, const char *reading, volatile long long *layer_seq, volatile long long *progress_seq, long long *metapos, long long *geompos, long long *indexpos, std::set<std::string> *exclude, std::set<std::string> *include, int exclude_all, FILE *metafile, FILE *geomfile, FILE *indexfile, struct memfile *poolfile, struct memfile *treefile, char *fname, int basezoom, int layer, double droprate, long long *file_bbox, int segment, int *initialized, unsigned *initial_x, unsigned *initial_y, struct reader *readers, std::set<type_and_string> *file_keys, int maxzoom, std::map<std::string, layermap_entry> *layermap) {
|
||||||
long long found_hashes = 0;
|
long long found_hashes = 0;
|
||||||
long long found_features = 0;
|
long long found_features = 0;
|
||||||
long long found_geometries = 0;
|
long long found_geometries = 0;
|
||||||
|
|||||||
+2
-2
@@ -26,9 +26,9 @@ struct parse_json_args {
|
|||||||
struct reader *readers;
|
struct reader *readers;
|
||||||
std::set<type_and_string> *file_keys;
|
std::set<type_and_string> *file_keys;
|
||||||
int maxzoom;
|
int maxzoom;
|
||||||
std::map<std::string, int> *layermap;
|
std::map<std::string, layermap_entry> *layermap;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct json_pull *json_begin_map(char *map, long long len);
|
struct json_pull *json_begin_map(char *map, long long len);
|
||||||
void parse_json(json_pull *jp, const char *reading, volatile long long *layer_seq, volatile long long *progress_seq, long long *metapos, long long *geompos, long long *indexpos, std::set<std::string> *exclude, std::set<std::string> *include, int exclude_all, FILE *metafile, FILE *geomfile, FILE *indexfile, struct memfile *poolfile, struct memfile *treefile, char *fname, int basezoom, int layer, double droprate, long long *file_bbox, int segment, int *initialized, unsigned *initial_x, unsigned *initial_y, struct reader *readers, std::set<type_and_string> *file_keys, int maxzoom, std::map<std::string, int> *layermap);
|
void parse_json(json_pull *jp, const char *reading, volatile long long *layer_seq, volatile long long *progress_seq, long long *metapos, long long *geompos, long long *indexpos, std::set<std::string> *exclude, std::set<std::string> *include, int exclude_all, FILE *metafile, FILE *geomfile, FILE *indexfile, struct memfile *poolfile, struct memfile *treefile, char *fname, int basezoom, int layer, double droprate, long long *file_bbox, int segment, int *initialized, unsigned *initial_x, unsigned *initial_y, struct reader *readers, std::set<type_and_string> *file_keys, int maxzoom, std::map<std::string, layermap_entry> *layermap);
|
||||||
void *run_parse_json(void *v);
|
void *run_parse_json(void *v);
|
||||||
|
|||||||
@@ -300,7 +300,7 @@ void *run_sort(void *v) {
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void do_read_parallel(char *map, long long len, long long initial_offset, const char *reading, struct reader *reader, volatile long long *progress_seq, std::set<std::string> *exclude, std::set<std::string> *include, int exclude_all, char *fname, int basezoom, int source, int nlayers, std::vector<std::map<std::string, int> > *layermaps, double droprate, int *initialized, unsigned *initial_x, unsigned *initial_y, std::set<type_and_string> *file_keys, int maxzoom) {
|
void do_read_parallel(char *map, long long len, long long initial_offset, const char *reading, struct reader *reader, volatile long long *progress_seq, std::set<std::string> *exclude, std::set<std::string> *include, int exclude_all, char *fname, int basezoom, int source, int nlayers, std::vector<std::map<std::string, layermap_entry> > *layermaps, double droprate, int *initialized, unsigned *initial_x, unsigned *initial_y, std::set<type_and_string> *file_keys, int maxzoom) {
|
||||||
long long segs[CPUS + 1];
|
long long segs[CPUS + 1];
|
||||||
segs[0] = 0;
|
segs[0] = 0;
|
||||||
segs[CPUS] = len;
|
segs[CPUS] = len;
|
||||||
@@ -400,7 +400,7 @@ struct read_parallel_arg {
|
|||||||
int basezoom;
|
int basezoom;
|
||||||
int source;
|
int source;
|
||||||
int nlayers;
|
int nlayers;
|
||||||
std::vector<std::map<std::string, int> > *layermaps;
|
std::vector<std::map<std::string, layermap_entry> > *layermaps;
|
||||||
double droprate;
|
double droprate;
|
||||||
int *initialized;
|
int *initialized;
|
||||||
unsigned *initial_x;
|
unsigned *initial_x;
|
||||||
@@ -444,7 +444,7 @@ void *run_read_parallel(void *v) {
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void start_parsing(int fd, FILE *fp, long long offset, long long len, volatile int *is_parsing, pthread_t *parallel_parser, bool &parser_created, const char *reading, struct reader *reader, volatile long long *progress_seq, std::set<std::string> *exclude, std::set<std::string> *include, int exclude_all, char *fname, int basezoom, int source, int nlayers, std::vector<std::map<std::string, int> > &layermaps, double droprate, int *initialized, unsigned *initial_x, unsigned *initial_y, std::set<type_and_string> *file_keys, int maxzoom) {
|
void start_parsing(int fd, FILE *fp, long long offset, long long len, volatile int *is_parsing, pthread_t *parallel_parser, bool &parser_created, const char *reading, struct reader *reader, volatile long long *progress_seq, std::set<std::string> *exclude, std::set<std::string> *include, int exclude_all, char *fname, int basezoom, int source, int nlayers, std::vector<std::map<std::string, layermap_entry> > &layermaps, double droprate, int *initialized, unsigned *initial_x, unsigned *initial_y, std::set<type_and_string> *file_keys, int maxzoom) {
|
||||||
// This has to kick off an intermediate thread to start the parser threads,
|
// This has to kick off an intermediate thread to start the parser threads,
|
||||||
// so the main thread can get back to reading the next input stage while
|
// so the main thread can get back to reading the next input stage while
|
||||||
// the intermediate thread waits for the completion of the parser threads.
|
// the intermediate thread waits for the completion of the parser threads.
|
||||||
@@ -1029,11 +1029,11 @@ int read_input(std::vector<source> &sources, char *fname, const char *layername,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::map<std::string, int> layermap;
|
std::map<std::string, layermap_entry> layermap;
|
||||||
for (size_t l = 0; l < nlayers; l++) {
|
for (size_t l = 0; l < nlayers; l++) {
|
||||||
layermap.insert(std::pair<std::string, int>(layernames[l], l));
|
layermap.insert(std::pair<std::string, layermap_entry>(layernames[l], layermap_entry(l)));
|
||||||
}
|
}
|
||||||
std::vector<std::map<std::string, int> > layermaps;
|
std::vector<std::map<std::string, layermap_entry> > layermaps;
|
||||||
for (size_t l = 0; l < CPUS; l++) {
|
for (size_t l = 0; l < CPUS; l++) {
|
||||||
layermaps.push_back(layermap);
|
layermaps.push_back(layermap);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,15 @@ struct type_and_string {
|
|||||||
bool operator<(const type_and_string &o) const;
|
bool operator<(const type_and_string &o) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct layermap_entry {
|
||||||
|
size_t id;
|
||||||
|
std::set<type_and_string> file_keys;
|
||||||
|
|
||||||
|
layermap_entry(size_t _id) {
|
||||||
|
id = _id;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
sqlite3 *mbtiles_open(char *dbname, char **argv, int forcetable);
|
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_write_tile(sqlite3 *outdb, int z, int tx, int ty, const char *data, int size);
|
||||||
|
|||||||
Reference in New Issue
Block a user