diff --git a/CHANGELOG.md b/CHANGELOG.md index 17089b4e5..990a0ba20 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.20.0 + +* Add long options to tippecanoe-decode and tile-join. Add --quiet to tile-join. + ## 1.19.3 * Upgrade protozero to version 1.5.2 diff --git a/Makefile b/Makefile index a3497f25e..f883f06c4 100644 --- a/Makefile +++ b/Makefile @@ -130,7 +130,7 @@ pbf-test: ./tippecanoe-decode 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 -t EPSG:3857 tests/pbf/11-328-791.vector.pbf 11 328 791 > tests/pbf/11-328-791.3857.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 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 @@ -145,11 +145,11 @@ join-test: ./tippecanoe -f -z12 -o tests/join-population/tabblock_06001420.mbtiles tests/join-population/tabblock_06001420.json ./tippecanoe -f -Z5 -z10 -o tests/join-population/macarthur.mbtiles -l macarthur tests/join-population/macarthur.json ./tippecanoe -f -d10 -D10 -Z9 -z11 -o tests/join-population/macarthur2.mbtiles -l macarthur tests/join-population/macarthur2.json - ./tile-join -f -o tests/join-population/joined.mbtiles -x GEOID10 -c tests/join-population/population.csv tests/join-population/tabblock_06001420.mbtiles + ./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 -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 -z11 -Z4 tests/join-population/joined.mbtiles > tests/join-population/joined.mbtiles.json.check + ./tippecanoe-decode --maximum-zoom=11 --minimum-zoom=4 tests/join-population/joined.mbtiles > tests/join-population/joined.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 @@ -163,7 +163,7 @@ join-test: ./tippecanoe-decode 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 -pC -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 --no-tile-compression -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 -z12 -e tests/join-population/tabblock_06001420-folder tests/join-population/tabblock_06001420.json ./tippecanoe -Z5 -z10 -e tests/join-population/macarthur-folder -l macarthur tests/join-population/macarthur.json diff --git a/README.md b/README.md index 7f829dddc..8eb187715 100644 --- a/README.md +++ b/README.md @@ -410,19 +410,19 @@ You can use the `-e` flag to output a directory of tiles rather than a The options are: - * `-o` *out.mbtiles*: Write the new tiles to the specified .mbtiles file. - * `-e` *directory*: Write the new tiles to the specified directory instead of to an mbtiles file. - * `-f`: Remove *out.mbtiles* if it already exists. - * `-c` *match*`.csv`: Use *match*`.csv` as the source for new attributes to join to the features. The first line of the file should be the key names; the other lines are values. The first column is the one to match against the existing features; the other columns are the new data to add. - * `-x` *key*: Remove attributes of type *key* from the output. You can use this to remove the field you are matching against if you no longer need it after joining, or to remove any other attributes you don't want. - * `-i`: Only include features that matched the CSV. - * `-pk`: Don't skip tiles larger than 500K. - * `-pC`: Don't compress the PBF vector tile data. - * `-l` *layer*: Include the named layer in the output. You can specify multiple `-l` options to keep multiple layers. If you don't specify, they will all be retained. - * `-L` *layer*: Remove the named layer from the output. You can specify multiple `-L` options to remove multiple layers. - * `-A` *attribution*: Set the attribution string. - * `-n` *name*: Set the tileset name. - * `-N` *description*: Set the tileset description. + * `-o` *out.mbtiles* or `--output=`*out.mbtiles*: Write the new tiles to the specified .mbtiles file. + * `-e` *directory* or `--output-to-directory=`*directory*: Write the new tiles to the specified directory instead of to an mbtiles file. + * `-f` or `--force`: Remove *out.mbtiles* if it already exists. + * `-c` *match*`.csv` or `--csv=`*match*`.csv`: Use *match*`.csv` as the source for new attributes to join to the features. The first line of the file should be the key names; the other lines are values. The first column is the one to match against the existing features; the other columns are the new data to add. + * `-x` *key* or `--exclude=`*key*: Remove attributes of type *key* from the output. You can use this to remove the field you are matching against if you no longer need it after joining, or to remove any other attributes you don't want. + * `-i` or `--if-matched`: Only include features that matched the CSV. + * `-pk` or `--no-tile-size-limit`: Don't skip tiles larger than 500K. + * `-pC` or `--no-tile-compression`: Don't compress the PBF vector tile data. + * `-l` *layer* or `--layer=`*layer*: Include the named layer in the output. You can specify multiple `-l` options to keep multiple layers. If you don't specify, they will all be retained. + * `-L` *layer* or `--exclude-layer=`*layer*: Remove the named layer from the output. You can specify multiple `-L` options to remove multiple layers. + * `-A` *attribution* or `--attribution=`*attribution*: Set the attribution string. + * `-n` *name* or `--name=`*name*: Set the tileset name. + * `-N` *description* or `--description=`*description*: Set the tileset description. Because tile-join just copies the geometries to the new .mbtiles without processing them (except to rescale the extents if necessary), @@ -506,8 +506,8 @@ resolutions. ### Options - * `-t` _projection_: Specify the projection of the output data. Currently supported are EPSG:4326 (WGS84, the default) and EPSG:3857 (Web Mercator). - * `-z` _maxzoom_: Specify the highest zoom level to decode from the tileset - * `-Z` _minzoom_: Specify the lowest zoom level to decode from the tileset - * `-l` _layer_: Decode only layers with the specified names. (Multiple `-l` options can be specified.) - * `-f`: Decode tiles even if polygon ring order or closure problems are detected + * `-s` _projection_ or `--projection=`*projection*: Specify the projection of the output data. Currently supported are EPSG:4326 (WGS84, the default) and EPSG:3857 (Web Mercator). + * `-z` _maxzoom_ or `--maximum-zoom=`*maxzoom*: Specify the highest zoom level to decode from the tileset + * `-Z` _minzoom_ or `--minimum-zoom=`*minzoom*: Specify the lowest zoom level to decode from the tileset + * `-l` _layer_ or `--layer=`*layer*: Decode only layers with the specified names. (Multiple `-l` options can be specified.) + * `-f` or `--force`: Decode tiles even if polygon ring order or closure problems are detected diff --git a/decode.cpp b/decode.cpp index e90a4bcdb..4fe8b8852 100644 --- a/decode.cpp +++ b/decode.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include @@ -524,9 +525,32 @@ int main(int argc, char **argv) { int i; std::set to_decode; - while ((i = getopt(argc, argv, "t:Z:z:l:f")) != -1) { + struct option long_options[] = { + {"projection", required_argument, 0, 's'}, + {"maximum-zoom", required_argument, 0, 'z'}, + {"minimum-zoom", required_argument, 0, 'Z'}, + {"layer", required_argument, 0, 'l'}, + {"force", no_argument, 0, 'f'}, + {0, 0, 0, 0}, + }; + + std::string getopt_str; + for (size_t lo = 0; long_options[lo].name != NULL; lo++) { + if (long_options[lo].val > ' ') { + getopt_str.push_back(long_options[lo].val); + + if (long_options[lo].has_arg == required_argument) { + getopt_str.push_back(':'); + } + } + } + + while ((i = getopt_long(argc, argv, getopt_str.c_str(), long_options, NULL)) != -1) { switch (i) { - case 't': + case 0: + break; + + case 's': set_projection_or_exit(optarg); break; diff --git a/man/tippecanoe.1 b/man/tippecanoe.1 index 482413bd9..228fd6092 100644 --- a/man/tippecanoe.1 +++ b/man/tippecanoe.1 @@ -469,31 +469,31 @@ You can use the \fB\fC\-e\fR flag to output a directory of tiles rather than a The options are: .RS .IP \(bu 2 -\fB\fC\-o\fR \fIout.mbtiles\fP: Write the new tiles to the specified .mbtiles file. +\fB\fC\-o\fR \fIout.mbtiles\fP or \fB\fC\-\-output=\fR\fIout.mbtiles\fP: Write the new tiles to the specified .mbtiles file. .IP \(bu 2 -\fB\fC\-e\fR \fIdirectory\fP: Write the new tiles to the specified directory instead of to an mbtiles file. +\fB\fC\-e\fR \fIdirectory\fP or \fB\fC\-\-output\-to\-directory=\fR\fIdirectory\fP: Write the new tiles to the specified directory instead of to an mbtiles file. .IP \(bu 2 -\fB\fC\-f\fR: Remove \fIout.mbtiles\fP if it already exists. +\fB\fC\-f\fR or \fB\fC\-\-force\fR: Remove \fIout.mbtiles\fP if it already exists. .IP \(bu 2 -\fB\fC\-c\fR \fImatch\fP\fB\fC\&.csv\fR: Use \fImatch\fP\fB\fC\&.csv\fR as the source for new attributes to join to the features. The first line of the file should be the key names; the other lines are values. The first column is the one to match against the existing features; the other columns are the new data to add. +\fB\fC\-c\fR \fImatch\fP\fB\fC\&.csv\fR or \fB\fC\-\-csv=\fR\fImatch\fP\fB\fC\&.csv\fR: Use \fImatch\fP\fB\fC\&.csv\fR as the source for new attributes to join to the features. The first line of the file should be the key names; the other lines are values. The first column is the one to match against the existing features; the other columns are the new data to add. .IP \(bu 2 -\fB\fC\-x\fR \fIkey\fP: Remove attributes of type \fIkey\fP from the output. You can use this to remove the field you are matching against if you no longer need it after joining, or to remove any other attributes you don't want. +\fB\fC\-x\fR \fIkey\fP or \fB\fC\-\-exclude=\fR\fIkey\fP: Remove attributes of type \fIkey\fP from the output. You can use this to remove the field you are matching against if you no longer need it after joining, or to remove any other attributes you don't want. .IP \(bu 2 -\fB\fC\-i\fR: Only include features that matched the CSV. +\fB\fC\-i\fR or \fB\fC\-\-if\-matched\fR: Only include features that matched the CSV. .IP \(bu 2 -\fB\fC\-pk\fR: Don't skip tiles larger than 500K. +\fB\fC\-pk\fR or \fB\fC\-\-no\-tile\-size\-limit\fR: Don't skip tiles larger than 500K. .IP \(bu 2 -\fB\fC\-pC\fR: Don't compress the PBF vector tile data. +\fB\fC\-pC\fR or \fB\fC\-\-no\-tile\-compression\fR: Don't compress the PBF vector tile data. .IP \(bu 2 -\fB\fC\-l\fR \fIlayer\fP: Include the named layer in the output. You can specify multiple \fB\fC\-l\fR options to keep multiple layers. If you don't specify, they will all be retained. +\fB\fC\-l\fR \fIlayer\fP or \fB\fC\-\-layer=\fR\fIlayer\fP: Include the named layer in the output. You can specify multiple \fB\fC\-l\fR options to keep multiple layers. If you don't specify, they will all be retained. .IP \(bu 2 -\fB\fC\-L\fR \fIlayer\fP: Remove the named layer from the output. You can specify multiple \fB\fC\-L\fR options to remove multiple layers. +\fB\fC\-L\fR \fIlayer\fP or \fB\fC\-\-exclude\-layer=\fR\fIlayer\fP: Remove the named layer from the output. You can specify multiple \fB\fC\-L\fR options to remove multiple layers. .IP \(bu 2 -\fB\fC\-A\fR \fIattribution\fP: Set the attribution string. +\fB\fC\-A\fR \fIattribution\fP or \fB\fC\-\-attribution=\fR\fIattribution\fP: Set the attribution string. .IP \(bu 2 -\fB\fC\-n\fR \fIname\fP: Set the tileset name. +\fB\fC\-n\fR \fIname\fP or \fB\fC\-\-name=\fR\fIname\fP: Set the tileset name. .IP \(bu 2 -\fB\fC\-N\fR \fIdescription\fP: Set the tileset description. +\fB\fC\-N\fR \fIdescription\fP or \fB\fC\-\-description=\fR\fIdescription\fP: Set the tileset description. .RE .PP Because tile\-join just copies the geometries to the new .mbtiles without processing them @@ -592,13 +592,13 @@ resolutions. .SS Options .RS .IP \(bu 2 -\fB\fC\-t\fR \fIprojection\fP: Specify the projection of the output data. Currently supported are EPSG:4326 (WGS84, the default) and EPSG:3857 (Web Mercator). +\fB\fC\-s\fR \fIprojection\fP or \fB\fC\-\-projection=\fR\fIprojection\fP: Specify the projection of the output data. Currently supported are EPSG:4326 (WGS84, the default) and EPSG:3857 (Web Mercator). .IP \(bu 2 -\fB\fC\-z\fR \fImaxzoom\fP: Specify the highest zoom level to decode from the tileset +\fB\fC\-z\fR \fImaxzoom\fP or \fB\fC\-\-maximum\-zoom=\fR\fImaxzoom\fP: Specify the highest zoom level to decode from the tileset .IP \(bu 2 -\fB\fC\-Z\fR \fIminzoom\fP: Specify the lowest zoom level to decode from the tileset +\fB\fC\-Z\fR \fIminzoom\fP or \fB\fC\-\-minimum\-zoom=\fR\fIminzoom\fP: Specify the lowest zoom level to decode from the tileset .IP \(bu 2 -\fB\fC\-l\fR \fIlayer\fP: Decode only layers with the specified names. (Multiple \fB\fC\-l\fR options can be specified.) +\fB\fC\-l\fR \fIlayer\fP or \fB\fC\-\-layer=\fR\fIlayer\fP: Decode only layers with the specified names. (Multiple \fB\fC\-l\fR options can be specified.) .IP \(bu 2 -\fB\fC\-f\fR: Decode tiles even if polygon ring order or closure problems are detected +\fB\fC\-f\fR or \fB\fC\-\-force\fR: Decode tiles even if polygon ring order or closure problems are detected .RE diff --git a/tile-join.cpp b/tile-join.cpp index e487715f7..2f9b9faed 100644 --- a/tile-join.cpp +++ b/tile-join.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -32,9 +33,10 @@ extern "C" { std::string dequote(std::string s); -bool pk = false; -bool pC = false; +int pk = false; +int pC = false; size_t CPUS; +int quiet = false; struct stats { int minzoom; @@ -626,7 +628,9 @@ void handle_tasks(std::map> &tasks, std::vectorfirst.z, ai->first.x, ai->first.y); + if (!quiet) { + fprintf(stderr, "%lld/%lld/%lld \r", ai->first.z, ai->first.x, ai->first.y); + } } } @@ -1006,12 +1010,47 @@ int main(int argc, char **argv) { std::string set_name, set_description, set_attribution; + struct option long_options[] = { + {"output", required_argument, 0, 'o'}, + {"output-to-directory", required_argument, 0, 'e'}, + {"force", no_argument, 0, 'f'}, + {"if-matched", no_argument, 0, 'i'}, + {"attribution", required_argument, 0, 'A'}, + {"name", required_argument, 0, 'n'}, + {"description", required_argument, 0, 'N'}, + {"prevent", required_argument, 0, 'p'}, + {"csv", required_argument, 0, 'c'}, + {"exclude", required_argument, 0, 'x'}, + {"layer", required_argument, 0, 'l'}, + {"exclude-layer", required_argument, 0, 'L'}, + {"quiet", no_argument, 0, 'q'}, + + {"no-tile-size-limit", no_argument, &pk, 1}, + {"no-tile-compression", no_argument, &pC, 1}, + + {0, 0, 0, 0}, + }; + + std::string getopt_str; + for (size_t lo = 0; long_options[lo].name != NULL; lo++) { + if (long_options[lo].val > ' ') { + getopt_str.push_back(long_options[lo].val); + + if (long_options[lo].has_arg == required_argument) { + getopt_str.push_back(':'); + } + } + } + extern int optind; extern char *optarg; int i; - while ((i = getopt(argc, argv, "fo:e:c:x:ip:l:L:A:N:n:")) != -1) { + while ((i = getopt_long(argc, argv, getopt_str.c_str(), long_options, NULL)) != -1) { switch (i) { + case 0: + break; + case 'o': out_mbtiles = optarg; break; @@ -1073,6 +1112,10 @@ int main(int argc, char **argv) { remove_layers.insert(std::string(optarg)); break; + case 'q': + quiet = true; + break; + default: usage(argv); } diff --git a/version.hpp b/version.hpp index b8ccbdfac..5fdfcceda 100644 --- a/version.hpp +++ b/version.hpp @@ -1 +1 @@ -#define VERSION "tippecanoe v1.19.3\n" +#define VERSION "tippecanoe v1.20.0\n"