mirror of
https://github.com/felt/tippecanoe.git
synced 2026-10-06 10:25:41 +02:00
tile-join reads and writes pmtiles. [#10]
This commit is contained in:
@@ -56,7 +56,7 @@ tippecanoe-enumerate: enumerate.o
|
|||||||
tippecanoe-decode: decode.o projection.o mvt.o write_json.o text.o jsonpull/jsonpull.o dirtiles.o pmtiles_file.o
|
tippecanoe-decode: decode.o projection.o mvt.o write_json.o text.o jsonpull/jsonpull.o dirtiles.o pmtiles_file.o
|
||||||
$(CXX) $(PG) $(LIBS) $(FINAL_FLAGS) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) -lm -lz -lsqlite3
|
$(CXX) $(PG) $(LIBS) $(FINAL_FLAGS) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) -lm -lz -lsqlite3
|
||||||
|
|
||||||
tile-join: tile-join.o projection.o pool.o mbtiles.o mvt.o memfile.o dirtiles.o jsonpull/jsonpull.o text.o evaluator.o csv.o write_json.o
|
tile-join: tile-join.o projection.o pool.o mbtiles.o mvt.o memfile.o dirtiles.o jsonpull/jsonpull.o text.o evaluator.o csv.o write_json.o pmtiles_file.o
|
||||||
$(CXX) $(PG) $(LIBS) $(FINAL_FLAGS) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) -lm -lz -lsqlite3 -lpthread
|
$(CXX) $(PG) $(LIBS) $(FINAL_FLAGS) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) -lm -lz -lsqlite3 -lpthread
|
||||||
|
|
||||||
tippecanoe-json-tool: jsontool.o jsonpull/jsonpull.o csv.o text.o geojson-loop.o
|
tippecanoe-json-tool: jsontool.o jsonpull/jsonpull.o csv.o text.o geojson-loop.o
|
||||||
|
|||||||
+57
-1
@@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
#define _DEFAULT_SOURCE
|
#define _DEFAULT_SOURCE
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <sys/mman.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@@ -27,6 +29,7 @@
|
|||||||
#include "mbtiles.hpp"
|
#include "mbtiles.hpp"
|
||||||
#include "geometry.hpp"
|
#include "geometry.hpp"
|
||||||
#include "dirtiles.hpp"
|
#include "dirtiles.hpp"
|
||||||
|
#include "pmtiles_file.hpp"
|
||||||
#include "evaluator.hpp"
|
#include "evaluator.hpp"
|
||||||
#include "csv.hpp"
|
#include "csv.hpp"
|
||||||
#include "text.hpp"
|
#include "text.hpp"
|
||||||
@@ -373,6 +376,9 @@ struct reader {
|
|||||||
sqlite3_stmt *stmt = NULL;
|
sqlite3_stmt *stmt = NULL;
|
||||||
struct reader *next = NULL;
|
struct reader *next = NULL;
|
||||||
|
|
||||||
|
char *pmtiles_map = NULL;
|
||||||
|
std::vector<pmtiles::entry_zxy> pmtiles_entries;
|
||||||
|
|
||||||
bool operator<(const struct reader &r) const {
|
bool operator<(const struct reader &r) const {
|
||||||
if (zoom < r.zoom) {
|
if (zoom < r.zoom) {
|
||||||
return true;
|
return true;
|
||||||
@@ -427,6 +433,32 @@ struct reader *begin_reading(char *fname) {
|
|||||||
|
|
||||||
r->dirtiles.erase(r->dirtiles.begin());
|
r->dirtiles.erase(r->dirtiles.begin());
|
||||||
}
|
}
|
||||||
|
} else if (pmtiles_has_suffix(fname)) {
|
||||||
|
int pmtiles_fd = open(fname, O_RDONLY | O_CLOEXEC);
|
||||||
|
r->pmtiles_map = (char *) mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, pmtiles_fd, 0);
|
||||||
|
|
||||||
|
if (r->pmtiles_map == MAP_FAILED) {
|
||||||
|
perror("mmap in decode");
|
||||||
|
exit(EXIT_MEMORY);
|
||||||
|
}
|
||||||
|
if (close(pmtiles_fd) != 0) {
|
||||||
|
perror("close");
|
||||||
|
exit(EXIT_CLOSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
r->pmtiles_entries = pmtiles_entries_tms(r->pmtiles_map, minzoom, maxzoom);
|
||||||
|
std::reverse(r->pmtiles_entries.begin(), r->pmtiles_entries.end());
|
||||||
|
|
||||||
|
if (r->pmtiles_entries.size() == 0) {
|
||||||
|
r->zoom = 32;
|
||||||
|
} else {
|
||||||
|
r->zoom = r->pmtiles_entries.back().z;
|
||||||
|
r->x = r->pmtiles_entries.back().x;
|
||||||
|
r->y = r->pmtiles_entries.back().y;
|
||||||
|
r->sorty = (1LL << r->zoom) - 1 - r->y;
|
||||||
|
}
|
||||||
|
r->data = std::string(r->pmtiles_map + r->pmtiles_entries.back().offset, r->pmtiles_entries.back().length);
|
||||||
|
r->pmtiles_entries.pop_back();
|
||||||
} else {
|
} else {
|
||||||
sqlite3 *db;
|
sqlite3 *db;
|
||||||
|
|
||||||
@@ -736,6 +768,18 @@ void decode(struct reader *readers, std::map<std::string, layermap_entry> &layer
|
|||||||
} else {
|
} else {
|
||||||
r->zoom = 32;
|
r->zoom = 32;
|
||||||
}
|
}
|
||||||
|
} else if (r->pmtiles_map != NULL) {
|
||||||
|
if (r->pmtiles_entries.size() == 0) {
|
||||||
|
r->zoom = 32;
|
||||||
|
} else {
|
||||||
|
r->zoom = r->pmtiles_entries.back().z;
|
||||||
|
r->x = r->pmtiles_entries.back().x;
|
||||||
|
r->y = r->pmtiles_entries.back().y;
|
||||||
|
r->sorty = (1LL << r->zoom) - 1 - r->y;
|
||||||
|
r->data = std::string(r->pmtiles_map + r->pmtiles_entries.back().offset, r->pmtiles_entries.back().length);
|
||||||
|
|
||||||
|
r->pmtiles_entries.pop_back();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (r->dirtiles.size() == 0) {
|
if (r->dirtiles.size() == 0) {
|
||||||
r->zoom = 32;
|
r->zoom = 32;
|
||||||
@@ -775,7 +819,10 @@ void decode(struct reader *readers, std::map<std::string, layermap_entry> &layer
|
|||||||
next = r->next;
|
next = r->next;
|
||||||
|
|
||||||
sqlite3 *db = r->db;
|
sqlite3 *db = r->db;
|
||||||
if (db == NULL) {
|
if (r->pmtiles_map) {
|
||||||
|
db = pmtilesmeta2tmp(r->name.c_str(), r->pmtiles_map);
|
||||||
|
// json, strategies
|
||||||
|
} else if (db == NULL) {
|
||||||
db = dirmeta2tmp(r->dirbase.c_str());
|
db = dirmeta2tmp(r->dirbase.c_str());
|
||||||
} else {
|
} else {
|
||||||
sqlite3_finalize(r->stmt);
|
sqlite3_finalize(r->stmt);
|
||||||
@@ -1141,7 +1188,12 @@ int main(int argc, char **argv) {
|
|||||||
if (out_mbtiles != NULL) {
|
if (out_mbtiles != NULL) {
|
||||||
if (force) {
|
if (force) {
|
||||||
unlink(out_mbtiles);
|
unlink(out_mbtiles);
|
||||||
|
} else {
|
||||||
|
if (pmtiles_has_suffix(out_mbtiles)) {
|
||||||
|
check_pmtiles(out_mbtiles, argv);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
outdb = mbtiles_open(out_mbtiles, argv, 0);
|
outdb = mbtiles_open(out_mbtiles, argv, 0);
|
||||||
}
|
}
|
||||||
if (out_dir != NULL) {
|
if (out_dir != NULL) {
|
||||||
@@ -1220,5 +1272,9 @@ int main(int argc, char **argv) {
|
|||||||
json_free(filter);
|
json_free(filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pmtiles_has_suffix(out_mbtiles)) {
|
||||||
|
mbtiles_map_image_to_pmtiles(out_mbtiles, m, !pC, quiet, false);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user