From 11c6c869aa71186d192808b6bb9d297945357fc7 Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Thu, 7 Jun 2018 11:19:19 -0700 Subject: [PATCH 1/4] Include a creator field in tileset metadata with the Tippecanoe version Also finally eradicates binary diffs from the tests --- CHANGELOG.md | 4 + Makefile | 84 +- decode.cpp | 36 +- main.cpp | 2 +- mbtiles.cpp | 10 + .../raw-merged-folder-compare/10/164/395.pbf | Bin 33706 -> 0 bytes .../raw-merged-folder-compare/10/164/396.pbf | Bin 215 -> 0 bytes .../raw-merged-folder-compare/11/328/790.pbf | Bin 31900 -> 0 bytes .../raw-merged-folder-compare/11/328/791.pbf | Bin 1119 -> 0 bytes .../raw-merged-folder-compare/11/329/791.pbf | Bin 388 -> 0 bytes .../raw-merged-folder-compare/12/656/1581.pbf | Bin 32793 -> 0 bytes .../raw-merged-folder-compare/3/1/3.pbf | Bin 328 -> 0 bytes .../raw-merged-folder-compare/4/2/6.pbf | Bin 1008 -> 0 bytes .../raw-merged-folder-compare/5/5/12.pbf | Bin 3214 -> 0 bytes .../raw-merged-folder-compare/6/10/24.pbf | Bin 8485 -> 0 bytes .../raw-merged-folder-compare/7/20/49.pbf | Bin 20958 -> 0 bytes .../raw-merged-folder-compare/8/40/98.pbf | Bin 794 -> 0 bytes .../raw-merged-folder-compare/8/41/98.pbf | Bin 25424 -> 0 bytes .../raw-merged-folder-compare/8/41/99.pbf | Bin 267 -> 0 bytes .../raw-merged-folder-compare/9/81/197.pbf | Bin 459 -> 0 bytes .../raw-merged-folder-compare/9/82/197.pbf | Bin 30898 -> 0 bytes .../raw-merged-folder-compare/9/82/198.pbf | Bin 313 -> 0 bytes .../raw-merged-folder-compare/metadata.json | 12 - tests/join-population/raw-merged-folder.json | 3398 +++++++++++++++++ tests/raw-tiles/compare/0/0/0.pbf | Bin 437 -> 0 bytes tests/raw-tiles/compare/1/0/0.pbf | Bin 437 -> 0 bytes tests/raw-tiles/compare/10/163/366.pbf | Bin 437 -> 0 bytes tests/raw-tiles/compare/11/326/732.pbf | Bin 437 -> 0 bytes tests/raw-tiles/compare/12/652/1464.pbf | Bin 330 -> 0 bytes tests/raw-tiles/compare/12/652/1465.pbf | Bin 238 -> 0 bytes tests/raw-tiles/compare/13/1304/2928.pbf | Bin 243 -> 0 bytes tests/raw-tiles/compare/13/1304/2929.pbf | Bin 132 -> 0 bytes tests/raw-tiles/compare/13/1304/2930.pbf | Bin 239 -> 0 bytes tests/raw-tiles/compare/14/2608/5856.pbf | Bin 123 -> 0 bytes tests/raw-tiles/compare/14/2608/5857.pbf | Bin 160 -> 0 bytes tests/raw-tiles/compare/14/2609/5860.pbf | Bin 239 -> 0 bytes tests/raw-tiles/compare/2/0/1.pbf | Bin 437 -> 0 bytes tests/raw-tiles/compare/3/1/2.pbf | Bin 437 -> 0 bytes tests/raw-tiles/compare/4/2/5.pbf | Bin 437 -> 0 bytes tests/raw-tiles/compare/5/5/11.pbf | Bin 437 -> 0 bytes tests/raw-tiles/compare/6/10/22.pbf | Bin 437 -> 0 bytes tests/raw-tiles/compare/7/20/45.pbf | Bin 437 -> 0 bytes tests/raw-tiles/compare/8/40/91.pbf | Bin 437 -> 0 bytes tests/raw-tiles/compare/9/81/183.pbf | Bin 437 -> 0 bytes tests/raw-tiles/compare/metadata.json | 12 - tests/raw-tiles/raw-tiles.json | 216 ++ version.hpp | 2 +- 47 files changed, 3697 insertions(+), 79 deletions(-) delete mode 100644 tests/join-population/raw-merged-folder-compare/10/164/395.pbf delete mode 100644 tests/join-population/raw-merged-folder-compare/10/164/396.pbf delete mode 100644 tests/join-population/raw-merged-folder-compare/11/328/790.pbf delete mode 100644 tests/join-population/raw-merged-folder-compare/11/328/791.pbf delete mode 100644 tests/join-population/raw-merged-folder-compare/11/329/791.pbf delete mode 100644 tests/join-population/raw-merged-folder-compare/12/656/1581.pbf delete mode 100644 tests/join-population/raw-merged-folder-compare/3/1/3.pbf delete mode 100644 tests/join-population/raw-merged-folder-compare/4/2/6.pbf delete mode 100644 tests/join-population/raw-merged-folder-compare/5/5/12.pbf delete mode 100644 tests/join-population/raw-merged-folder-compare/6/10/24.pbf delete mode 100644 tests/join-population/raw-merged-folder-compare/7/20/49.pbf delete mode 100644 tests/join-population/raw-merged-folder-compare/8/40/98.pbf delete mode 100644 tests/join-population/raw-merged-folder-compare/8/41/98.pbf delete mode 100644 tests/join-population/raw-merged-folder-compare/8/41/99.pbf delete mode 100644 tests/join-population/raw-merged-folder-compare/9/81/197.pbf delete mode 100644 tests/join-population/raw-merged-folder-compare/9/82/197.pbf delete mode 100644 tests/join-population/raw-merged-folder-compare/9/82/198.pbf delete mode 100644 tests/join-population/raw-merged-folder-compare/metadata.json create mode 100644 tests/join-population/raw-merged-folder.json delete mode 100644 tests/raw-tiles/compare/0/0/0.pbf delete mode 100644 tests/raw-tiles/compare/1/0/0.pbf delete mode 100644 tests/raw-tiles/compare/10/163/366.pbf delete mode 100644 tests/raw-tiles/compare/11/326/732.pbf delete mode 100644 tests/raw-tiles/compare/12/652/1464.pbf delete mode 100644 tests/raw-tiles/compare/12/652/1465.pbf delete mode 100644 tests/raw-tiles/compare/13/1304/2928.pbf delete mode 100644 tests/raw-tiles/compare/13/1304/2929.pbf delete mode 100644 tests/raw-tiles/compare/13/1304/2930.pbf delete mode 100644 tests/raw-tiles/compare/14/2608/5856.pbf delete mode 100644 tests/raw-tiles/compare/14/2608/5857.pbf delete mode 100644 tests/raw-tiles/compare/14/2609/5860.pbf delete mode 100644 tests/raw-tiles/compare/2/0/1.pbf delete mode 100644 tests/raw-tiles/compare/3/1/2.pbf delete mode 100644 tests/raw-tiles/compare/4/2/5.pbf delete mode 100644 tests/raw-tiles/compare/5/5/11.pbf delete mode 100644 tests/raw-tiles/compare/6/10/22.pbf delete mode 100644 tests/raw-tiles/compare/7/20/45.pbf delete mode 100644 tests/raw-tiles/compare/8/40/91.pbf delete mode 100644 tests/raw-tiles/compare/9/81/183.pbf delete mode 100644 tests/raw-tiles/compare/metadata.json create mode 100644 tests/raw-tiles/raw-tiles.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 76226c7..77cf4f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.29.3 + +* Include a creator field in tileset metadata with the Tippecanoe version + ## 1.29.2 * Be careful to remove null attributes from prefilter/postfilter output diff --git a/Makefile b/Makefile index 64a3677..a9ba102 100644 --- a/Makefile +++ b/Makefile @@ -90,7 +90,7 @@ suffixes = json json.gz # Work around Makefile and filename punctuation limits: _ for space, @ for :, % for / %.json.check: ./tippecanoe -a@ -f -o $@.mbtiles $(subst @,:,$(subst %,/,$(subst _, ,$(patsubst %.json.check,%,$(word 4,$(subst /, ,$@)))))) $(foreach suffix,$(suffixes),$(wildcard $(subst $(SPACE),/,$(wordlist 1,2,$(subst /, ,$@)))/*.$(suffix))) < /dev/null - ./tippecanoe-decode $@.mbtiles > $@.out + ./tippecanoe-decode -x creator $@.mbtiles > $@.out cmp $@.out $(patsubst %.check,%,$@) rm $@.out $@.mbtiles @@ -105,7 +105,7 @@ fewer-tests: tippecanoe tippecanoe-decode geobuf-test raw-tiles-test parallel-te for i in $(wildcard $(subst $(SPACE),/,$(wordlist 1,2,$(subst /, ,$@)))/*.json); do ./tippecanoe-json-tool -w $$i | ./node_modules/geobuf/bin/json2geobuf > $$i.geobuf; done for i in $(wildcard $(subst $(SPACE),/,$(wordlist 1,2,$(subst /, ,$@)))/*.json.gz); do gzip -dc $$i | ./tippecanoe-json-tool -w | ./node_modules/geobuf/bin/json2geobuf > $$i.geobuf; done ./tippecanoe -a@ -f -o $@.mbtiles $(subst @,:,$(subst %,/,$(subst _, ,$(patsubst %.json.checkbuf,%,$(word 4,$(subst /, ,$@)))))) $(foreach suffix,$(suffixes),$(addsuffix .geobuf,$(wildcard $(subst $(SPACE),/,$(wordlist 1,2,$(subst /, ,$@)))/*.$(suffix)))) < /dev/null - ./tippecanoe-decode $@.mbtiles | sed 's/checkbuf/check/g' > $@.out + ./tippecanoe-decode -x creator $@.mbtiles | sed 's/checkbuf/check/g' > $@.out cmp $@.out $(patsubst %.checkbuf,%,$@) rm $@.out $@.mbtiles @@ -123,12 +123,12 @@ parallel-test: cat tests/parallel/in[1234].json | ./tippecanoe -z5 -f -pi -l test -n test -P -o tests/parallel/parallel-pipe.mbtiles cat tests/parallel/in[1234].json | sed 's/^/@/' | tr '@' '\036' | ./tippecanoe -z5 -f -pi -l test -n test -o tests/parallel/implicit-pipe.mbtiles ./tippecanoe -z5 -f -pi -l test -n test -P -o tests/parallel/parallel-pipes.mbtiles <(cat tests/parallel/in1.json) <(cat tests/parallel/empty1.json) <(cat tests/parallel/empty2.json) <(cat tests/parallel/in2.json) /dev/null <(cat tests/parallel/in3.json) <(cat tests/parallel/in4.json) - ./tippecanoe-decode tests/parallel/linear-file.mbtiles > tests/parallel/linear-file.json - ./tippecanoe-decode tests/parallel/parallel-file.mbtiles > tests/parallel/parallel-file.json - ./tippecanoe-decode tests/parallel/linear-pipe.mbtiles > tests/parallel/linear-pipe.json - ./tippecanoe-decode tests/parallel/parallel-pipe.mbtiles > tests/parallel/parallel-pipe.json - ./tippecanoe-decode tests/parallel/implicit-pipe.mbtiles > tests/parallel/implicit-pipe.json - ./tippecanoe-decode tests/parallel/parallel-pipes.mbtiles > tests/parallel/parallel-pipes.json + ./tippecanoe-decode -x creator tests/parallel/linear-file.mbtiles > tests/parallel/linear-file.json + ./tippecanoe-decode -x creator tests/parallel/parallel-file.mbtiles > tests/parallel/parallel-file.json + ./tippecanoe-decode -x creator tests/parallel/linear-pipe.mbtiles > tests/parallel/linear-pipe.json + ./tippecanoe-decode -x creator tests/parallel/parallel-pipe.mbtiles > tests/parallel/parallel-pipe.json + ./tippecanoe-decode -x creator tests/parallel/implicit-pipe.mbtiles > tests/parallel/implicit-pipe.json + ./tippecanoe-decode -x creator tests/parallel/parallel-pipes.mbtiles > tests/parallel/parallel-pipes.json cmp tests/parallel/linear-file.json tests/parallel/parallel-file.json cmp tests/parallel/linear-file.json tests/parallel/linear-pipe.json cmp tests/parallel/linear-file.json tests/parallel/parallel-pipe.json @@ -138,16 +138,17 @@ parallel-test: raw-tiles-test: ./tippecanoe -f -e tests/raw-tiles/raw-tiles -r1 tests/raw-tiles/hackspots.geojson -pC - diff -x '*.DS_Store' -rq tests/raw-tiles/raw-tiles tests/raw-tiles/compare - rm -rf tests/raw-tiles/raw-tiles + ./tippecanoe-decode -x creator tests/raw-tiles/raw-tiles > tests/raw-tiles/raw-tiles.json.check + cmp tests/raw-tiles/raw-tiles.json.check tests/raw-tiles/raw-tiles.json + rm -rf tests/raw-tiles/raw-tiles tests/raw-tiles/compare.json.check decode-test: mkdir -p tests/muni/decode ./tippecanoe -z11 -Z11 -f -o tests/muni/decode/multi.mbtiles tests/muni/*.json - ./tippecanoe-decode -l subway tests/muni/decode/multi.mbtiles > tests/muni/decode/multi.mbtiles.json.check - ./tippecanoe-decode -c tests/muni/decode/multi.mbtiles > tests/muni/decode/multi.mbtiles.pipeline.json.check - ./tippecanoe-decode tests/muni/decode/multi.mbtiles 11 327 791 > tests/muni/decode/multi.mbtiles.onetile.json.check - ./tippecanoe-decode --stats tests/muni/decode/multi.mbtiles > tests/muni/decode/multi.mbtiles.stats.json.check + ./tippecanoe-decode -x creator -l subway tests/muni/decode/multi.mbtiles > tests/muni/decode/multi.mbtiles.json.check + ./tippecanoe-decode -x creator -c tests/muni/decode/multi.mbtiles > tests/muni/decode/multi.mbtiles.pipeline.json.check + ./tippecanoe-decode -x creator tests/muni/decode/multi.mbtiles 11 327 791 > tests/muni/decode/multi.mbtiles.onetile.json.check + ./tippecanoe-decode -x creator --stats tests/muni/decode/multi.mbtiles > tests/muni/decode/multi.mbtiles.stats.json.check cmp tests/muni/decode/multi.mbtiles.json.check tests/muni/decode/multi.mbtiles.json cmp tests/muni/decode/multi.mbtiles.pipeline.json.check tests/muni/decode/multi.mbtiles.pipeline.json cmp tests/muni/decode/multi.mbtiles.onetile.json.check tests/muni/decode/multi.mbtiles.onetile.json @@ -155,10 +156,10 @@ decode-test: rm -f tests/muni/decode/multi.mbtiles.json.check tests/muni/decode/multi.mbtiles tests/muni/decode/multi.mbtiles.pipeline.json.check tests/muni/decode/multi.mbtiles.stats.json.check tests/muni/decode/multi.mbtiles.onetile.json.check pbf-test: - ./tippecanoe-decode tests/pbf/11-328-791.vector.pbf 11 328 791 > tests/pbf/11-328-791.vector.pbf.out + ./tippecanoe-decode -x creator tests/pbf/11-328-791.vector.pbf 11 328 791 > tests/pbf/11-328-791.vector.pbf.out cmp tests/pbf/11-328-791.json tests/pbf/11-328-791.vector.pbf.out rm tests/pbf/11-328-791.vector.pbf.out - ./tippecanoe-decode -s EPSG:3857 tests/pbf/11-328-791.vector.pbf 11 328 791 > tests/pbf/11-328-791.3857.vector.pbf.out + ./tippecanoe-decode -x creator -s EPSG:3857 tests/pbf/11-328-791.vector.pbf 11 328 791 > tests/pbf/11-328-791.3857.vector.pbf.out cmp tests/pbf/11-328-791.3857.json tests/pbf/11-328-791.3857.vector.pbf.out rm tests/pbf/11-328-791.3857.vector.pbf.out @@ -172,7 +173,7 @@ join-test: tile-join ./tippecanoe -f -z12 -o tests/join-population/tabblock_06001420.mbtiles -YALAND10:'Land area' -L'{"file": "tests/join-population/tabblock_06001420.json", "description": "population"}' ./tippecanoe -f -Z5 -z10 -o tests/join-population/macarthur.mbtiles -l macarthur tests/join-population/macarthur.json ./tile-join -f -Z6 -z9 -o tests/join-population/macarthur-6-9.mbtiles tests/join-population/macarthur.mbtiles - ./tippecanoe-decode tests/join-population/macarthur-6-9.mbtiles > tests/join-population/macarthur-6-9.mbtiles.json.check + ./tippecanoe-decode -x creator tests/join-population/macarthur-6-9.mbtiles > tests/join-population/macarthur-6-9.mbtiles.json.check cmp tests/join-population/macarthur-6-9.mbtiles.json.check tests/join-population/macarthur-6-9.mbtiles.json rm -f tests/join-population/macarthur-6-9.mbtiles.json.check tests/join-population/macarthur-6-9.mbtiles ./tippecanoe -f -d10 -D10 -Z9 -z11 -o tests/join-population/macarthur2.mbtiles -l macarthur tests/join-population/macarthur2.json @@ -181,11 +182,11 @@ join-test: tile-join ./tile-join -f -i -o tests/join-population/joined-i.mbtiles -x GEOID10 -c tests/join-population/population.csv tests/join-population/tabblock_06001420.mbtiles ./tile-join -f -o tests/join-population/merged.mbtiles tests/join-population/tabblock_06001420.mbtiles tests/join-population/macarthur.mbtiles tests/join-population/macarthur2.mbtiles ./tile-join -f -c tests/join-population/windows.csv -o tests/join-population/windows.mbtiles tests/join-population/macarthur.mbtiles - ./tippecanoe-decode --maximum-zoom=11 --minimum-zoom=4 tests/join-population/joined.mbtiles > tests/join-population/joined.mbtiles.json.check - ./tippecanoe-decode --maximum-zoom=11 --minimum-zoom=4 tests/join-population/joined-no-tile-stats.mbtiles > tests/join-population/joined-no-tile-stats.mbtiles.json.check - ./tippecanoe-decode tests/join-population/joined-i.mbtiles > tests/join-population/joined-i.mbtiles.json.check - ./tippecanoe-decode tests/join-population/merged.mbtiles > tests/join-population/merged.mbtiles.json.check - ./tippecanoe-decode tests/join-population/windows.mbtiles > tests/join-population/windows.mbtiles.json.check + ./tippecanoe-decode -x creator --maximum-zoom=11 --minimum-zoom=4 tests/join-population/joined.mbtiles > tests/join-population/joined.mbtiles.json.check + ./tippecanoe-decode -x creator --maximum-zoom=11 --minimum-zoom=4 tests/join-population/joined-no-tile-stats.mbtiles > tests/join-population/joined-no-tile-stats.mbtiles.json.check + ./tippecanoe-decode -x creator tests/join-population/joined-i.mbtiles > tests/join-population/joined-i.mbtiles.json.check + ./tippecanoe-decode -x creator tests/join-population/merged.mbtiles > tests/join-population/merged.mbtiles.json.check + ./tippecanoe-decode -x creator tests/join-population/windows.mbtiles > tests/join-population/windows.mbtiles.json.check cmp tests/join-population/joined.mbtiles.json.check tests/join-population/joined.mbtiles.json cmp tests/join-population/joined-no-tile-stats.mbtiles.json.check tests/join-population/joined-no-tile-stats.mbtiles.json cmp tests/join-population/joined-i.mbtiles.json.check tests/join-population/joined-i.mbtiles.json @@ -193,32 +194,37 @@ join-test: tile-join cmp tests/join-population/windows.mbtiles.json.check tests/join-population/windows.mbtiles.json ./tile-join -f -l macarthur -n "macarthur name" -N "macarthur description" -A "macarthur attribution" -o tests/join-population/just-macarthur.mbtiles tests/join-population/merged.mbtiles ./tile-join -f -L macarthur -o tests/join-population/no-macarthur.mbtiles tests/join-population/merged.mbtiles - ./tippecanoe-decode tests/join-population/just-macarthur.mbtiles > tests/join-population/just-macarthur.mbtiles.json.check - ./tippecanoe-decode tests/join-population/no-macarthur.mbtiles > tests/join-population/no-macarthur.mbtiles.json.check + ./tippecanoe-decode -x creator tests/join-population/just-macarthur.mbtiles > tests/join-population/just-macarthur.mbtiles.json.check + ./tippecanoe-decode -x creator tests/join-population/no-macarthur.mbtiles > tests/join-population/no-macarthur.mbtiles.json.check cmp tests/join-population/just-macarthur.mbtiles.json.check tests/join-population/just-macarthur.mbtiles.json cmp tests/join-population/no-macarthur.mbtiles.json.check tests/join-population/no-macarthur.mbtiles.json ./tile-join --no-tile-compression -f -e tests/join-population/raw-merged-folder tests/join-population/tabblock_06001420.mbtiles tests/join-population/macarthur.mbtiles tests/join-population/macarthur2.mbtiles - diff -x '*.DS_Store' -rq tests/join-population/raw-merged-folder tests/join-population/raw-merged-folder-compare + ./tippecanoe-decode -x creator tests/join-population/raw-merged-folder > tests/join-population/raw-merged-folder.json.check + cmp tests/join-population/raw-merged-folder.json.check tests/join-population/raw-merged-folder.json + rm -f tests/join-population/raw-merged-folder.json.check ./tippecanoe -z12 -f -e tests/join-population/tabblock_06001420-folder -YALAND10:'Land area' -L'{"file": "tests/join-population/tabblock_06001420.json", "description": "population"}' ./tippecanoe -Z5 -z10 -f -e tests/join-population/macarthur-folder -l macarthur tests/join-population/macarthur.json ./tippecanoe -d10 -D10 -Z9 -z11 -f -e tests/join-population/macarthur2-folder -l macarthur tests/join-population/macarthur2.json ./tile-join -f -o tests/join-population/merged-folder.mbtiles tests/join-population/tabblock_06001420-folder tests/join-population/macarthur-folder tests/join-population/macarthur2-folder - ./tippecanoe-decode tests/join-population/merged-folder.mbtiles > tests/join-population/merged-folder.mbtiles.json.check + ./tippecanoe-decode -x creator tests/join-population/merged-folder.mbtiles > tests/join-population/merged-folder.mbtiles.json.check cmp tests/join-population/merged-folder.mbtiles.json.check tests/join-population/merged-folder.mbtiles.json ./tile-join -n "merged name" -N "merged description" -f -e tests/join-population/merged-mbtiles-to-folder tests/join-population/tabblock_06001420.mbtiles tests/join-population/macarthur.mbtiles tests/join-population/macarthur2.mbtiles ./tile-join -n "merged name" -N "merged description" -f -e tests/join-population/merged-folders-to-folder tests/join-population/tabblock_06001420-folder tests/join-population/macarthur-folder tests/join-population/macarthur2-folder - diff -x '*.DS_Store' -rq tests/join-population/merged-mbtiles-to-folder tests/join-population/merged-folders-to-folder + ./tippecanoe-decode -x creator tests/join-population/merged-mbtiles-to-folder > tests/join-population/merged-mbtiles-to-folder.json.check + ./tippecanoe-decode -x creator tests/join-population/merged-folders-to-folder > tests/join-population/merged-folders-to-folder.json.check + cmp tests/join-population/merged-mbtiles-to-folder.json.check tests/join-population/merged-folders-to-folder.json.check + rm -f tests/join-population/merged-mbtiles-to-folder.json.check tests/join-population/merged-folders-to-folder.json.check ./tile-join -f -c tests/join-population/windows.csv -o tests/join-population/windows-merged.mbtiles tests/join-population/macarthur.mbtiles tests/join-population/macarthur2-folder ./tile-join -c tests/join-population/windows.csv -f -e tests/join-population/windows-merged-folder tests/join-population/macarthur.mbtiles tests/join-population/macarthur2-folder ./tile-join -f -o tests/join-population/windows-merged2.mbtiles tests/join-population/windows-merged-folder - ./tippecanoe-decode tests/join-population/windows-merged.mbtiles > tests/join-population/windows-merged.mbtiles.json.check - ./tippecanoe-decode tests/join-population/windows-merged2.mbtiles > tests/join-population/windows-merged2.mbtiles.json.check + ./tippecanoe-decode -x creator tests/join-population/windows-merged.mbtiles > tests/join-population/windows-merged.mbtiles.json.check + ./tippecanoe-decode -x creator tests/join-population/windows-merged2.mbtiles > tests/join-population/windows-merged2.mbtiles.json.check cmp tests/join-population/windows-merged.mbtiles.json.check tests/join-population/windows-merged2.mbtiles.json.check ./tile-join -f -o tests/join-population/macarthur-and-macarthur2-merged.mbtiles tests/join-population/macarthur.mbtiles tests/join-population/macarthur2-folder ./tile-join -f -e tests/join-population/macarthur-and-macarthur2-folder tests/join-population/macarthur.mbtiles tests/join-population/macarthur2-folder ./tile-join -f -o tests/join-population/macarthur-and-macarthur2-merged2.mbtiles tests/join-population/macarthur-and-macarthur2-folder - ./tippecanoe-decode tests/join-population/macarthur-and-macarthur2-merged.mbtiles > tests/join-population/macarthur-and-macarthur2-merged.mbtiles.json.check - ./tippecanoe-decode tests/join-population/macarthur-and-macarthur2-merged2.mbtiles > tests/join-population/macarthur-and-macarthur2-merged2.mbtiles.json.check + ./tippecanoe-decode -x creator tests/join-population/macarthur-and-macarthur2-merged.mbtiles > tests/join-population/macarthur-and-macarthur2-merged.mbtiles.json.check + ./tippecanoe-decode -x creator tests/join-population/macarthur-and-macarthur2-merged2.mbtiles > tests/join-population/macarthur-and-macarthur2-merged2.mbtiles.json.check cmp tests/join-population/macarthur-and-macarthur2-merged.mbtiles.json.check tests/join-population/macarthur-and-macarthur2-merged2.mbtiles.json.check rm tests/join-population/tabblock_06001420.mbtiles tests/join-population/joined.mbtiles tests/join-population/joined-i.mbtiles tests/join-population/joined.mbtiles.json.check tests/join-population/joined-i.mbtiles.json.check tests/join-population/macarthur.mbtiles tests/join-population/merged.mbtiles tests/join-population/merged.mbtiles.json.check tests/join-population/merged-folder.mbtiles tests/join-population/macarthur2.mbtiles tests/join-population/windows.mbtiles tests/join-population/windows-merged.mbtiles tests/join-population/windows-merged2.mbtiles tests/join-population/windows.mbtiles.json.check tests/join-population/just-macarthur.mbtiles tests/join-population/no-macarthur.mbtiles tests/join-population/just-macarthur.mbtiles.json.check tests/join-population/no-macarthur.mbtiles.json.check tests/join-population/merged-folder.mbtiles.json.check tests/join-population/windows-merged.mbtiles.json.check tests/join-population/windows-merged2.mbtiles.json.check tests/join-population/macarthur-and-macarthur2-merged.mbtiles tests/join-population/macarthur-and-macarthur2-merged2.mbtiles tests/join-population/macarthur-and-macarthur2-merged.mbtiles.json.check tests/join-population/macarthur-and-macarthur2-merged2.mbtiles.json.check rm -rf tests/join-population/raw-merged-folder tests/join-population/tabblock_06001420-folder tests/join-population/macarthur-folder tests/join-population/macarthur2-folder tests/join-population/merged-mbtiles-to-folder tests/join-population/merged-folders-to-folder tests/join-population/windows-merged-folder tests/join-population/macarthur-and-macarthur2-folder @@ -226,7 +232,7 @@ join-test: tile-join ./tippecanoe -f -Z5 -z10 -o tests/join-population/macarthur.mbtiles -l macarthur1 tests/join-population/macarthur.json ./tippecanoe -f -Z5 -z10 -o tests/join-population/macarthur2.mbtiles -l macarthur2 tests/join-population/macarthur2.json ./tile-join -R macarthur1:one --rename-layer=macarthur2:two -f -o tests/join-population/renamed.mbtiles tests/join-population/macarthur.mbtiles tests/join-population/macarthur2.mbtiles - ./tippecanoe-decode tests/join-population/renamed.mbtiles > tests/join-population/renamed.mbtiles.json.check + ./tippecanoe-decode -x creator tests/join-population/renamed.mbtiles > tests/join-population/renamed.mbtiles.json.check cmp tests/join-population/renamed.mbtiles.json.check tests/join-population/renamed.mbtiles.json rm -f tests/join-population/renamed.mbtiles.json.check tests/join-population/renamed.mbtiles.json.check tests/join-population/macarthur.mbtiles tests/join-population/macarthur2.mbtiles @@ -234,13 +240,13 @@ join-filter-test: # Comes out different from the direct tippecanoe run because null attributes are lost ./tippecanoe -z0 -f -o tests/feature-filter/out/all.mbtiles tests/feature-filter/in.json ./tile-join -J tests/feature-filter/filter -f -o tests/feature-filter/out/filtered.mbtiles tests/feature-filter/out/all.mbtiles - ./tippecanoe-decode tests/feature-filter/out/filtered.mbtiles > tests/feature-filter/out/filtered.json.check + ./tippecanoe-decode -x creator tests/feature-filter/out/filtered.mbtiles > tests/feature-filter/out/filtered.json.check cmp tests/feature-filter/out/filtered.json.check tests/feature-filter/out/filtered.json.standard rm -f tests/feature-filter/out/filtered.json.check tests/feature-filter/out/filtered.mbtiles tests/feature-filter/out/all.mbtiles # Test zoom level filtering ./tippecanoe -r1 -z8 -f -o tests/feature-filter/out/places.mbtiles tests/ne_110m_populated_places/in.json ./tile-join -J tests/feature-filter/places-filter -f -o tests/feature-filter/out/places-filter.mbtiles tests/feature-filter/out/places.mbtiles - ./tippecanoe-decode tests/feature-filter/out/places-filter.mbtiles > tests/feature-filter/out/places-filter.mbtiles.json.check + ./tippecanoe-decode -x creator tests/feature-filter/out/places-filter.mbtiles > tests/feature-filter/out/places-filter.mbtiles.json.check cmp tests/feature-filter/out/places-filter.mbtiles.json.check tests/feature-filter/out/places-filter.mbtiles.json.standard rm -f tests/feature-filter/out/places.mbtiles tests/feature-filter/out/places-filter.mbtiles tests/feature-filter/out/places-filter.mbtiles.json.check @@ -258,7 +264,7 @@ allow-existing-test: # Replace existing ./tippecanoe -Z8 -z9 -f -o tests/allow-existing/both.mbtiles tests/coalesce-tract/tl_2010_06001_tract10.json ./tippecanoe -Z10 -z11 -F -o tests/allow-existing/both.mbtiles tests/coalesce-tract/tl_2010_06001_tract10.json - ./tippecanoe-decode tests/allow-existing/both.mbtiles > tests/allow-existing/both.mbtiles.json.check + ./tippecanoe-decode -x creator tests/allow-existing/both.mbtiles > tests/allow-existing/both.mbtiles.json.check cmp tests/allow-existing/both.mbtiles.json.check tests/allow-existing/both.mbtiles.json # Make a tileset ./tippecanoe -Z0 -z0 -f -e tests/allow-existing/both.dir tests/coalesce-tract/tl_2010_06001_tract10.json @@ -267,19 +273,19 @@ allow-existing-test: # Replace existing ./tippecanoe -Z8 -z9 -f -e tests/allow-existing/both.dir tests/coalesce-tract/tl_2010_06001_tract10.json ./tippecanoe -Z10 -z11 -F -e tests/allow-existing/both.dir tests/coalesce-tract/tl_2010_06001_tract10.json - ./tippecanoe-decode tests/allow-existing/both.dir | sed 's/both\.dir/both.mbtiles/g' > tests/allow-existing/both.dir.json.check + ./tippecanoe-decode -x creator tests/allow-existing/both.dir | sed 's/both\.dir/both.mbtiles/g' > tests/allow-existing/both.dir.json.check cmp tests/allow-existing/both.dir.json.check tests/allow-existing/both.mbtiles.json rm -r tests/allow-existing/both.dir.json.check tests/allow-existing/both.dir tests/allow-existing/both.mbtiles.json.check tests/allow-existing/both.mbtiles csv-test: ./tippecanoe -zg -f -o tests/csv/out.mbtiles tests/csv/ne_110m_populated_places_simple.csv - ./tippecanoe-decode tests/csv/out.mbtiles > tests/csv/out.mbtiles.json.check + ./tippecanoe-decode -x creator tests/csv/out.mbtiles > tests/csv/out.mbtiles.json.check cmp tests/csv/out.mbtiles.json.check tests/csv/out.mbtiles.json rm -f tests/csv/out.mbtiles.json.check tests/csv/out.mbtiles layer-json-test: ./tippecanoe -z0 -r1 -yNAME -f -o tests/layer-json/out.mbtiles -L'{"file":"tests/ne_110m_populated_places/in.json", "description":"World cities", "layer":"places"}' - ./tippecanoe-decode tests/layer-json/out.mbtiles > tests/layer-json/out.mbtiles.json.check + ./tippecanoe-decode -x creator tests/layer-json/out.mbtiles > tests/layer-json/out.mbtiles.json.check cmp tests/layer-json/out.mbtiles.json.check tests/layer-json/out.mbtiles.json rm -f tests/layer-json/out.mbtiles.json.check tests/layer-json/out.mbtiles @@ -290,6 +296,6 @@ prep-test: $(TESTS) tests/%.json: Makefile tippecanoe tippecanoe-decode ./tippecanoe -f -o $@.check.mbtiles $(subst @,:,$(subst %,/,$(subst _, ,$(patsubst %.json,%,$(word 4,$(subst /, ,$@)))))) $(foreach suffix,$(suffixes),$(wildcard $(subst $(SPACE),/,$(wordlist 1,2,$(subst /, ,$@)))/*.$(suffix))) - ./tippecanoe-decode $@.check.mbtiles > $@ + ./tippecanoe-decode -x creator $@.check.mbtiles > $@ cmp $(patsubst %.check,%,$@) $@ rm $@.check.mbtiles diff --git a/decode.cpp b/decode.cpp index 63d70b8..455278a 100644 --- a/decode.cpp +++ b/decode.cpp @@ -223,7 +223,7 @@ void handle(std::string message, int z, unsigned x, unsigned y, std::set const &to_decode, bool pipeline, bool stats) { +void decode(char *fname, int z, unsigned x, unsigned y, std::set const &to_decode, bool pipeline, bool stats, std::set const &exclude_meta) { sqlite3 *db = NULL; bool isdir = false; int oz = z; @@ -303,21 +303,23 @@ void decode(char *fname, int z, unsigned x, unsigned y, std::set co } while (sqlite3_step(stmt2) == SQLITE_ROW) { - if (within) { - state.json_comma_newline(); - } - within = 1; - const unsigned char *name = sqlite3_column_text(stmt2, 0); const unsigned char *value = sqlite3_column_text(stmt2, 1); - if (name == NULL || value == NULL) { - fprintf(stderr, "Corrupt mbtiles file: null metadata\n"); - exit(EXIT_FAILURE); - } + if (exclude_meta.count((char *) name) == 0) { + if (within) { + state.json_comma_newline(); + } + within = 1; - state.json_write_string((char *) name); - state.json_write_string((char *) value); + if (name == NULL || value == NULL) { + fprintf(stderr, "Corrupt mbtiles file: null metadata\n"); + exit(EXIT_FAILURE); + } + + state.json_write_string((char *) name); + state.json_write_string((char *) value); + } } state.json_write_newline(); @@ -481,6 +483,7 @@ int main(int argc, char **argv) { std::set to_decode; bool pipeline = false; bool stats = false; + std::set exclude_meta; struct option long_options[] = { {"projection", required_argument, 0, 's'}, @@ -490,6 +493,7 @@ int main(int argc, char **argv) { {"tag-layer-and-zoom", no_argument, 0, 'c'}, {"stats", no_argument, 0, 'S'}, {"force", no_argument, 0, 'f'}, + {"exclude-metadata-row", required_argument, 0, 'x'}, {0, 0, 0, 0}, }; @@ -537,15 +541,19 @@ int main(int argc, char **argv) { force = true; break; + case 'x': + exclude_meta.insert(optarg); + break; + default: usage(argv); } } if (argc == optind + 4) { - decode(argv[optind], atoi(argv[optind + 1]), atoi(argv[optind + 2]), atoi(argv[optind + 3]), to_decode, pipeline, stats); + decode(argv[optind], atoi(argv[optind + 1]), atoi(argv[optind + 2]), atoi(argv[optind + 3]), to_decode, pipeline, stats, exclude_meta); } else if (argc == optind + 1) { - decode(argv[optind], -1, -1, -1, to_decode, pipeline, stats); + decode(argv[optind], -1, -1, -1, to_decode, pipeline, stats, exclude_meta); } else { usage(argv); } diff --git a/main.cpp b/main.cpp index 1dbe289..fb19e6a 100644 --- a/main.cpp +++ b/main.cpp @@ -2870,7 +2870,7 @@ int main(int argc, char **argv) { } case 'v': - fprintf(stderr, VERSION); + fprintf(stderr, "%s\n", VERSION); exit(EXIT_FAILURE); case 'P': diff --git a/mbtiles.cpp b/mbtiles.cpp index 8803995..be7eaf4 100644 --- a/mbtiles.cpp +++ b/mbtiles.cpp @@ -17,6 +17,7 @@ #include "text.hpp" #include "milo/dtoa_milo.h" #include "write_json.hpp" +#include "version.hpp" sqlite3 *mbtiles_open(char *dbname, char **argv, int forcetable) { sqlite3 *outdb; @@ -371,6 +372,15 @@ void mbtiles_write_metadata(sqlite3 *outdb, const char *outdir, const char *fnam } sqlite3_free(sql); + sql = sqlite3_mprintf("INSERT INTO metadata (name, value) VALUES ('creator', %Q);", VERSION); + if (sqlite3_exec(db, sql, NULL, NULL, &err) != SQLITE_OK) { + fprintf(stderr, "set type: %s\n", err); + if (!forcetable) { + exit(EXIT_FAILURE); + } + } + sqlite3_free(sql); + if (vector) { size_t elements = 100; std::string buf; diff --git a/tests/join-population/raw-merged-folder-compare/10/164/395.pbf b/tests/join-population/raw-merged-folder-compare/10/164/395.pbf deleted file mode 100644 index 8a65d3ab9ce8397f94faed1ca218d93243d3b888..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33706 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 diff --git a/tests/join-population/raw-merged-folder-compare/10/164/396.pbf b/tests/join-population/raw-merged-folder-compare/10/164/396.pbf deleted file mode 100644 index 16682cd069c44296eb9e6cca311d74b06f7b52af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 215 zcmb2T!dSt?#hII!oLE$nQCg(YpdiKJ806_9#o-p}ng<>6cQ2{AjRq% z;^yqE#LvZRXlP(!Vqs=rX<%t-2omsx8KK}-Ua7>)#ptWV&czxGRA&HJZ*F1^)MI2U zWFWyL#KFM8$jHRR%&eruc}{gcW06&oh#H54QH_d$mXe)XN?eqQhe=+9n1oZDl!A~h pSO*JKhdk#6?G>y^p6TlPvl%Om72Vanz4Lw5^(D=vJ;jafvjI33Ejj=I diff --git a/tests/join-population/raw-merged-folder-compare/11/328/790.pbf b/tests/join-population/raw-merged-folder-compare/11/328/790.pbf deleted file mode 100644 index 7630044c372f60c46344b194b882e40ecd38e4e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31900 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 Zmpk^OKL_K9&4;qd$gzC_QPYY>{vT8zgJu8# diff --git a/tests/join-population/raw-merged-folder-compare/11/328/791.pbf b/tests/join-population/raw-merged-folder-compare/11/328/791.pbf deleted file mode 100644 index 1aebd6a91fe6e79b915233a0feb3cc876cad7832..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1119 zcmZXSy=xRf7>D;`b~7`%o83${>$-%nZbA$}!pwfntk@(mfk-Y$JQd3j3y~-oqF9Qx zg`^N`5eXtG#X>ABEJds=#7Zp0!au;myUFb02W<7c&-?y2D-6@@ITV(`={#s1}_ z*BnWfcJ5qFZEW_^5$s&x1!I4%urd=;gN&C|#sz0tYlxEPMJ8qHWAe|*CRZs%UNuJw zCi1E(SObR5gve!{Yolbc9{7wEZA?`Qp7XjXQWQr(istCBSt0AHF|sO`Oi0Oib2O7Y z6J;f94RXOnS?4@!V;iHnQ67OJZ+d7@wXqGTn;#?_yjCq3`yaF^!&^~+$&e`L( zGkv1#2(OFAoLdvqCQX$G^@Turr;ogqiJ`SUMnmNw?LhPp9sq2Q>vXI$FnR(%0_q)i zrYTb!qk58}1Na5(l6iLucQA~g>(2YchkzKNAHdjW3p%5tHz0b3zB<^nHShk-ElYFK z@=xfOgQ=^z*YcP6m5Y5qOV!BN{3LpZU%U6s%>Wy?i;c++G*%4I7t(`$)ZyM8GEM#poFof>L6Y?Mf)D~~%@R7Pe5!qdK6D?$)N%=A|*@$_?b4Dxi5;&2P~@$qx?b(LZb3JHk}kYe=> zadUQ7;^*QuG&C?WF)*_hjS6rJzgmR9v(5FAR#fZ96MBwgYyE@B|a_|38**+4slMn_&lZ) I{9Fu707YXv-2eap diff --git a/tests/join-population/raw-merged-folder-compare/12/656/1581.pbf b/tests/join-population/raw-merged-folder-compare/12/656/1581.pbf deleted file mode 100644 index 25b28dcacd875e98fe80e1a74a957393f5d2a05b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32793 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 z zeoW*FYM2^b?Dx36sF!g6Xy?ltyPlN|!z&Kmw5g^xezLytB;?KAo_WA^jR{+#Fo z#(qJ1m+|}*QFNC6(unhnuZWwNv}Y&5kye~%QBCN{2>+tnnv|5i^EpY7lauz`B>cM) z^(*To72M?4Bez*?ar!bPDNkR{BX(-io}WYy9Xz5ra3t$!C1HzR3h z61TQ*E~>Pqy`GqrSxJ3S(#+=E#l+1?+DmAZH$-)hPHjL6@AT`rNpVVeDRJ|XcE01# zi#G1qgm)Gs^<_!3kZZi0$VEwe1$k#3MPI^?V!m}v!S&VRq`babLhRC{y^^%9<1r-0 zxh$!#N}A(xZANZMH?R%Q;<>_07re{|s^|eW}ij&t7xjJdrBvZHk72xH4 Ii<_bQUrfdTAOHXW diff --git a/tests/join-population/raw-merged-folder-compare/8/40/98.pbf b/tests/join-population/raw-merged-folder-compare/8/40/98.pbf deleted file mode 100644 index 714d5a1d82f5b10adfb8476f86c01eef2e2e7e84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 794 zcmZXQKX21O7{<@``RuzmaS}*UQkuHAP=u)N?AWnksbi9=B6X_N7RrQZN03+;82JPY zU62q%8TmfU9T9v723|WMj@0G+{(GL^`?~*yd{kNM!<);?cki#>z7~NHa_EY~Pfnj+ zWN|i`o=eeZ$vjW9Wf{|K5hqzPfifM>=E=)4G)^Y-(-%-9X?#}njI(T-BoN?y0WX{8 zX;K&#t#}rv#jF{>0z%n7O|$cCR<_wHo~JND@_1#R$Jr7#;h3o+;5yS_Pi`^-yLv)! z!Z3V7-eUIu6Cf{37GvY$HmA%Crl0s?D7eOyMe$s4)j=FP-~J>VMxS`2qcC#ANb)+X zJ(aF|FM&cY9a%2|d|dh0WWt23mK?luF; zWog4GGwgi-d9`s3;V-zAtLu$?uh_Vi=}LDPy&oW$|5l6W{s^bl71wGFntY4T_NY7@0l06c5(oI&SDTh@16R zqX`CWMr-%1`@BbgAOH2oOf}n0)TPLZ5i%HBiC5%~*2O)2XG4Ba>sz}(zCFGU7Kk(n xQ;?380U{=PmUJI2x5*vtA>PvmTjYHpJJtb^Z{q7 diff --git a/tests/join-population/raw-merged-folder-compare/8/41/98.pbf b/tests/join-population/raw-merged-folder-compare/8/41/98.pbf deleted file mode 100644 index 29c3770d2a5a45925f7d5cde68c73d4988275bf6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25424 zcmZ{s3%FFpmG8T1SM7eBI_E&kE5}!R5}z4Ozji+u<3Nmhz40}QlW}Ge$K*P99?6)= zBsY^d4@5)+L_|bHL_kDDL_|wN|a#XS&A3|3jvdzrNy^SN!&O|M>ggo-{Pml{oL*3(gvR@wq?lN}PS^dFNd) z`24fF^uEF4W2I*D%nysDCHTSFXqaH5)+@TW~!lyMNy! zlWqFD@pQlN->TZbO(aLD2?J9?)ZT01hg2dtPR$;eQhx1yyzzdMIxsNRWoqvejrV)} zF{h`5m%bt#KPgfer>*;v_gh^!l)G57A=yyWqpEH?$ z-6v%F9g{jkWxx01lhS=oI!~tiW@3FhPUzF`m{WTFRaf2|lQLcD0Rsk@Kl@(4qtd?$ zMVOk1pC|XGrVZXE`yP4xvB&oA+qZvbTYKBl{eRH=vLpH?d-v|$eyrCPYg28#j*v&3 z{Fj}bXPtWT(d{}A{o}{?KkoRx?MJs?(*Fm?_wPKlGv3yAa_`d8FMf5^FaPE8Y$=<~74uozm&r?p3?6dU*%#%qU8yrKy!3)0 zmxceF9CGpCGl!gc7G5WRbl!z${v`az_&H}?c`tV7=vu%A@KXx^Q|a!V>a0%z&*3YRO8toDmI6V#T zx5`X;_snkm^!tVKX%z$+>~aK|Q*-(JX@xwZNKg||Z52@^t|6jIgI-Dzp zmCGV7HfEfy1Tax#)MD#cMQ1FUIbJYr)XE_LRwXw3TV`ZJO;Cz`aFR`(*<#K_I zRVtV2UXpJeEANbz@AfheoM)#9FJ=yhf#DXBcjqJTMsjhChu7h&hUvB zHdMZfU=tau*~tJiCkvmv%su~YhbmTbWj0iJ5&%9x$9?3 z6(>wY_O1Xr_!|aQOI$vpSLox=wAsSpD<&U5P?;UqFdq*PMfqH^jfF2a`8dWZ^SR*3 z%N+VIt5&{@TFm-TJ{K)KxaRE=zT#@-q1J6&t$ek_$HGwM+G;uWLCD8gER2RvD)R*& zt3Zlay|P6(0?Q+?F@~Xqd5G;T2(${oiz}$pq76$WXy`aOXBfOjjAch*NXJB=TO70M$=c~+;5!S+0^cr}W$QKYM zS}5|@Dc5tV5^!VY0(Z|rUC5$({O!?<${~d{CQG@hCyHEi3-bZgKWrOV8VyVm( z$OYwABZd{-k`tK$3h-OIZiOr)hj}gEnvC#@830dSW-2RkP@VGdnJZu@rgc=c(^Oxx zMOL+3hQ;gh;cSQytq?ieUVfOW;{0kM1Y2iwMv^E~Ok$a$l5-$9tTV$1qB)KEr-pe@ z;Fh_h5*E2dy|6@^|7!~&W>}lTDpfbHhLXZHf8G{j)l!AkDpcs>%oCN?2yR>^9`PS? z|4)8nWmXF8Acw|H9y_VU_*4MiX;TZ*F55FOei3y+GZfYwul%c(R4O3+FyohSE_5LZ z$dI&+nWPvnH_KPiYwAG~K_78RI8ri6D8ZT`NTLE{BIlF+G*)0$) z`F3VgwCij##Y`y$hc!1sS_{l#7nG*h^)547As`7#3DN4%OS(N%+`iqò)p4#HP_ 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 NlFLeIft%{i{|}E2&%OWv diff --git a/tests/join-population/raw-merged-folder-compare/8/41/99.pbf b/tests/join-population/raw-merged-folder-compare/8/41/99.pbf deleted file mode 100644 index d64337b4869ba0d0eecb5f6aede79c4d81d54dd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 267 zcmb2@V5(r^;>=A|yA@$_?b4Dxi5;&2P~@$qx?b(LZb3JHk}kYe=> zadUQ7;^*QuG&C?Vu`n~RG_bTZ1PS=Uj8JeZuT)~@V)RvF=VA>8sxyGAH#ac{>M=5g z3K*MN8URI%ObwK{xj5klK=hdy7zk-eFbQ!mFfcMQF)=eM$#8aY&S#7g5Mblt3z0J7 zk>lc#5|WUR;L%Z$Qxnnvt7Uyt4>z05-Tn6Vn)C^Yx|AHhgn_-{86S-o5ea}5>zrRn zZ1ZKtI2#Gt9?lAOA)z@L71MLU8F@A@HFM6#j0u3&OEF=*&RKb|l(JctmtHHo6bVwE z=6u0tQidHa@`zvrD(Pb#G*Js%V2EllA=m&Uo)kC1`)@3ENx1;S@++a-OwcDi(j{1f z+OixgtcD6k;p;cU!rF?HPCB6JAi{NU+7YFlm=ZeZ{e^XRVG)Vwewd&oRfWk7h3{Y6 z>S`*w(!Hy3(u@7}k>&@AQmd(|rXi&3hGCkPW!nIb`lja53wWcA1A)@oIHBJLncu- diff --git a/tests/join-population/raw-merged-folder-compare/9/82/197.pbf b/tests/join-population/raw-merged-folder-compare/9/82/197.pbf deleted file mode 100644 index 7a43ed7bf5a29ff66e235f2e6a3c3cdb0493f050..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30898 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 hhOyj^LSkTbtc+|xQ`wa`I4=NA+2V0S)-&*769 zp1_vi!pQQT``vTTvA)vpCMkGqve0ib&=((IWrpk(t-QmzLanXrPzI>!A=!77D-{eR zpCP>@HM`U7!Vtz%GZ-zzua&2N?ze0}av#J?99kcoz>MqGzQ1>?uUJS9A2ah8sDZ zB6>2^NGs&L)wJR14(wLoLHw@%KWm$o$;lv`EFu^%S1}$J?kiluD0Gv~J-d@QJg`;Z zN#!H-#gaF6`NVy1nr_kl7h#^bNwa*ef|MfX24$2$~&AZ)Y{4pWPqCPlU+x-QbAwx zDbfp4wcCvj3}7TRgCSFM4KFML7)lig=JOgnj-cCV+8t_=6g?n&j&Nsw%qF(9Ldvb{ ztHfX(%#Gmfx~ckv)1dP+*qooWf+CL`22I6Qh_*r3}L~X}0ir^j+UbX(MB1|4KO{zoAyY)Q(Xw J$(mZ#e*ko*bY%bl diff --git a/tests/raw-tiles/compare/10/163/366.pbf b/tests/raw-tiles/compare/10/163/366.pbf deleted file mode 100644 index 719467042595d447cc12731246cfcd4a3b8f1c4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 437 zcmZvX%}&BV6oqLERK}ku8>Mb;#t<|TLlGn_i$8Hekf4d{DKk*Q*fBFL*qu*cd=OWz zjL+et_yA6|J6YcEo_p>&&b#$wqEbM{bM+`9b@&WUen1|WV|$cJrj%0{h=?h?iPk;o z3kiKerwkvXBe&h?zyL-<5f~CVS8z`ffT55PCn2rF%?P@krrW_L%Hb`v;c@C>J<0DjyRZKWfz>if@2N6e{MG8a+YDO6>^-d2w!TYFk7f8n7O3qkF z6`YI7gt0)xis33cXf|B9y#%)z1)$&6|7UIC3fk?*<9Pyo;!8qx;htnm7{-3ux$Cx5 zhikHo0wF^NJ-(nPt9*3d3o(VsZxWuAclL~OF_$w8)5L|+oB3&F$TIR~L8CA0yO^P( VVgIS@*X<0g86^{G)rJiQG!H5SOf{>;!i9H5;U=%Wd@co?wFZfa62Ew!rIcO z@e!;otew^Eq`cof_uO-=_wohaChNrZETBc zsM#B%DX!hAL`+2m{Un1;PilpbXY}rw1P415~;5Bx7(T7tE&$ z&c$rTm?uKTa1|Z4TQ=NYg53^0(C-@mvvzO=?G3}}GJ+v-C84_TK(aNALpSc+x4W^! zHCYFqkUoO}U(x0!AKmvt%whJMgh%DweWRR9r3}L~aklW0`OYOMZDh=>MsNAgVuEr; U{!dkUg#>LG1rur2OX=(A2W%#D{Qv*} diff --git a/tests/raw-tiles/compare/12/652/1464.pbf b/tests/raw-tiles/compare/12/652/1464.pbf deleted file mode 100644 index ac5dcea87777733041ab4bf2854c85e7bdd908b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 330 zcmZvWF;9a~6ommx8=kg_os`Dp=9#88G8C*5H;K{7U{g(;A95?ClxN-rmCc{zPjGW} z@MriVq>)X>^PO|gJ@$w3VlXQa_e*+|1s%MC-3rAD?M@KK3W;nplm!y+vdut6Qo)ss zACMoiv3or6A%wXk0W+bN1b3nWm`PP+B99%op2Ml{xjr|T#(Qil$f7i_v+G(uV#Ddl z(Ym0)!4v*_JZ7VkN|9w1L?u-Y$g;?=Adopw8Y4W{UM;eU57_Q)q7dOyrI^PA=W?+? zOk_#Ohiu=QxNvg;u2&>bzjOX>o%XkP^nP2@blotxX}wwB-3D#wEyJwQSMPJsptj!m JP3^s({Q&sJS7QJG diff --git a/tests/raw-tiles/compare/12/652/1465.pbf b/tests/raw-tiles/compare/12/652/1465.pbf deleted file mode 100644 index 3bc62f101054f5df188ba78484700b25e535911e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 238 zcmb1o%~-+2#hH#qOArQj}U;EXC@VUy@p^B+Vrml2MeJ zs^C_XnVOeUtl*rVmX?~DkzZPzs-()LY-C`l5bUa8XjGD+;8>QbqY#i^RFadJm!hNK zAEaPuZe(bp#Kgs*B*`W2Q<|Jzso;~CRFs&KU!>qvlv=J3P@1Hq&82B+XbLjLBeA?B zBflswRlzBzEJY8SS$tePF8S#SX<*mnR0;`5Fbc6TFfcMQF)6WdZjf~l5(JAdGqNzT MDzS3zka@xh08AD?G5`Po diff --git a/tests/raw-tiles/compare/13/1304/2928.pbf b/tests/raw-tiles/compare/13/1304/2928.pbf deleted file mode 100644 index f0341261b4663c383b8bc942074a6790bfef2507..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 243 zcmb38z*xb=#hH#qOArQj}U;EXC@VUy@p^#LLC)Sd^4s zq~MdElAfxh&82B*YGAJ5rx281oTw0xSd?9?5T016pb(H>RFadJm!hNKAEaPuZe(b# z#Kgs*#K*_ diff --git a/tests/raw-tiles/compare/13/1304/2929.pbf b/tests/raw-tiles/compare/13/1304/2929.pbf deleted file mode 100644 index d9dfd14ab940529d85b1fe18e409deb9724f71b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132 zcmb1YWUOG~;><`)&Mq#^ErOUzA`Vs}hQDM~FamSXkGFG(#{lID^O$tX%q zRd6fHOwCIvR&dTwOG{17$S*BURZ`_rHZm|&2zFI4G%CqZa4bvJQ3%K{D#=OAOVLsA j4^pr+H!?I)V&Y;D5|m&RVq;)nWMpDeV&!~f)!+yK^^hXc diff --git a/tests/raw-tiles/compare/13/1304/2930.pbf b/tests/raw-tiles/compare/13/1304/2930.pbf deleted file mode 100644 index ebca5185a0411daf111b798f7063c9040739c5c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 239 zcmb1o!&t$@#hH#qOArQj}U;EXC@VUy@p^B+Vrml2MeJ zs^C_XnVOeUtl*rVmX?~DkzZPzs-()LY-C`l5bUa8XjGD+;8>QbqY#i^RFadJm!hNK zAEaPuZe(bp#Kgs*B*`W2Q<|Jzso;~CRFs&KU!>qvlv=J3P@1Hq&82B+XbLjLBeA?B zBflswRlzBzEJY8SS$tePF8S#SX<*mnR0;`7Fbc6TFfcMQF)6WfKC)_HgbFb;vM{j% Kg+5rE5C#C3c0dOJ diff --git a/tests/raw-tiles/compare/14/2608/5856.pbf b/tests/raw-tiles/compare/14/2608/5856.pbf deleted file mode 100644 index 73e0b3e3575d622e60b255cbaef9b2093454ada9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123 zcmb2DtYG5e%t%bmE-uI~Db{FEkYe#m%uSVIcT7nsN-ZvyV)e@}NiA05<>GcMO3E)% z@X1d}PgT<9(lj(RFjw$X2+A)`R0v2c$}Uz2Ppni>2*@ug$w|yh(NXXZQm`~PGBj6W a;$jdIlwcHMV_;xpWMWcc7jUTlD diff --git a/tests/raw-tiles/compare/14/2608/5857.pbf b/tests/raw-tiles/compare/14/2608/5857.pbf deleted file mode 100644 index e05593a22dc2f6bf4168cf460c5e820dfdc12bf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 zcmb1|%UHq0#hH#qOArQj}U;EXC@VUy@p^#K*`^@QZ+F%HdpXdfC@X7r79={|b BE(8Do diff --git a/tests/raw-tiles/compare/14/2609/5860.pbf b/tests/raw-tiles/compare/14/2609/5860.pbf deleted file mode 100644 index cf7c0f1cc07929f4617c8bd912105ecb75487edc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 239 zcmb1o!&t$@#hH#qOArQj}U;EXC@VUy@p^B+Vrml2MeJ zs^C_XnVOeUtl*rVmX?~DkzZPzs-()LY-C`l5bUa8XjGD+;8>QbqY#i^RFadJm!hNK zAEaPuZe(bp#Kgs*B*`W2Q<|Jzso;~CRFs&KU!>qvlv=J3P@1Hq&82B+XbLjLBeA?B zBflswRlzBzEJY8SS$tePF8S#SX<*mnR0;`7Fbc6TFfcMQF)6Wf9x-iVf(kJ+vM{j% Kg&r7APzL~$<3Fqb diff --git a/tests/raw-tiles/compare/2/0/1.pbf b/tests/raw-tiles/compare/2/0/1.pbf deleted file mode 100644 index 33d96a02b61f7cbb1130cbb9bece6cf3ac4f9456..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 437 zcmZvX%}&BV6oqN|lkq2!jZ!u@V+at5p$HO|#h{5$rBzaC zUtJ~!8|*A`=W(4>Lme_9B5*?;H9&@ez(9laLC-nDD&EC|h-jIVo;-yJcWRD4*KjST zQ$$aO8fk@`wVF0O-h$ll{%38|5;+-!lSKpr<|@YH!hMA+7=>=qxo3A0hkLdP zJgIzyzF6{$T|RN&8##mNI*Evi$EQXymr5CiY0_-rr}kOiptO-OvupIVML8qCR{hq# Nw`k8Om?Tyu=nsH2bh`im diff --git a/tests/raw-tiles/compare/3/1/2.pbf b/tests/raw-tiles/compare/3/1/2.pbf deleted file mode 100644 index 9cc9229dc02533bdf1091ef1fdac5f7cc4f7acb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 437 zcmZvXOHaZ;6oqMd$@oahMyZ>dF$9UkPy`#6#YbEaBxvG#$_$n;cFar*c4u6;HvSZU zf(w3^Qvxel-tV4!?m6~P_RU14fQ)DARYdCa9qinIyfC}yQ7V~Ic77ltrtm)6^`tK( z^aXup_zcyZPSb?}jD#XEByy(Ui6j6+AtO#g+JO5JblsNYViRTX0owDpKMl1uwZ%15 zZC_rb25aoi+1BGas>LcMoG0MNDrta-BhDfPA_O(13>JE)2cF<#RCx>}V{j{{ETjsq z#AL!)AY#RE6`i!24m{j|(~1Jn?;8KJws8d=_T%v^fj;pip}KHSvIPudKkeLgI;q1Q zSww-5A%h;D)AMaUy6?4khRG@kPs-MjQ7&XMhGCjGU;4E^+%?J?IWxaPpBq##iYwL9 Q`r4o!qhunjT3X-kA66D~a{vGU diff --git a/tests/raw-tiles/compare/4/2/5.pbf b/tests/raw-tiles/compare/4/2/5.pbf deleted file mode 100644 index 2afba5c9a4b0f503fb76e83a7fbb4bea466fa044..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 437 zcmZvXOHaZ;6oqMd$@oZQqtwmKGz5u+Py`9f;v+5y5;So=Wd=(aJ7%T@yK`Y!8GeHc ze}TWyDS?$N?|08V_Z;gt{cfUyPsTI#CPH=o0aj)}UYV75DV0nqD?1P&Q}__=yV4U9 z`hvbNe1WP?yU~FGjD#XEByy(UnZy7?Awy0AT7!oXbURI_gH4peN9e%i-ZaqK#1>aj zxpj4!7;LaRXFHFps1m7&a2|sfskjCr3ONfEhyc`-GFa%H9(at;Q0d8+jKQ6pvVbbM z7Ly5MzK9gVWn?!S4m{q1(+qvk?`r?Ewr~lZ^rP`ChCcBmp}KHSvIPtyFX`NM+KIzG zS%kij0fQc&)A}wS-Sl>6dGGO+2V0SKE7$3m! z6h47VAImAhl`QXf&pr1X`z!roqP$N=GxaP&b@B>!rca)jopULbOes6t7a>!47j3)J z6B2rYP8dE#Ri{;NLm!4h5f~6TQ}9S)fPs)9CjqU&-4HtMhSSC-O5r`U<8p5rXl-JP zE2!MOI8O}L*qyVD$5m8`R75zB!HZN}0}+Lsg$hIfYDyU_^iB^v#z(05;7i8fMow8k z6#{{%39CB0A_rqgf0+;z>ev;jUy07(`yux#P4F zhg-4;eIWw|T|TF0n|yTND=~rbDhZDZ`-eusN~H|LG;ucnX1$lzC~aiStVSQ!=O40+ U+)A~yzW>mckvEZ6Ev=u@FEc!Hod5s; diff --git a/tests/raw-tiles/compare/6/10/22.pbf b/tests/raw-tiles/compare/6/10/22.pbf deleted file mode 100644 index 24aef73db36ec3d0ec69260fead8a0694e638a02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 437 zcmZvX%}&BV6oqN|ld+n}MyZ>dF$9UkPz15d;!j)ZYG(Lq3 zV|+RXf-70xbH97;IreAz%|wNO45#WYX7q~aS0uE1|2@5=i7XA-y1Q8(K-oFiU&tVF_%gihH2t#VQIZzZKSl3F|%6wu)hAJoRMEs SKi0zCP&-D!M4I}xmhLZ1>vJst diff --git a/tests/raw-tiles/compare/7/20/45.pbf b/tests/raw-tiles/compare/7/20/45.pbf deleted file mode 100644 index a1d06173fab548fafc227bbcf9b252e4d38bc4d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 437 zcmZvX%}&BV6oqN|lkq2!jiqjG#tT*>mD``vTTvEQ>#CMpGFJX4P%QisoA=LY0~*+q|1$&|A50}(NWx6!62 zeIcPQ=sm+nsP43z9T>n!C;~$wXA15}0x%RZ;v}RExE?{b<2oH|q72?aTORkPp=MKC zTtn5?=}Bs^lD#=wdt67gSjB|%1pHVf4G?j}S)@ROpr(|;Lhtmz6TFWqw}E5~F6ESk zRKb~;Oc)D9tQfAM1GnkG%>_7a6o7u$_@A|fD`>ADk7o(=i7yG&g?o}MU>N&p=dROE z9j?eC3WN+9^!S_}uk+D;&&54VmPvS0-nEQ!A(Jr-)5Q7GtM$=bNm(Oj=C$-`ef>!V WqqwAgtQU7hZ5SmJY3kd0bAJJD3Uo^V diff --git a/tests/raw-tiles/compare/8/40/91.pbf b/tests/raw-tiles/compare/8/40/91.pbf deleted file mode 100644 index 51b31e8308025c5845037e9d96f9b0a93dd7ba7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 437 zcmZvXy-or_6ouL4PsX1_8f9&+BLs=W>>@}g7k^?wkf4e6EHki#amUQ;g451W2|8i;1l63D-G)94g(5H@a;D&c!~g>!Lrwx(hua}^+6||TO_ahrXv^i^G|<|_ z7FSWFd484{tgt(0YmaNF8mWkI9)lODxDFx;ISUnt0MwK+Sm>P|c#IEF>E4%&!L^*S zfGW5U<1u5th!n#WbkwjNxVr+U5&EFt)&FO0;u6~HMWa~^J>p41b>XgL3m8OR(z)Zb z5{DbI2z?;~23Mb8LkJRyp$HO|;7?o-BxvG#$_$h+cFar*cIVP3aOG3D z^Z|SXS3ZGH;gobI%lqAP&ppTfNI#p%^2lVNo0lG3@E+Rfad+-( zZETCHsM0z=iwzRoTe6MEHB=2%NH~wc4OLVJ5eA$E3WN`8P8qE9P7gf7N2qx3Nygw> z&Y4dYT!`tEF;9ew;R-4@8xGuEfzu2;(C_O1v$k*%9Sp+BB7y;NC84@-U$Pa9LO1T* zb=tAR4Os=AkUoPxU((Y}KDzIvn89?Nghz$_L!+>jN*RV};;i*n`Y{reHZo>bqu Date: Thu, 7 Jun 2018 13:27:49 -0700 Subject: [PATCH 2/4] Turn off progress indicators during tests (For the sake of Travis's 4MB log limit) Also fix a few places that logged progress even when told not to. --- Makefile | 102 +++++++++++++++++++++++++++---------------------------- main.cpp | 16 ++++++--- tile.cpp | 4 ++- 3 files changed, 66 insertions(+), 56 deletions(-) diff --git a/Makefile b/Makefile index a9ba102..f858a8d 100644 --- a/Makefile +++ b/Makefile @@ -89,7 +89,7 @@ suffixes = json json.gz # Work around Makefile and filename punctuation limits: _ for space, @ for :, % for / %.json.check: - ./tippecanoe -a@ -f -o $@.mbtiles $(subst @,:,$(subst %,/,$(subst _, ,$(patsubst %.json.check,%,$(word 4,$(subst /, ,$@)))))) $(foreach suffix,$(suffixes),$(wildcard $(subst $(SPACE),/,$(wordlist 1,2,$(subst /, ,$@)))/*.$(suffix))) < /dev/null + ./tippecanoe -q -a@ -f -o $@.mbtiles $(subst @,:,$(subst %,/,$(subst _, ,$(patsubst %.json.check,%,$(word 4,$(subst /, ,$@)))))) $(foreach suffix,$(suffixes),$(wildcard $(subst $(SPACE),/,$(wordlist 1,2,$(subst /, ,$@)))/*.$(suffix))) < /dev/null ./tippecanoe-decode -x creator $@.mbtiles > $@.out cmp $@.out $(patsubst %.check,%,$@) rm $@.out $@.mbtiles @@ -104,7 +104,7 @@ fewer-tests: tippecanoe tippecanoe-decode geobuf-test raw-tiles-test parallel-te %.json.checkbuf: for i in $(wildcard $(subst $(SPACE),/,$(wordlist 1,2,$(subst /, ,$@)))/*.json); do ./tippecanoe-json-tool -w $$i | ./node_modules/geobuf/bin/json2geobuf > $$i.geobuf; done for i in $(wildcard $(subst $(SPACE),/,$(wordlist 1,2,$(subst /, ,$@)))/*.json.gz); do gzip -dc $$i | ./tippecanoe-json-tool -w | ./node_modules/geobuf/bin/json2geobuf > $$i.geobuf; done - ./tippecanoe -a@ -f -o $@.mbtiles $(subst @,:,$(subst %,/,$(subst _, ,$(patsubst %.json.checkbuf,%,$(word 4,$(subst /, ,$@)))))) $(foreach suffix,$(suffixes),$(addsuffix .geobuf,$(wildcard $(subst $(SPACE),/,$(wordlist 1,2,$(subst /, ,$@)))/*.$(suffix)))) < /dev/null + ./tippecanoe -q -a@ -f -o $@.mbtiles $(subst @,:,$(subst %,/,$(subst _, ,$(patsubst %.json.checkbuf,%,$(word 4,$(subst /, ,$@)))))) $(foreach suffix,$(suffixes),$(addsuffix .geobuf,$(wildcard $(subst $(SPACE),/,$(wordlist 1,2,$(subst /, ,$@)))/*.$(suffix)))) < /dev/null ./tippecanoe-decode -x creator $@.mbtiles | sed 's/checkbuf/check/g' > $@.out cmp $@.out $(patsubst %.checkbuf,%,$@) rm $@.out $@.mbtiles @@ -117,12 +117,12 @@ parallel-test: perl -e 'for ($$i = 0; $$i < 20; $$i++) { $$lon = rand(360) - 180; $$lat = rand(180) - 90; $$v = rand(1); print "{ \"type\": \"Feature\", \"properties\": { }, \"tippecanoe\": { \"layer\": \"$$v\" }, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ $$lon, $$lat ] } }\n"; }' > tests/parallel/in4.json echo -n "" > tests/parallel/empty1.json echo "" > tests/parallel/empty2.json - ./tippecanoe -z5 -f -pi -l test -n test -o tests/parallel/linear-file.mbtiles tests/parallel/in[1234].json tests/parallel/empty[12].json - ./tippecanoe -z5 -f -pi -l test -n test -P -o tests/parallel/parallel-file.mbtiles tests/parallel/in[1234].json tests/parallel/empty[12].json - cat tests/parallel/in[1234].json | ./tippecanoe -z5 -f -pi -l test -n test -o tests/parallel/linear-pipe.mbtiles - cat tests/parallel/in[1234].json | ./tippecanoe -z5 -f -pi -l test -n test -P -o tests/parallel/parallel-pipe.mbtiles - cat tests/parallel/in[1234].json | sed 's/^/@/' | tr '@' '\036' | ./tippecanoe -z5 -f -pi -l test -n test -o tests/parallel/implicit-pipe.mbtiles - ./tippecanoe -z5 -f -pi -l test -n test -P -o tests/parallel/parallel-pipes.mbtiles <(cat tests/parallel/in1.json) <(cat tests/parallel/empty1.json) <(cat tests/parallel/empty2.json) <(cat tests/parallel/in2.json) /dev/null <(cat tests/parallel/in3.json) <(cat tests/parallel/in4.json) + ./tippecanoe -q -z5 -f -pi -l test -n test -o tests/parallel/linear-file.mbtiles tests/parallel/in[1234].json tests/parallel/empty[12].json + ./tippecanoe -q -z5 -f -pi -l test -n test -P -o tests/parallel/parallel-file.mbtiles tests/parallel/in[1234].json tests/parallel/empty[12].json + cat tests/parallel/in[1234].json | ./tippecanoe -q -z5 -f -pi -l test -n test -o tests/parallel/linear-pipe.mbtiles + cat tests/parallel/in[1234].json | ./tippecanoe -q -z5 -f -pi -l test -n test -P -o tests/parallel/parallel-pipe.mbtiles + cat tests/parallel/in[1234].json | sed 's/^/@/' | tr '@' '\036' | ./tippecanoe -q -z5 -f -pi -l test -n test -o tests/parallel/implicit-pipe.mbtiles + ./tippecanoe -q -z5 -f -pi -l test -n test -P -o tests/parallel/parallel-pipes.mbtiles <(cat tests/parallel/in1.json) <(cat tests/parallel/empty1.json) <(cat tests/parallel/empty2.json) <(cat tests/parallel/in2.json) /dev/null <(cat tests/parallel/in3.json) <(cat tests/parallel/in4.json) ./tippecanoe-decode -x creator tests/parallel/linear-file.mbtiles > tests/parallel/linear-file.json ./tippecanoe-decode -x creator tests/parallel/parallel-file.mbtiles > tests/parallel/parallel-file.json ./tippecanoe-decode -x creator tests/parallel/linear-pipe.mbtiles > tests/parallel/linear-pipe.json @@ -137,14 +137,14 @@ parallel-test: rm tests/parallel/*.mbtiles tests/parallel/*.json raw-tiles-test: - ./tippecanoe -f -e tests/raw-tiles/raw-tiles -r1 tests/raw-tiles/hackspots.geojson -pC + ./tippecanoe -q -f -e tests/raw-tiles/raw-tiles -r1 tests/raw-tiles/hackspots.geojson -pC ./tippecanoe-decode -x creator tests/raw-tiles/raw-tiles > tests/raw-tiles/raw-tiles.json.check cmp tests/raw-tiles/raw-tiles.json.check tests/raw-tiles/raw-tiles.json rm -rf tests/raw-tiles/raw-tiles tests/raw-tiles/compare.json.check decode-test: mkdir -p tests/muni/decode - ./tippecanoe -z11 -Z11 -f -o tests/muni/decode/multi.mbtiles tests/muni/*.json + ./tippecanoe -q -z11 -Z11 -f -o tests/muni/decode/multi.mbtiles tests/muni/*.json ./tippecanoe-decode -x creator -l subway tests/muni/decode/multi.mbtiles > tests/muni/decode/multi.mbtiles.json.check ./tippecanoe-decode -x creator -c tests/muni/decode/multi.mbtiles > tests/muni/decode/multi.mbtiles.pipeline.json.check ./tippecanoe-decode -x creator tests/muni/decode/multi.mbtiles 11 327 791 > tests/muni/decode/multi.mbtiles.onetile.json.check @@ -164,24 +164,24 @@ pbf-test: rm tests/pbf/11-328-791.3857.vector.pbf.out enumerate-test: - ./tippecanoe -z5 -f -o tests/ne_110m_admin_0_countries/out/enum.mbtiles tests/ne_110m_admin_0_countries/in.json.gz + ./tippecanoe -q -z5 -f -o tests/ne_110m_admin_0_countries/out/enum.mbtiles tests/ne_110m_admin_0_countries/in.json.gz ./tippecanoe-enumerate tests/ne_110m_admin_0_countries/out/enum.mbtiles > tests/ne_110m_admin_0_countries/out/enum.check cmp tests/ne_110m_admin_0_countries/out/enum tests/ne_110m_admin_0_countries/out/enum.check rm tests/ne_110m_admin_0_countries/out/enum.mbtiles tests/ne_110m_admin_0_countries/out/enum.check join-test: tile-join - ./tippecanoe -f -z12 -o tests/join-population/tabblock_06001420.mbtiles -YALAND10:'Land area' -L'{"file": "tests/join-population/tabblock_06001420.json", "description": "population"}' - ./tippecanoe -f -Z5 -z10 -o tests/join-population/macarthur.mbtiles -l macarthur tests/join-population/macarthur.json - ./tile-join -f -Z6 -z9 -o tests/join-population/macarthur-6-9.mbtiles tests/join-population/macarthur.mbtiles + ./tippecanoe -q -f -z12 -o tests/join-population/tabblock_06001420.mbtiles -YALAND10:'Land area' -L'{"file": "tests/join-population/tabblock_06001420.json", "description": "population"}' + ./tippecanoe -q -f -Z5 -z10 -o tests/join-population/macarthur.mbtiles -l macarthur tests/join-population/macarthur.json + ./tile-join -q -f -Z6 -z9 -o tests/join-population/macarthur-6-9.mbtiles tests/join-population/macarthur.mbtiles ./tippecanoe-decode -x creator tests/join-population/macarthur-6-9.mbtiles > tests/join-population/macarthur-6-9.mbtiles.json.check cmp tests/join-population/macarthur-6-9.mbtiles.json.check tests/join-population/macarthur-6-9.mbtiles.json rm -f tests/join-population/macarthur-6-9.mbtiles.json.check tests/join-population/macarthur-6-9.mbtiles - ./tippecanoe -f -d10 -D10 -Z9 -z11 -o tests/join-population/macarthur2.mbtiles -l macarthur tests/join-population/macarthur2.json + ./tippecanoe -q -f -d10 -D10 -Z9 -z11 -o tests/join-population/macarthur2.mbtiles -l macarthur tests/join-population/macarthur2.json ./tile-join --quiet --force -o tests/join-population/joined.mbtiles -x GEOID10 -c tests/join-population/population.csv tests/join-population/tabblock_06001420.mbtiles ./tile-join --quiet --force --no-tile-stats -o tests/join-population/joined-no-tile-stats.mbtiles -x GEOID10 -c tests/join-population/population.csv tests/join-population/tabblock_06001420.mbtiles - ./tile-join -f -i -o tests/join-population/joined-i.mbtiles -x GEOID10 -c tests/join-population/population.csv tests/join-population/tabblock_06001420.mbtiles - ./tile-join -f -o tests/join-population/merged.mbtiles tests/join-population/tabblock_06001420.mbtiles tests/join-population/macarthur.mbtiles tests/join-population/macarthur2.mbtiles - ./tile-join -f -c tests/join-population/windows.csv -o tests/join-population/windows.mbtiles tests/join-population/macarthur.mbtiles + ./tile-join -q -f -i -o tests/join-population/joined-i.mbtiles -x GEOID10 -c tests/join-population/population.csv tests/join-population/tabblock_06001420.mbtiles + ./tile-join -q -f -o tests/join-population/merged.mbtiles tests/join-population/tabblock_06001420.mbtiles tests/join-population/macarthur.mbtiles tests/join-population/macarthur2.mbtiles + ./tile-join -q -f -c tests/join-population/windows.csv -o tests/join-population/windows.mbtiles tests/join-population/macarthur.mbtiles ./tippecanoe-decode -x creator --maximum-zoom=11 --minimum-zoom=4 tests/join-population/joined.mbtiles > tests/join-population/joined.mbtiles.json.check ./tippecanoe-decode -x creator --maximum-zoom=11 --minimum-zoom=4 tests/join-population/joined-no-tile-stats.mbtiles > tests/join-population/joined-no-tile-stats.mbtiles.json.check ./tippecanoe-decode -x creator tests/join-population/joined-i.mbtiles > tests/join-population/joined-i.mbtiles.json.check @@ -192,60 +192,60 @@ join-test: tile-join cmp tests/join-population/joined-i.mbtiles.json.check tests/join-population/joined-i.mbtiles.json cmp tests/join-population/merged.mbtiles.json.check tests/join-population/merged.mbtiles.json cmp tests/join-population/windows.mbtiles.json.check tests/join-population/windows.mbtiles.json - ./tile-join -f -l macarthur -n "macarthur name" -N "macarthur description" -A "macarthur attribution" -o tests/join-population/just-macarthur.mbtiles tests/join-population/merged.mbtiles - ./tile-join -f -L macarthur -o tests/join-population/no-macarthur.mbtiles tests/join-population/merged.mbtiles + ./tile-join -q -f -l macarthur -n "macarthur name" -N "macarthur description" -A "macarthur attribution" -o tests/join-population/just-macarthur.mbtiles tests/join-population/merged.mbtiles + ./tile-join -q -f -L macarthur -o tests/join-population/no-macarthur.mbtiles tests/join-population/merged.mbtiles ./tippecanoe-decode -x creator tests/join-population/just-macarthur.mbtiles > tests/join-population/just-macarthur.mbtiles.json.check ./tippecanoe-decode -x creator tests/join-population/no-macarthur.mbtiles > tests/join-population/no-macarthur.mbtiles.json.check cmp tests/join-population/just-macarthur.mbtiles.json.check tests/join-population/just-macarthur.mbtiles.json cmp tests/join-population/no-macarthur.mbtiles.json.check tests/join-population/no-macarthur.mbtiles.json - ./tile-join --no-tile-compression -f -e tests/join-population/raw-merged-folder tests/join-population/tabblock_06001420.mbtiles tests/join-population/macarthur.mbtiles tests/join-population/macarthur2.mbtiles + ./tile-join -q --no-tile-compression -f -e tests/join-population/raw-merged-folder tests/join-population/tabblock_06001420.mbtiles tests/join-population/macarthur.mbtiles tests/join-population/macarthur2.mbtiles ./tippecanoe-decode -x creator tests/join-population/raw-merged-folder > tests/join-population/raw-merged-folder.json.check cmp tests/join-population/raw-merged-folder.json.check tests/join-population/raw-merged-folder.json rm -f tests/join-population/raw-merged-folder.json.check - ./tippecanoe -z12 -f -e tests/join-population/tabblock_06001420-folder -YALAND10:'Land area' -L'{"file": "tests/join-population/tabblock_06001420.json", "description": "population"}' - ./tippecanoe -Z5 -z10 -f -e tests/join-population/macarthur-folder -l macarthur tests/join-population/macarthur.json - ./tippecanoe -d10 -D10 -Z9 -z11 -f -e tests/join-population/macarthur2-folder -l macarthur tests/join-population/macarthur2.json - ./tile-join -f -o tests/join-population/merged-folder.mbtiles tests/join-population/tabblock_06001420-folder tests/join-population/macarthur-folder tests/join-population/macarthur2-folder + ./tippecanoe -q -z12 -f -e tests/join-population/tabblock_06001420-folder -YALAND10:'Land area' -L'{"file": "tests/join-population/tabblock_06001420.json", "description": "population"}' + ./tippecanoe -q -Z5 -z10 -f -e tests/join-population/macarthur-folder -l macarthur tests/join-population/macarthur.json + ./tippecanoe -q -d10 -D10 -Z9 -z11 -f -e tests/join-population/macarthur2-folder -l macarthur tests/join-population/macarthur2.json + ./tile-join -q -f -o tests/join-population/merged-folder.mbtiles tests/join-population/tabblock_06001420-folder tests/join-population/macarthur-folder tests/join-population/macarthur2-folder ./tippecanoe-decode -x creator tests/join-population/merged-folder.mbtiles > tests/join-population/merged-folder.mbtiles.json.check cmp tests/join-population/merged-folder.mbtiles.json.check tests/join-population/merged-folder.mbtiles.json - ./tile-join -n "merged name" -N "merged description" -f -e tests/join-population/merged-mbtiles-to-folder tests/join-population/tabblock_06001420.mbtiles tests/join-population/macarthur.mbtiles tests/join-population/macarthur2.mbtiles - ./tile-join -n "merged name" -N "merged description" -f -e tests/join-population/merged-folders-to-folder tests/join-population/tabblock_06001420-folder tests/join-population/macarthur-folder tests/join-population/macarthur2-folder + ./tile-join -q -n "merged name" -N "merged description" -f -e tests/join-population/merged-mbtiles-to-folder tests/join-population/tabblock_06001420.mbtiles tests/join-population/macarthur.mbtiles tests/join-population/macarthur2.mbtiles + ./tile-join -q -n "merged name" -N "merged description" -f -e tests/join-population/merged-folders-to-folder tests/join-population/tabblock_06001420-folder tests/join-population/macarthur-folder tests/join-population/macarthur2-folder ./tippecanoe-decode -x creator tests/join-population/merged-mbtiles-to-folder > tests/join-population/merged-mbtiles-to-folder.json.check ./tippecanoe-decode -x creator tests/join-population/merged-folders-to-folder > tests/join-population/merged-folders-to-folder.json.check cmp tests/join-population/merged-mbtiles-to-folder.json.check tests/join-population/merged-folders-to-folder.json.check rm -f tests/join-population/merged-mbtiles-to-folder.json.check tests/join-population/merged-folders-to-folder.json.check - ./tile-join -f -c tests/join-population/windows.csv -o tests/join-population/windows-merged.mbtiles tests/join-population/macarthur.mbtiles tests/join-population/macarthur2-folder - ./tile-join -c tests/join-population/windows.csv -f -e tests/join-population/windows-merged-folder tests/join-population/macarthur.mbtiles tests/join-population/macarthur2-folder - ./tile-join -f -o tests/join-population/windows-merged2.mbtiles tests/join-population/windows-merged-folder + ./tile-join -q -f -c tests/join-population/windows.csv -o tests/join-population/windows-merged.mbtiles tests/join-population/macarthur.mbtiles tests/join-population/macarthur2-folder + ./tile-join -q -c tests/join-population/windows.csv -f -e tests/join-population/windows-merged-folder tests/join-population/macarthur.mbtiles tests/join-population/macarthur2-folder + ./tile-join -q -f -o tests/join-population/windows-merged2.mbtiles tests/join-population/windows-merged-folder ./tippecanoe-decode -x creator tests/join-population/windows-merged.mbtiles > tests/join-population/windows-merged.mbtiles.json.check ./tippecanoe-decode -x creator tests/join-population/windows-merged2.mbtiles > tests/join-population/windows-merged2.mbtiles.json.check cmp tests/join-population/windows-merged.mbtiles.json.check tests/join-population/windows-merged2.mbtiles.json.check - ./tile-join -f -o tests/join-population/macarthur-and-macarthur2-merged.mbtiles tests/join-population/macarthur.mbtiles tests/join-population/macarthur2-folder - ./tile-join -f -e tests/join-population/macarthur-and-macarthur2-folder tests/join-population/macarthur.mbtiles tests/join-population/macarthur2-folder - ./tile-join -f -o tests/join-population/macarthur-and-macarthur2-merged2.mbtiles tests/join-population/macarthur-and-macarthur2-folder + ./tile-join -q -f -o tests/join-population/macarthur-and-macarthur2-merged.mbtiles tests/join-population/macarthur.mbtiles tests/join-population/macarthur2-folder + ./tile-join -q -f -e tests/join-population/macarthur-and-macarthur2-folder tests/join-population/macarthur.mbtiles tests/join-population/macarthur2-folder + ./tile-join -q -f -o tests/join-population/macarthur-and-macarthur2-merged2.mbtiles tests/join-population/macarthur-and-macarthur2-folder ./tippecanoe-decode -x creator tests/join-population/macarthur-and-macarthur2-merged.mbtiles > tests/join-population/macarthur-and-macarthur2-merged.mbtiles.json.check ./tippecanoe-decode -x creator tests/join-population/macarthur-and-macarthur2-merged2.mbtiles > tests/join-population/macarthur-and-macarthur2-merged2.mbtiles.json.check cmp tests/join-population/macarthur-and-macarthur2-merged.mbtiles.json.check tests/join-population/macarthur-and-macarthur2-merged2.mbtiles.json.check rm tests/join-population/tabblock_06001420.mbtiles tests/join-population/joined.mbtiles tests/join-population/joined-i.mbtiles tests/join-population/joined.mbtiles.json.check tests/join-population/joined-i.mbtiles.json.check tests/join-population/macarthur.mbtiles tests/join-population/merged.mbtiles tests/join-population/merged.mbtiles.json.check tests/join-population/merged-folder.mbtiles tests/join-population/macarthur2.mbtiles tests/join-population/windows.mbtiles tests/join-population/windows-merged.mbtiles tests/join-population/windows-merged2.mbtiles tests/join-population/windows.mbtiles.json.check tests/join-population/just-macarthur.mbtiles tests/join-population/no-macarthur.mbtiles tests/join-population/just-macarthur.mbtiles.json.check tests/join-population/no-macarthur.mbtiles.json.check tests/join-population/merged-folder.mbtiles.json.check tests/join-population/windows-merged.mbtiles.json.check tests/join-population/windows-merged2.mbtiles.json.check tests/join-population/macarthur-and-macarthur2-merged.mbtiles tests/join-population/macarthur-and-macarthur2-merged2.mbtiles tests/join-population/macarthur-and-macarthur2-merged.mbtiles.json.check tests/join-population/macarthur-and-macarthur2-merged2.mbtiles.json.check rm -rf tests/join-population/raw-merged-folder tests/join-population/tabblock_06001420-folder tests/join-population/macarthur-folder tests/join-population/macarthur2-folder tests/join-population/merged-mbtiles-to-folder tests/join-population/merged-folders-to-folder tests/join-population/windows-merged-folder tests/join-population/macarthur-and-macarthur2-folder # Test renaming of layers - ./tippecanoe -f -Z5 -z10 -o tests/join-population/macarthur.mbtiles -l macarthur1 tests/join-population/macarthur.json - ./tippecanoe -f -Z5 -z10 -o tests/join-population/macarthur2.mbtiles -l macarthur2 tests/join-population/macarthur2.json - ./tile-join -R macarthur1:one --rename-layer=macarthur2:two -f -o tests/join-population/renamed.mbtiles tests/join-population/macarthur.mbtiles tests/join-population/macarthur2.mbtiles + ./tippecanoe -q -f -Z5 -z10 -o tests/join-population/macarthur.mbtiles -l macarthur1 tests/join-population/macarthur.json + ./tippecanoe -q -f -Z5 -z10 -o tests/join-population/macarthur2.mbtiles -l macarthur2 tests/join-population/macarthur2.json + ./tile-join -q -R macarthur1:one --rename-layer=macarthur2:two -f -o tests/join-population/renamed.mbtiles tests/join-population/macarthur.mbtiles tests/join-population/macarthur2.mbtiles ./tippecanoe-decode -x creator tests/join-population/renamed.mbtiles > tests/join-population/renamed.mbtiles.json.check cmp tests/join-population/renamed.mbtiles.json.check tests/join-population/renamed.mbtiles.json rm -f tests/join-population/renamed.mbtiles.json.check tests/join-population/renamed.mbtiles.json.check tests/join-population/macarthur.mbtiles tests/join-population/macarthur2.mbtiles join-filter-test: # Comes out different from the direct tippecanoe run because null attributes are lost - ./tippecanoe -z0 -f -o tests/feature-filter/out/all.mbtiles tests/feature-filter/in.json - ./tile-join -J tests/feature-filter/filter -f -o tests/feature-filter/out/filtered.mbtiles tests/feature-filter/out/all.mbtiles + ./tippecanoe -q -z0 -f -o tests/feature-filter/out/all.mbtiles tests/feature-filter/in.json + ./tile-join -q -J tests/feature-filter/filter -f -o tests/feature-filter/out/filtered.mbtiles tests/feature-filter/out/all.mbtiles ./tippecanoe-decode -x creator tests/feature-filter/out/filtered.mbtiles > tests/feature-filter/out/filtered.json.check cmp tests/feature-filter/out/filtered.json.check tests/feature-filter/out/filtered.json.standard rm -f tests/feature-filter/out/filtered.json.check tests/feature-filter/out/filtered.mbtiles tests/feature-filter/out/all.mbtiles # Test zoom level filtering - ./tippecanoe -r1 -z8 -f -o tests/feature-filter/out/places.mbtiles tests/ne_110m_populated_places/in.json - ./tile-join -J tests/feature-filter/places-filter -f -o tests/feature-filter/out/places-filter.mbtiles tests/feature-filter/out/places.mbtiles + ./tippecanoe -q -r1 -z8 -f -o tests/feature-filter/out/places.mbtiles tests/ne_110m_populated_places/in.json + ./tile-join -q -J tests/feature-filter/places-filter -f -o tests/feature-filter/out/places-filter.mbtiles tests/feature-filter/out/places.mbtiles ./tippecanoe-decode -x creator tests/feature-filter/out/places-filter.mbtiles > tests/feature-filter/out/places-filter.mbtiles.json.check cmp tests/feature-filter/out/places-filter.mbtiles.json.check tests/feature-filter/out/places-filter.mbtiles.json.standard rm -f tests/feature-filter/out/places.mbtiles tests/feature-filter/out/places-filter.mbtiles tests/feature-filter/out/places-filter.mbtiles.json.check @@ -258,33 +258,33 @@ json-tool-test: tippecanoe-json-tool allow-existing-test: # Make a tileset - ./tippecanoe -Z0 -z0 -f -o tests/allow-existing/both.mbtiles tests/coalesce-tract/tl_2010_06001_tract10.json + ./tippecanoe -q -Z0 -z0 -f -o tests/allow-existing/both.mbtiles tests/coalesce-tract/tl_2010_06001_tract10.json # Writing to existing should fail - if ./tippecanoe -Z1 -z1 -o tests/allow-existing/both.mbtiles tests/coalesce-tract/tl_2010_06001_tract10.json; then exit 1; else exit 0; fi + if ./tippecanoe -q -Z1 -z1 -o tests/allow-existing/both.mbtiles tests/coalesce-tract/tl_2010_06001_tract10.json; then exit 1; else exit 0; fi # Replace existing - ./tippecanoe -Z8 -z9 -f -o tests/allow-existing/both.mbtiles tests/coalesce-tract/tl_2010_06001_tract10.json - ./tippecanoe -Z10 -z11 -F -o tests/allow-existing/both.mbtiles tests/coalesce-tract/tl_2010_06001_tract10.json + ./tippecanoe -q -Z8 -z9 -f -o tests/allow-existing/both.mbtiles tests/coalesce-tract/tl_2010_06001_tract10.json + ./tippecanoe q- -Z10 -z11 -F -o tests/allow-existing/both.mbtiles tests/coalesce-tract/tl_2010_06001_tract10.json ./tippecanoe-decode -x creator tests/allow-existing/both.mbtiles > tests/allow-existing/both.mbtiles.json.check cmp tests/allow-existing/both.mbtiles.json.check tests/allow-existing/both.mbtiles.json # Make a tileset - ./tippecanoe -Z0 -z0 -f -e tests/allow-existing/both.dir tests/coalesce-tract/tl_2010_06001_tract10.json + ./tippecanoe -q -Z0 -z0 -f -e tests/allow-existing/both.dir tests/coalesce-tract/tl_2010_06001_tract10.json # Writing to existing should fail - if ./tippecanoe -Z1 -z1 -e tests/allow-existing/both.dir tests/coalesce-tract/tl_2010_06001_tract10.json; then exit 1; else exit 0; fi + if ./tippecanoe -q -Z1 -z1 -e tests/allow-existing/both.dir tests/coalesce-tract/tl_2010_06001_tract10.json; then exit 1; else exit 0; fi # Replace existing - ./tippecanoe -Z8 -z9 -f -e tests/allow-existing/both.dir tests/coalesce-tract/tl_2010_06001_tract10.json - ./tippecanoe -Z10 -z11 -F -e tests/allow-existing/both.dir tests/coalesce-tract/tl_2010_06001_tract10.json + ./tippecanoe -q -Z8 -z9 -f -e tests/allow-existing/both.dir tests/coalesce-tract/tl_2010_06001_tract10.json + ./tippecanoe -q -Z10 -z11 -F -e tests/allow-existing/both.dir tests/coalesce-tract/tl_2010_06001_tract10.json ./tippecanoe-decode -x creator tests/allow-existing/both.dir | sed 's/both\.dir/both.mbtiles/g' > tests/allow-existing/both.dir.json.check cmp tests/allow-existing/both.dir.json.check tests/allow-existing/both.mbtiles.json rm -r tests/allow-existing/both.dir.json.check tests/allow-existing/both.dir tests/allow-existing/both.mbtiles.json.check tests/allow-existing/both.mbtiles csv-test: - ./tippecanoe -zg -f -o tests/csv/out.mbtiles tests/csv/ne_110m_populated_places_simple.csv + ./tippecanoe -q -zg -f -o tests/csv/out.mbtiles tests/csv/ne_110m_populated_places_simple.csv ./tippecanoe-decode -x creator tests/csv/out.mbtiles > tests/csv/out.mbtiles.json.check cmp tests/csv/out.mbtiles.json.check tests/csv/out.mbtiles.json rm -f tests/csv/out.mbtiles.json.check tests/csv/out.mbtiles layer-json-test: - ./tippecanoe -z0 -r1 -yNAME -f -o tests/layer-json/out.mbtiles -L'{"file":"tests/ne_110m_populated_places/in.json", "description":"World cities", "layer":"places"}' + ./tippecanoe -q -z0 -r1 -yNAME -f -o tests/layer-json/out.mbtiles -L'{"file":"tests/ne_110m_populated_places/in.json", "description":"World cities", "layer":"places"}' ./tippecanoe-decode -x creator tests/layer-json/out.mbtiles > tests/layer-json/out.mbtiles.json.check cmp tests/layer-json/out.mbtiles.json.check tests/layer-json/out.mbtiles.json rm -f tests/layer-json/out.mbtiles.json.check tests/layer-json/out.mbtiles @@ -295,7 +295,7 @@ layer-json-test: prep-test: $(TESTS) tests/%.json: Makefile tippecanoe tippecanoe-decode - ./tippecanoe -f -o $@.check.mbtiles $(subst @,:,$(subst %,/,$(subst _, ,$(patsubst %.json,%,$(word 4,$(subst /, ,$@)))))) $(foreach suffix,$(suffixes),$(wildcard $(subst $(SPACE),/,$(wordlist 1,2,$(subst /, ,$@)))/*.$(suffix))) + ./tippecanoe -q -f -o $@.check.mbtiles $(subst @,:,$(subst %,/,$(subst _, ,$(patsubst %.json,%,$(word 4,$(subst /, ,$@)))))) $(foreach suffix,$(suffixes),$(wildcard $(subst $(SPACE),/,$(wordlist 1,2,$(subst /, ,$@)))/*.$(suffix))) ./tippecanoe-decode -x creator $@.check.mbtiles > $@ cmp $(patsubst %.check,%,$@) $@ rm $@.check.mbtiles diff --git a/main.cpp b/main.cpp index fb19e6a..0f1a792 100644 --- a/main.cpp +++ b/main.cpp @@ -2102,7 +2102,9 @@ int read_input(std::vector &sources, char *fname, int maxzoom, int minzo // printf("%d/%u/%u %lld\n", z, max[z].x, max[z].y, max[z].count); } - fprintf(stderr, "Choosing a base zoom of -B%d to keep %lld features in tile %d/%u/%u.\n", basezoom, max[basezoom].count, basezoom, max[basezoom].x, max[basezoom].y); + if (!quiet) { + fprintf(stderr, "Choosing a base zoom of -B%d to keep %lld features in tile %d/%u/%u.\n", basezoom, max[basezoom].count, basezoom, max[basezoom].x, max[basezoom].y); + } } if (obasezoom < 0 && basezoom > maxzoom) { @@ -2116,7 +2118,9 @@ int read_input(std::vector &sources, char *fname, int maxzoom, int minzo droprate = 2.5; } else { droprate = exp(log((long double) max[0].count / max[maxzoom].count) / (maxzoom)); - fprintf(stderr, "Choosing a drop rate of -r%f to get from %lld to %lld in %d zooms\n", droprate, max[maxzoom].count, max[0].count, maxzoom); + if (!quiet) { + fprintf(stderr, "Choosing a drop rate of -r%f to get from %lld to %lld in %d zooms\n", droprate, max[maxzoom].count, max[0].count, maxzoom); + } } } @@ -2128,7 +2132,9 @@ int read_input(std::vector &sources, char *fname, int maxzoom, int minzo } } - fprintf(stderr, "Choosing a base zoom of -B%d to keep %f features in tile %d/%u/%u.\n", basezoom, max[maxzoom].count * exp(log(droprate) * (maxzoom - basezoom)), maxzoom, max[maxzoom].x, max[maxzoom].y); + if (!quiet) { + fprintf(stderr, "Choosing a base zoom of -B%d to keep %f features in tile %d/%u/%u.\n", basezoom, max[maxzoom].count * exp(log(droprate) * (maxzoom - basezoom)), maxzoom, max[maxzoom].x, max[maxzoom].y); + } } else if (droprate < 0) { droprate = 1; @@ -2140,7 +2146,9 @@ int read_input(std::vector &sources, char *fname, int maxzoom, int minzo droprate = exp(log(interval) / (basezoom - z)); interval = exp(log(droprate) * (basezoom - z)); - fprintf(stderr, "Choosing a drop rate of -r%f to keep %f features in tile %d/%u/%u.\n", droprate, max[z].count / interval, z, max[z].x, max[z].y); + if (!quiet) { + fprintf(stderr, "Choosing a drop rate of -r%f to keep %f features in tile %d/%u/%u.\n", droprate, max[z].count / interval, z, max[z].x, max[z].y); + } } } } diff --git a/tile.cpp b/tile.cpp index 1ef626d..99b188d 100644 --- a/tile.cpp +++ b/tile.cpp @@ -2244,7 +2244,9 @@ long long write_tile(FILE *geoms, std::atomic *geompos_in, char *meta if (totalsize > 0 && tile.layers.size() > 0) { if (totalsize > max_tile_features && !prevent[P_FEATURE_LIMIT]) { - fprintf(stderr, "tile %d/%u/%u has %zu features, >%zu \n", z, tx, ty, totalsize, max_tile_features); + if (!quiet) { + fprintf(stderr, "tile %d/%u/%u has %zu features, >%zu \n", z, tx, ty, totalsize, max_tile_features); + } if (has_polygons && additional[A_MERGE_POLYGONS_AS_NEEDED] && merge_fraction > .05 && merge_successful) { merge_fraction = merge_fraction * max_tile_features / tile.layers.size() * 0.95; From 4da6b932b3ff5f3056a2c5d8982f5098ec74b1b1 Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Thu, 7 Jun 2018 15:06:42 -0700 Subject: [PATCH 3/4] Use "generator" instead of "creator". Silence another status message. --- CHANGELOG.md | 2 +- Makefile | 78 ++++++++++++++++++++++++++-------------------------- main.cpp | 8 ++++-- mbtiles.cpp | 2 +- 4 files changed, 47 insertions(+), 43 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 77cf4f6..e97781b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ ## 1.29.3 -* Include a creator field in tileset metadata with the Tippecanoe version +* Include a generator field in tileset metadata with the Tippecanoe version ## 1.29.2 diff --git a/Makefile b/Makefile index f858a8d..b667c91 100644 --- a/Makefile +++ b/Makefile @@ -90,7 +90,7 @@ suffixes = json json.gz # Work around Makefile and filename punctuation limits: _ for space, @ for :, % for / %.json.check: ./tippecanoe -q -a@ -f -o $@.mbtiles $(subst @,:,$(subst %,/,$(subst _, ,$(patsubst %.json.check,%,$(word 4,$(subst /, ,$@)))))) $(foreach suffix,$(suffixes),$(wildcard $(subst $(SPACE),/,$(wordlist 1,2,$(subst /, ,$@)))/*.$(suffix))) < /dev/null - ./tippecanoe-decode -x creator $@.mbtiles > $@.out + ./tippecanoe-decode -x generator $@.mbtiles > $@.out cmp $@.out $(patsubst %.check,%,$@) rm $@.out $@.mbtiles @@ -105,7 +105,7 @@ fewer-tests: tippecanoe tippecanoe-decode geobuf-test raw-tiles-test parallel-te for i in $(wildcard $(subst $(SPACE),/,$(wordlist 1,2,$(subst /, ,$@)))/*.json); do ./tippecanoe-json-tool -w $$i | ./node_modules/geobuf/bin/json2geobuf > $$i.geobuf; done for i in $(wildcard $(subst $(SPACE),/,$(wordlist 1,2,$(subst /, ,$@)))/*.json.gz); do gzip -dc $$i | ./tippecanoe-json-tool -w | ./node_modules/geobuf/bin/json2geobuf > $$i.geobuf; done ./tippecanoe -q -a@ -f -o $@.mbtiles $(subst @,:,$(subst %,/,$(subst _, ,$(patsubst %.json.checkbuf,%,$(word 4,$(subst /, ,$@)))))) $(foreach suffix,$(suffixes),$(addsuffix .geobuf,$(wildcard $(subst $(SPACE),/,$(wordlist 1,2,$(subst /, ,$@)))/*.$(suffix)))) < /dev/null - ./tippecanoe-decode -x creator $@.mbtiles | sed 's/checkbuf/check/g' > $@.out + ./tippecanoe-decode -x generator $@.mbtiles | sed 's/checkbuf/check/g' > $@.out cmp $@.out $(patsubst %.checkbuf,%,$@) rm $@.out $@.mbtiles @@ -123,12 +123,12 @@ parallel-test: cat tests/parallel/in[1234].json | ./tippecanoe -q -z5 -f -pi -l test -n test -P -o tests/parallel/parallel-pipe.mbtiles cat tests/parallel/in[1234].json | sed 's/^/@/' | tr '@' '\036' | ./tippecanoe -q -z5 -f -pi -l test -n test -o tests/parallel/implicit-pipe.mbtiles ./tippecanoe -q -z5 -f -pi -l test -n test -P -o tests/parallel/parallel-pipes.mbtiles <(cat tests/parallel/in1.json) <(cat tests/parallel/empty1.json) <(cat tests/parallel/empty2.json) <(cat tests/parallel/in2.json) /dev/null <(cat tests/parallel/in3.json) <(cat tests/parallel/in4.json) - ./tippecanoe-decode -x creator tests/parallel/linear-file.mbtiles > tests/parallel/linear-file.json - ./tippecanoe-decode -x creator tests/parallel/parallel-file.mbtiles > tests/parallel/parallel-file.json - ./tippecanoe-decode -x creator tests/parallel/linear-pipe.mbtiles > tests/parallel/linear-pipe.json - ./tippecanoe-decode -x creator tests/parallel/parallel-pipe.mbtiles > tests/parallel/parallel-pipe.json - ./tippecanoe-decode -x creator tests/parallel/implicit-pipe.mbtiles > tests/parallel/implicit-pipe.json - ./tippecanoe-decode -x creator tests/parallel/parallel-pipes.mbtiles > tests/parallel/parallel-pipes.json + ./tippecanoe-decode -x generator tests/parallel/linear-file.mbtiles > tests/parallel/linear-file.json + ./tippecanoe-decode -x generator tests/parallel/parallel-file.mbtiles > tests/parallel/parallel-file.json + ./tippecanoe-decode -x generator tests/parallel/linear-pipe.mbtiles > tests/parallel/linear-pipe.json + ./tippecanoe-decode -x generator tests/parallel/parallel-pipe.mbtiles > tests/parallel/parallel-pipe.json + ./tippecanoe-decode -x generator tests/parallel/implicit-pipe.mbtiles > tests/parallel/implicit-pipe.json + ./tippecanoe-decode -x generator tests/parallel/parallel-pipes.mbtiles > tests/parallel/parallel-pipes.json cmp tests/parallel/linear-file.json tests/parallel/parallel-file.json cmp tests/parallel/linear-file.json tests/parallel/linear-pipe.json cmp tests/parallel/linear-file.json tests/parallel/parallel-pipe.json @@ -138,17 +138,17 @@ parallel-test: raw-tiles-test: ./tippecanoe -q -f -e tests/raw-tiles/raw-tiles -r1 tests/raw-tiles/hackspots.geojson -pC - ./tippecanoe-decode -x creator tests/raw-tiles/raw-tiles > tests/raw-tiles/raw-tiles.json.check + ./tippecanoe-decode -x generator tests/raw-tiles/raw-tiles > tests/raw-tiles/raw-tiles.json.check cmp tests/raw-tiles/raw-tiles.json.check tests/raw-tiles/raw-tiles.json rm -rf tests/raw-tiles/raw-tiles tests/raw-tiles/compare.json.check decode-test: mkdir -p tests/muni/decode ./tippecanoe -q -z11 -Z11 -f -o tests/muni/decode/multi.mbtiles tests/muni/*.json - ./tippecanoe-decode -x creator -l subway tests/muni/decode/multi.mbtiles > tests/muni/decode/multi.mbtiles.json.check - ./tippecanoe-decode -x creator -c tests/muni/decode/multi.mbtiles > tests/muni/decode/multi.mbtiles.pipeline.json.check - ./tippecanoe-decode -x creator tests/muni/decode/multi.mbtiles 11 327 791 > tests/muni/decode/multi.mbtiles.onetile.json.check - ./tippecanoe-decode -x creator --stats tests/muni/decode/multi.mbtiles > tests/muni/decode/multi.mbtiles.stats.json.check + ./tippecanoe-decode -x generator -l subway tests/muni/decode/multi.mbtiles > tests/muni/decode/multi.mbtiles.json.check + ./tippecanoe-decode -x generator -c tests/muni/decode/multi.mbtiles > tests/muni/decode/multi.mbtiles.pipeline.json.check + ./tippecanoe-decode -x generator tests/muni/decode/multi.mbtiles 11 327 791 > tests/muni/decode/multi.mbtiles.onetile.json.check + ./tippecanoe-decode -x generator --stats tests/muni/decode/multi.mbtiles > tests/muni/decode/multi.mbtiles.stats.json.check cmp tests/muni/decode/multi.mbtiles.json.check tests/muni/decode/multi.mbtiles.json cmp tests/muni/decode/multi.mbtiles.pipeline.json.check tests/muni/decode/multi.mbtiles.pipeline.json cmp tests/muni/decode/multi.mbtiles.onetile.json.check tests/muni/decode/multi.mbtiles.onetile.json @@ -156,10 +156,10 @@ decode-test: rm -f tests/muni/decode/multi.mbtiles.json.check tests/muni/decode/multi.mbtiles tests/muni/decode/multi.mbtiles.pipeline.json.check tests/muni/decode/multi.mbtiles.stats.json.check tests/muni/decode/multi.mbtiles.onetile.json.check pbf-test: - ./tippecanoe-decode -x creator tests/pbf/11-328-791.vector.pbf 11 328 791 > tests/pbf/11-328-791.vector.pbf.out + ./tippecanoe-decode -x generator tests/pbf/11-328-791.vector.pbf 11 328 791 > tests/pbf/11-328-791.vector.pbf.out cmp tests/pbf/11-328-791.json tests/pbf/11-328-791.vector.pbf.out rm tests/pbf/11-328-791.vector.pbf.out - ./tippecanoe-decode -x creator -s EPSG:3857 tests/pbf/11-328-791.vector.pbf 11 328 791 > tests/pbf/11-328-791.3857.vector.pbf.out + ./tippecanoe-decode -x generator -s EPSG:3857 tests/pbf/11-328-791.vector.pbf 11 328 791 > tests/pbf/11-328-791.3857.vector.pbf.out cmp tests/pbf/11-328-791.3857.json tests/pbf/11-328-791.3857.vector.pbf.out rm tests/pbf/11-328-791.3857.vector.pbf.out @@ -173,7 +173,7 @@ join-test: tile-join ./tippecanoe -q -f -z12 -o tests/join-population/tabblock_06001420.mbtiles -YALAND10:'Land area' -L'{"file": "tests/join-population/tabblock_06001420.json", "description": "population"}' ./tippecanoe -q -f -Z5 -z10 -o tests/join-population/macarthur.mbtiles -l macarthur tests/join-population/macarthur.json ./tile-join -q -f -Z6 -z9 -o tests/join-population/macarthur-6-9.mbtiles tests/join-population/macarthur.mbtiles - ./tippecanoe-decode -x creator tests/join-population/macarthur-6-9.mbtiles > tests/join-population/macarthur-6-9.mbtiles.json.check + ./tippecanoe-decode -x generator tests/join-population/macarthur-6-9.mbtiles > tests/join-population/macarthur-6-9.mbtiles.json.check cmp tests/join-population/macarthur-6-9.mbtiles.json.check tests/join-population/macarthur-6-9.mbtiles.json rm -f tests/join-population/macarthur-6-9.mbtiles.json.check tests/join-population/macarthur-6-9.mbtiles ./tippecanoe -q -f -d10 -D10 -Z9 -z11 -o tests/join-population/macarthur2.mbtiles -l macarthur tests/join-population/macarthur2.json @@ -182,11 +182,11 @@ join-test: tile-join ./tile-join -q -f -i -o tests/join-population/joined-i.mbtiles -x GEOID10 -c tests/join-population/population.csv tests/join-population/tabblock_06001420.mbtiles ./tile-join -q -f -o tests/join-population/merged.mbtiles tests/join-population/tabblock_06001420.mbtiles tests/join-population/macarthur.mbtiles tests/join-population/macarthur2.mbtiles ./tile-join -q -f -c tests/join-population/windows.csv -o tests/join-population/windows.mbtiles tests/join-population/macarthur.mbtiles - ./tippecanoe-decode -x creator --maximum-zoom=11 --minimum-zoom=4 tests/join-population/joined.mbtiles > tests/join-population/joined.mbtiles.json.check - ./tippecanoe-decode -x creator --maximum-zoom=11 --minimum-zoom=4 tests/join-population/joined-no-tile-stats.mbtiles > tests/join-population/joined-no-tile-stats.mbtiles.json.check - ./tippecanoe-decode -x creator tests/join-population/joined-i.mbtiles > tests/join-population/joined-i.mbtiles.json.check - ./tippecanoe-decode -x creator tests/join-population/merged.mbtiles > tests/join-population/merged.mbtiles.json.check - ./tippecanoe-decode -x creator tests/join-population/windows.mbtiles > tests/join-population/windows.mbtiles.json.check + ./tippecanoe-decode -x generator --maximum-zoom=11 --minimum-zoom=4 tests/join-population/joined.mbtiles > tests/join-population/joined.mbtiles.json.check + ./tippecanoe-decode -x generator --maximum-zoom=11 --minimum-zoom=4 tests/join-population/joined-no-tile-stats.mbtiles > tests/join-population/joined-no-tile-stats.mbtiles.json.check + ./tippecanoe-decode -x generator tests/join-population/joined-i.mbtiles > tests/join-population/joined-i.mbtiles.json.check + ./tippecanoe-decode -x generator tests/join-population/merged.mbtiles > tests/join-population/merged.mbtiles.json.check + ./tippecanoe-decode -x generator tests/join-population/windows.mbtiles > tests/join-population/windows.mbtiles.json.check cmp tests/join-population/joined.mbtiles.json.check tests/join-population/joined.mbtiles.json cmp tests/join-population/joined-no-tile-stats.mbtiles.json.check tests/join-population/joined-no-tile-stats.mbtiles.json cmp tests/join-population/joined-i.mbtiles.json.check tests/join-population/joined-i.mbtiles.json @@ -194,37 +194,37 @@ join-test: tile-join cmp tests/join-population/windows.mbtiles.json.check tests/join-population/windows.mbtiles.json ./tile-join -q -f -l macarthur -n "macarthur name" -N "macarthur description" -A "macarthur attribution" -o tests/join-population/just-macarthur.mbtiles tests/join-population/merged.mbtiles ./tile-join -q -f -L macarthur -o tests/join-population/no-macarthur.mbtiles tests/join-population/merged.mbtiles - ./tippecanoe-decode -x creator tests/join-population/just-macarthur.mbtiles > tests/join-population/just-macarthur.mbtiles.json.check - ./tippecanoe-decode -x creator tests/join-population/no-macarthur.mbtiles > tests/join-population/no-macarthur.mbtiles.json.check + ./tippecanoe-decode -x generator tests/join-population/just-macarthur.mbtiles > tests/join-population/just-macarthur.mbtiles.json.check + ./tippecanoe-decode -x generator tests/join-population/no-macarthur.mbtiles > tests/join-population/no-macarthur.mbtiles.json.check cmp tests/join-population/just-macarthur.mbtiles.json.check tests/join-population/just-macarthur.mbtiles.json cmp tests/join-population/no-macarthur.mbtiles.json.check tests/join-population/no-macarthur.mbtiles.json ./tile-join -q --no-tile-compression -f -e tests/join-population/raw-merged-folder tests/join-population/tabblock_06001420.mbtiles tests/join-population/macarthur.mbtiles tests/join-population/macarthur2.mbtiles - ./tippecanoe-decode -x creator tests/join-population/raw-merged-folder > tests/join-population/raw-merged-folder.json.check + ./tippecanoe-decode -x generator tests/join-population/raw-merged-folder > tests/join-population/raw-merged-folder.json.check cmp tests/join-population/raw-merged-folder.json.check tests/join-population/raw-merged-folder.json rm -f tests/join-population/raw-merged-folder.json.check ./tippecanoe -q -z12 -f -e tests/join-population/tabblock_06001420-folder -YALAND10:'Land area' -L'{"file": "tests/join-population/tabblock_06001420.json", "description": "population"}' ./tippecanoe -q -Z5 -z10 -f -e tests/join-population/macarthur-folder -l macarthur tests/join-population/macarthur.json ./tippecanoe -q -d10 -D10 -Z9 -z11 -f -e tests/join-population/macarthur2-folder -l macarthur tests/join-population/macarthur2.json ./tile-join -q -f -o tests/join-population/merged-folder.mbtiles tests/join-population/tabblock_06001420-folder tests/join-population/macarthur-folder tests/join-population/macarthur2-folder - ./tippecanoe-decode -x creator tests/join-population/merged-folder.mbtiles > tests/join-population/merged-folder.mbtiles.json.check + ./tippecanoe-decode -x generator tests/join-population/merged-folder.mbtiles > tests/join-population/merged-folder.mbtiles.json.check cmp tests/join-population/merged-folder.mbtiles.json.check tests/join-population/merged-folder.mbtiles.json ./tile-join -q -n "merged name" -N "merged description" -f -e tests/join-population/merged-mbtiles-to-folder tests/join-population/tabblock_06001420.mbtiles tests/join-population/macarthur.mbtiles tests/join-population/macarthur2.mbtiles ./tile-join -q -n "merged name" -N "merged description" -f -e tests/join-population/merged-folders-to-folder tests/join-population/tabblock_06001420-folder tests/join-population/macarthur-folder tests/join-population/macarthur2-folder - ./tippecanoe-decode -x creator tests/join-population/merged-mbtiles-to-folder > tests/join-population/merged-mbtiles-to-folder.json.check - ./tippecanoe-decode -x creator tests/join-population/merged-folders-to-folder > tests/join-population/merged-folders-to-folder.json.check + ./tippecanoe-decode -x generator tests/join-population/merged-mbtiles-to-folder > tests/join-population/merged-mbtiles-to-folder.json.check + ./tippecanoe-decode -x generator tests/join-population/merged-folders-to-folder > tests/join-population/merged-folders-to-folder.json.check cmp tests/join-population/merged-mbtiles-to-folder.json.check tests/join-population/merged-folders-to-folder.json.check rm -f tests/join-population/merged-mbtiles-to-folder.json.check tests/join-population/merged-folders-to-folder.json.check ./tile-join -q -f -c tests/join-population/windows.csv -o tests/join-population/windows-merged.mbtiles tests/join-population/macarthur.mbtiles tests/join-population/macarthur2-folder ./tile-join -q -c tests/join-population/windows.csv -f -e tests/join-population/windows-merged-folder tests/join-population/macarthur.mbtiles tests/join-population/macarthur2-folder ./tile-join -q -f -o tests/join-population/windows-merged2.mbtiles tests/join-population/windows-merged-folder - ./tippecanoe-decode -x creator tests/join-population/windows-merged.mbtiles > tests/join-population/windows-merged.mbtiles.json.check - ./tippecanoe-decode -x creator tests/join-population/windows-merged2.mbtiles > tests/join-population/windows-merged2.mbtiles.json.check + ./tippecanoe-decode -x generator tests/join-population/windows-merged.mbtiles > tests/join-population/windows-merged.mbtiles.json.check + ./tippecanoe-decode -x generator tests/join-population/windows-merged2.mbtiles > tests/join-population/windows-merged2.mbtiles.json.check cmp tests/join-population/windows-merged.mbtiles.json.check tests/join-population/windows-merged2.mbtiles.json.check ./tile-join -q -f -o tests/join-population/macarthur-and-macarthur2-merged.mbtiles tests/join-population/macarthur.mbtiles tests/join-population/macarthur2-folder ./tile-join -q -f -e tests/join-population/macarthur-and-macarthur2-folder tests/join-population/macarthur.mbtiles tests/join-population/macarthur2-folder ./tile-join -q -f -o tests/join-population/macarthur-and-macarthur2-merged2.mbtiles tests/join-population/macarthur-and-macarthur2-folder - ./tippecanoe-decode -x creator tests/join-population/macarthur-and-macarthur2-merged.mbtiles > tests/join-population/macarthur-and-macarthur2-merged.mbtiles.json.check - ./tippecanoe-decode -x creator tests/join-population/macarthur-and-macarthur2-merged2.mbtiles > tests/join-population/macarthur-and-macarthur2-merged2.mbtiles.json.check + ./tippecanoe-decode -x generator tests/join-population/macarthur-and-macarthur2-merged.mbtiles > tests/join-population/macarthur-and-macarthur2-merged.mbtiles.json.check + ./tippecanoe-decode -x generator tests/join-population/macarthur-and-macarthur2-merged2.mbtiles > tests/join-population/macarthur-and-macarthur2-merged2.mbtiles.json.check cmp tests/join-population/macarthur-and-macarthur2-merged.mbtiles.json.check tests/join-population/macarthur-and-macarthur2-merged2.mbtiles.json.check rm tests/join-population/tabblock_06001420.mbtiles tests/join-population/joined.mbtiles tests/join-population/joined-i.mbtiles tests/join-population/joined.mbtiles.json.check tests/join-population/joined-i.mbtiles.json.check tests/join-population/macarthur.mbtiles tests/join-population/merged.mbtiles tests/join-population/merged.mbtiles.json.check tests/join-population/merged-folder.mbtiles tests/join-population/macarthur2.mbtiles tests/join-population/windows.mbtiles tests/join-population/windows-merged.mbtiles tests/join-population/windows-merged2.mbtiles tests/join-population/windows.mbtiles.json.check tests/join-population/just-macarthur.mbtiles tests/join-population/no-macarthur.mbtiles tests/join-population/just-macarthur.mbtiles.json.check tests/join-population/no-macarthur.mbtiles.json.check tests/join-population/merged-folder.mbtiles.json.check tests/join-population/windows-merged.mbtiles.json.check tests/join-population/windows-merged2.mbtiles.json.check tests/join-population/macarthur-and-macarthur2-merged.mbtiles tests/join-population/macarthur-and-macarthur2-merged2.mbtiles tests/join-population/macarthur-and-macarthur2-merged.mbtiles.json.check tests/join-population/macarthur-and-macarthur2-merged2.mbtiles.json.check rm -rf tests/join-population/raw-merged-folder tests/join-population/tabblock_06001420-folder tests/join-population/macarthur-folder tests/join-population/macarthur2-folder tests/join-population/merged-mbtiles-to-folder tests/join-population/merged-folders-to-folder tests/join-population/windows-merged-folder tests/join-population/macarthur-and-macarthur2-folder @@ -232,7 +232,7 @@ join-test: tile-join ./tippecanoe -q -f -Z5 -z10 -o tests/join-population/macarthur.mbtiles -l macarthur1 tests/join-population/macarthur.json ./tippecanoe -q -f -Z5 -z10 -o tests/join-population/macarthur2.mbtiles -l macarthur2 tests/join-population/macarthur2.json ./tile-join -q -R macarthur1:one --rename-layer=macarthur2:two -f -o tests/join-population/renamed.mbtiles tests/join-population/macarthur.mbtiles tests/join-population/macarthur2.mbtiles - ./tippecanoe-decode -x creator tests/join-population/renamed.mbtiles > tests/join-population/renamed.mbtiles.json.check + ./tippecanoe-decode -x generator tests/join-population/renamed.mbtiles > tests/join-population/renamed.mbtiles.json.check cmp tests/join-population/renamed.mbtiles.json.check tests/join-population/renamed.mbtiles.json rm -f tests/join-population/renamed.mbtiles.json.check tests/join-population/renamed.mbtiles.json.check tests/join-population/macarthur.mbtiles tests/join-population/macarthur2.mbtiles @@ -240,13 +240,13 @@ join-filter-test: # Comes out different from the direct tippecanoe run because null attributes are lost ./tippecanoe -q -z0 -f -o tests/feature-filter/out/all.mbtiles tests/feature-filter/in.json ./tile-join -q -J tests/feature-filter/filter -f -o tests/feature-filter/out/filtered.mbtiles tests/feature-filter/out/all.mbtiles - ./tippecanoe-decode -x creator tests/feature-filter/out/filtered.mbtiles > tests/feature-filter/out/filtered.json.check + ./tippecanoe-decode -x generator tests/feature-filter/out/filtered.mbtiles > tests/feature-filter/out/filtered.json.check cmp tests/feature-filter/out/filtered.json.check tests/feature-filter/out/filtered.json.standard rm -f tests/feature-filter/out/filtered.json.check tests/feature-filter/out/filtered.mbtiles tests/feature-filter/out/all.mbtiles # Test zoom level filtering ./tippecanoe -q -r1 -z8 -f -o tests/feature-filter/out/places.mbtiles tests/ne_110m_populated_places/in.json ./tile-join -q -J tests/feature-filter/places-filter -f -o tests/feature-filter/out/places-filter.mbtiles tests/feature-filter/out/places.mbtiles - ./tippecanoe-decode -x creator tests/feature-filter/out/places-filter.mbtiles > tests/feature-filter/out/places-filter.mbtiles.json.check + ./tippecanoe-decode -x generator tests/feature-filter/out/places-filter.mbtiles > tests/feature-filter/out/places-filter.mbtiles.json.check cmp tests/feature-filter/out/places-filter.mbtiles.json.check tests/feature-filter/out/places-filter.mbtiles.json.standard rm -f tests/feature-filter/out/places.mbtiles tests/feature-filter/out/places-filter.mbtiles tests/feature-filter/out/places-filter.mbtiles.json.check @@ -264,7 +264,7 @@ allow-existing-test: # Replace existing ./tippecanoe -q -Z8 -z9 -f -o tests/allow-existing/both.mbtiles tests/coalesce-tract/tl_2010_06001_tract10.json ./tippecanoe q- -Z10 -z11 -F -o tests/allow-existing/both.mbtiles tests/coalesce-tract/tl_2010_06001_tract10.json - ./tippecanoe-decode -x creator tests/allow-existing/both.mbtiles > tests/allow-existing/both.mbtiles.json.check + ./tippecanoe-decode -x generator tests/allow-existing/both.mbtiles > tests/allow-existing/both.mbtiles.json.check cmp tests/allow-existing/both.mbtiles.json.check tests/allow-existing/both.mbtiles.json # Make a tileset ./tippecanoe -q -Z0 -z0 -f -e tests/allow-existing/both.dir tests/coalesce-tract/tl_2010_06001_tract10.json @@ -273,19 +273,19 @@ allow-existing-test: # Replace existing ./tippecanoe -q -Z8 -z9 -f -e tests/allow-existing/both.dir tests/coalesce-tract/tl_2010_06001_tract10.json ./tippecanoe -q -Z10 -z11 -F -e tests/allow-existing/both.dir tests/coalesce-tract/tl_2010_06001_tract10.json - ./tippecanoe-decode -x creator tests/allow-existing/both.dir | sed 's/both\.dir/both.mbtiles/g' > tests/allow-existing/both.dir.json.check + ./tippecanoe-decode -x generator tests/allow-existing/both.dir | sed 's/both\.dir/both.mbtiles/g' > tests/allow-existing/both.dir.json.check cmp tests/allow-existing/both.dir.json.check tests/allow-existing/both.mbtiles.json rm -r tests/allow-existing/both.dir.json.check tests/allow-existing/both.dir tests/allow-existing/both.mbtiles.json.check tests/allow-existing/both.mbtiles csv-test: ./tippecanoe -q -zg -f -o tests/csv/out.mbtiles tests/csv/ne_110m_populated_places_simple.csv - ./tippecanoe-decode -x creator tests/csv/out.mbtiles > tests/csv/out.mbtiles.json.check + ./tippecanoe-decode -x generator tests/csv/out.mbtiles > tests/csv/out.mbtiles.json.check cmp tests/csv/out.mbtiles.json.check tests/csv/out.mbtiles.json rm -f tests/csv/out.mbtiles.json.check tests/csv/out.mbtiles layer-json-test: ./tippecanoe -q -z0 -r1 -yNAME -f -o tests/layer-json/out.mbtiles -L'{"file":"tests/ne_110m_populated_places/in.json", "description":"World cities", "layer":"places"}' - ./tippecanoe-decode -x creator tests/layer-json/out.mbtiles > tests/layer-json/out.mbtiles.json.check + ./tippecanoe-decode -x generator tests/layer-json/out.mbtiles > tests/layer-json/out.mbtiles.json.check cmp tests/layer-json/out.mbtiles.json.check tests/layer-json/out.mbtiles.json rm -f tests/layer-json/out.mbtiles.json.check tests/layer-json/out.mbtiles @@ -296,6 +296,6 @@ prep-test: $(TESTS) tests/%.json: Makefile tippecanoe tippecanoe-decode ./tippecanoe -q -f -o $@.check.mbtiles $(subst @,:,$(subst %,/,$(subst _, ,$(patsubst %.json,%,$(word 4,$(subst /, ,$@)))))) $(foreach suffix,$(suffixes),$(wildcard $(subst $(SPACE),/,$(wordlist 1,2,$(subst /, ,$@)))/*.$(suffix))) - ./tippecanoe-decode -x creator $@.check.mbtiles > $@ + ./tippecanoe-decode -x generator $@.check.mbtiles > $@ cmp $(patsubst %.check,%,$@) $@ rm $@.check.mbtiles diff --git a/main.cpp b/main.cpp index 0f1a792..1666f13 100644 --- a/main.cpp +++ b/main.cpp @@ -2163,7 +2163,9 @@ int read_input(std::vector &sources, char *fname, int maxzoom, int minzo } if (effective == 0) { - fprintf(stderr, "With gamma, effective base zoom is 0, so no effective drop rate\n"); + if (!quiet) { + fprintf(stderr, "With gamma, effective base zoom is 0, so no effective drop rate\n"); + } } else { double interval_0 = exp(log(droprate) * (basezoom - 0)); double interval_eff = exp(log(droprate) * (basezoom - effective)); @@ -2179,7 +2181,9 @@ int read_input(std::vector &sources, char *fname, int maxzoom, int minzo double eff_drop = exp(log(rate_at_eff / rate_at_0) / (effective - 0)); - fprintf(stderr, "With gamma, effective base zoom of %d, effective drop rate of %f\n", effective, eff_drop); + if (!quiet) { + fprintf(stderr, "With gamma, effective base zoom of %d, effective drop rate of %f\n", effective, eff_drop); + } } } diff --git a/mbtiles.cpp b/mbtiles.cpp index be7eaf4..9b4edc4 100644 --- a/mbtiles.cpp +++ b/mbtiles.cpp @@ -372,7 +372,7 @@ void mbtiles_write_metadata(sqlite3 *outdb, const char *outdir, const char *fnam } sqlite3_free(sql); - sql = sqlite3_mprintf("INSERT INTO metadata (name, value) VALUES ('creator', %Q);", VERSION); + sql = sqlite3_mprintf("INSERT INTO metadata (name, value) VALUES ('generator', %Q);", VERSION); if (sqlite3_exec(db, sql, NULL, NULL, &err) != SQLITE_OK) { fprintf(stderr, "set type: %s\n", err); if (!forcetable) { From 7f90ba5e1b16878b2c3ff37b07e76d148eb65823 Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Thu, 7 Jun 2018 21:37:25 -0700 Subject: [PATCH 4/4] Include version number in tile-join output too --- main.cpp | 4 ++-- mbtiles.cpp | 5 +++-- mbtiles.hpp | 2 +- tile-join.cpp | 2 +- version.hpp | 2 +- 5 files changed, 8 insertions(+), 7 deletions(-) diff --git a/main.cpp b/main.cpp index 1666f13..7149638 100644 --- a/main.cpp +++ b/main.cpp @@ -2311,7 +2311,7 @@ int read_input(std::vector &sources, char *fname, int maxzoom, int minzo ai->second.maxzoom = maxzoom; } - mbtiles_write_metadata(outdb, outdir, fname, minzoom, maxzoom, minlat, minlon, maxlat, maxlon, midlat, midlon, forcetable, attribution, merged_lm, true, description, !prevent[P_TILE_STATS], attribute_descriptions); + mbtiles_write_metadata(outdb, outdir, fname, minzoom, maxzoom, minlat, minlon, maxlat, maxlon, midlat, midlon, forcetable, attribution, merged_lm, true, description, !prevent[P_TILE_STATS], attribute_descriptions, "tippecanoe"); return ret; } @@ -2882,7 +2882,7 @@ int main(int argc, char **argv) { } case 'v': - fprintf(stderr, "%s\n", VERSION); + fprintf(stderr, "tippecanoe %s\n", VERSION); exit(EXIT_FAILURE); case 'P': diff --git a/mbtiles.cpp b/mbtiles.cpp index 9b4edc4..12a89c6 100644 --- a/mbtiles.cpp +++ b/mbtiles.cpp @@ -265,7 +265,7 @@ void tilestats(std::map const &layermap1, size_t el state.json_end_hash(); } -void mbtiles_write_metadata(sqlite3 *outdb, const char *outdir, const char *fname, int minzoom, int maxzoom, double minlat, double minlon, double maxlat, double maxlon, double midlat, double midlon, int forcetable, const char *attribution, std::map const &layermap, bool vector, const char *description, bool do_tilestats, std::map const &attribute_descriptions) { +void mbtiles_write_metadata(sqlite3 *outdb, const char *outdir, const char *fname, int minzoom, int maxzoom, double minlat, double minlon, double maxlat, double maxlon, double midlat, double midlon, int forcetable, const char *attribution, std::map const &layermap, bool vector, const char *description, bool do_tilestats, std::map const &attribute_descriptions, std::string const &program) { char *sql, *err; sqlite3 *db = outdb; @@ -372,7 +372,8 @@ void mbtiles_write_metadata(sqlite3 *outdb, const char *outdir, const char *fnam } sqlite3_free(sql); - sql = sqlite3_mprintf("INSERT INTO metadata (name, value) VALUES ('generator', %Q);", VERSION); + std::string version = program + " " + VERSION; + sql = sqlite3_mprintf("INSERT INTO metadata (name, value) VALUES ('generator', %Q);", version.c_str()); if (sqlite3_exec(db, sql, NULL, NULL, &err) != SQLITE_OK) { fprintf(stderr, "set type: %s\n", err); if (!forcetable) { diff --git a/mbtiles.hpp b/mbtiles.hpp index 95ec651..f915e90 100644 --- a/mbtiles.hpp +++ b/mbtiles.hpp @@ -41,7 +41,7 @@ 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_metadata(sqlite3 *outdb, const char *outdir, const char *fname, int minzoom, int maxzoom, double minlat, double minlon, double maxlat, double maxlon, double midlat, double midlon, int forcetable, const char *attribution, std::map const &layermap, bool vector, const char *description, bool do_tilestats, std::map const &attribute_descriptions); +void mbtiles_write_metadata(sqlite3 *outdb, const char *outdir, const char *fname, int minzoom, int maxzoom, double minlat, double minlon, double maxlat, double maxlon, double midlat, double midlon, int forcetable, const char *attribution, std::map const &layermap, bool vector, const char *description, bool do_tilestats, std::map const &attribute_descriptions, std::string const &program); void mbtiles_close(sqlite3 *outdb, const char *pgm); diff --git a/tile-join.cpp b/tile-join.cpp index ee9269c..b17ef15 100644 --- a/tile-join.cpp +++ b/tile-join.cpp @@ -1064,7 +1064,7 @@ int main(int argc, char **argv) { name = set_name; } - mbtiles_write_metadata(outdb, out_dir, name.c_str(), st.minzoom, st.maxzoom, st.minlat, st.minlon, st.maxlat, st.maxlon, st.midlat, st.midlon, 0, attribution.size() != 0 ? attribution.c_str() : NULL, layermap, true, description.c_str(), !pg, attribute_descriptions); + mbtiles_write_metadata(outdb, out_dir, name.c_str(), st.minzoom, st.maxzoom, st.minlat, st.minlon, st.maxlat, st.maxlon, st.midlat, st.midlon, 0, attribution.size() != 0 ? attribution.c_str() : NULL, layermap, true, description.c_str(), !pg, attribute_descriptions, "tile-join"); if (outdb != NULL) { mbtiles_close(outdb, argv[0]); diff --git a/version.hpp b/version.hpp index 6cd41e9..9a1fe62 100644 --- a/version.hpp +++ b/version.hpp @@ -1,6 +1,6 @@ #ifndef VERSION_HPP #define VERSION_HPP -#define VERSION "tippecanoe v1.29.3" +#define VERSION "v1.29.3" #endif