From fa0e38da2bc320d83de0ac3fa2ff10ed7f95e9a2 Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Tue, 8 Aug 2017 10:31:26 -0700 Subject: [PATCH] First stages of geobuf support --- Makefile | 2 +- geobuf.hpp | 13 +++++++++++++ main.cpp | 8 +++++++- 3 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 geobuf.hpp diff --git a/Makefile b/Makefile index 2b0bfd1..0eaff8f 100644 --- a/Makefile +++ b/Makefile @@ -46,7 +46,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 +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 geobuf.o $(CXX) $(PG) $(LIBS) $(FINAL_FLAGS) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) -lm -lz -lsqlite3 -lpthread tippecanoe-enumerate: enumerate.o diff --git a/geobuf.hpp b/geobuf.hpp new file mode 100644 index 0000000..17db410 --- /dev/null +++ b/geobuf.hpp @@ -0,0 +1,13 @@ +#ifndef GEOBUF_HPP +#define GEOBUF_HPP + +#include +#include +#include +#include +#include "mbtiles.hpp" + +void parse_geobuf(FILE *fp, const char *reading, volatile long long *layer_seq, volatile long long *progress_seq, long long *metapos, long long *geompos, long long *indexpos, std::set *exclude, std::set *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, int maxzoom, std::map *layermap, std::string layername, bool uses_gamma, std::map const *attribute_types, double *dist_sum, size_t *dist_count, bool want_dist); +void *run_parse_json(void *v); + +#endif diff --git a/main.cpp b/main.cpp index 8ed0695..827e6a2 100644 --- a/main.cpp +++ b/main.cpp @@ -45,6 +45,7 @@ #include "memfile.hpp" #include "main.hpp" #include "geojson.hpp" +#include "geobuf.hpp" #include "geometry.hpp" #include "serial.hpp" #include "options.hpp" @@ -1376,7 +1377,7 @@ int read_input(std::vector &sources, char *fname, int &maxzoom, int minz overall_offset += ahead; checkdisk(reader, CPUS); } - } else { + } else if (c == '{') { // Plain serial reading long long layer_seq = overall_offset; @@ -1385,6 +1386,11 @@ int read_input(std::vector &sources, char *fname, int &maxzoom, int minz json_end(jp); overall_offset = layer_seq; checkdisk(reader, CPUS); + } else { + long long layer_seq = overall_offset; + parse_geobuf(fp, reading.c_str(), &layer_seq, &progress_seq, &reader[0].metapos, &reader[0].geompos, &reader[0].indexpos, exclude, include, exclude_all, reader[0].metafile, reader[0].geomfile, reader[0].indexfile, reader[0].poolfile, reader[0].treefile, fname, basezoom, layer, droprate, reader[0].file_bbox, 0, &initialized[0], &initial_x[0], &initial_y[0], reader, maxzoom, &layermaps[0], sources[layer].layer, uses_gamma, attribute_types, &dist_sum, &dist_count, guess_maxzoom); + overall_offset = layer_seq; + checkdisk(reader, CPUS); } if (fclose(fp) != 0) {