h3 3.4.4 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/Gemfile.lock +1 -1
- data/README.md +2 -1
- data/ext/h3/Makefile +1 -1
- data/ext/h3/src/.gitignore +2 -1
- data/ext/h3/src/CHANGELOG.md +9 -0
- data/ext/h3/src/CMakeLists.txt +72 -45
- data/ext/h3/src/RELEASE.md +2 -1
- data/ext/h3/src/VERSION +1 -1
- data/ext/h3/src/docs/api/hierarchy.md +2 -0
- data/ext/h3/src/docs/api/indexing.md +3 -1
- data/ext/h3/src/docs/api/inspection.md +20 -0
- data/ext/h3/src/docs/api/misc.md +2 -0
- data/ext/h3/src/docs/api/regions.md +2 -0
- data/ext/h3/src/docs/api/traversal.md +2 -0
- data/ext/h3/src/docs/api/uniedge.md +2 -0
- data/ext/h3/src/docs/community/bindings.md +4 -0
- data/ext/h3/src/docs/community/tutorials.md +12 -0
- data/ext/h3/src/scripts/update_version.sh +50 -0
- data/ext/h3/src/src/apps/applib/include/args.h +122 -0
- data/ext/h3/src/src/apps/applib/include/utility.h +5 -62
- data/ext/h3/src/src/apps/applib/lib/args.c +216 -0
- data/ext/h3/src/src/apps/applib/lib/utility.c +40 -206
- data/ext/h3/src/src/apps/filters/geoToH3.c +7 -9
- data/ext/h3/src/src/apps/filters/h3ToComponents.c +50 -47
- data/ext/h3/src/src/apps/filters/h3ToGeo.c +7 -30
- data/ext/h3/src/src/apps/filters/h3ToGeoBoundary.c +7 -27
- data/ext/h3/src/src/apps/filters/h3ToLocalIj.c +42 -25
- data/ext/h3/src/src/apps/filters/hexRange.c +43 -24
- data/ext/h3/src/src/apps/filters/kRing.c +4 -4
- data/ext/h3/src/src/apps/filters/localIjToH3.c +63 -21
- data/ext/h3/src/src/apps/miscapps/h3ToGeoBoundaryHier.c +68 -44
- data/ext/h3/src/src/apps/miscapps/h3ToGeoHier.c +68 -43
- data/ext/h3/src/src/apps/miscapps/h3ToHier.c +48 -37
- data/ext/h3/src/src/apps/testapps/mkRandGeo.c +32 -27
- data/ext/h3/src/src/apps/testapps/mkRandGeoBoundary.c +33 -28
- data/ext/h3/src/src/apps/testapps/testH3GetFaces.c +136 -0
- data/ext/h3/src/src/h3lib/include/faceijk.h +19 -7
- data/ext/h3/src/src/h3lib/include/h3api.h.in +12 -1
- data/ext/h3/src/src/h3lib/lib/algos.c +7 -2
- data/ext/h3/src/src/h3lib/lib/faceijk.c +135 -103
- data/ext/h3/src/src/h3lib/lib/h3Index.c +86 -5
- data/lib/h3/bindings/private.rb +1 -0
- data/lib/h3/inspection.rb +34 -0
- data/lib/h3/version.rb +1 -1
- data/spec/inspection_spec.rb +33 -1
- metadata +6 -2
@@ -17,7 +17,7 @@
|
|
17
17
|
* @brief stdin/stdout filter that converts from lat/lon coordinates to integer
|
18
18
|
* H3 indexes
|
19
19
|
*
|
20
|
-
*
|
20
|
+
* See `geoToH3 --help` for usage.
|
21
21
|
*
|
22
22
|
* The program reads lat/lon pairs from stdin until EOF is encountered. For
|
23
23
|
* each lat/lon the program outputs to stdout the integer H3 index of the
|
@@ -32,8 +32,7 @@
|
|
32
32
|
* latN lonN
|
33
33
|
*/
|
34
34
|
|
35
|
-
#include
|
36
|
-
#include <stdlib.h>
|
35
|
+
#include "args.h"
|
37
36
|
#include "h3Index.h"
|
38
37
|
#include "utility.h"
|
39
38
|
|
@@ -58,8 +57,7 @@ int main(int argc, char* argv[]) {
|
|
58
57
|
double lat = 0;
|
59
58
|
double lon = 0;
|
60
59
|
|
61
|
-
Arg helpArg =
|
62
|
-
.helpText = "Show this help message."};
|
60
|
+
Arg helpArg = ARG_HELP;
|
63
61
|
Arg resArg = {.names = {"-r", "--resolution"},
|
64
62
|
.required = true,
|
65
63
|
.scanFormat = "%d",
|
@@ -72,7 +70,7 @@ int main(int argc, char* argv[]) {
|
|
72
70
|
.value = &lat,
|
73
71
|
.helpText =
|
74
72
|
"Latitude in degrees. If not specified, \"latitude "
|
75
|
-
"longitude\" pairs will be read from
|
73
|
+
"longitude\" pairs will be read from standard input."};
|
76
74
|
Arg lonArg = {.names = {"--lon", "--longitude"},
|
77
75
|
.scanFormat = "%lf",
|
78
76
|
.valueName = "lon",
|
@@ -80,17 +78,17 @@ int main(int argc, char* argv[]) {
|
|
80
78
|
.helpText = "Longitude in degrees."};
|
81
79
|
|
82
80
|
Arg* args[] = {&helpArg, &resArg, &latArg, &lonArg};
|
83
|
-
|
81
|
+
const int numArgs = 4;
|
84
82
|
const char* helpText =
|
85
83
|
"Convert degrees latitude/longitude coordinates to H3 indexes.";
|
86
84
|
|
87
|
-
if (parseArgs(argc, argv,
|
85
|
+
if (parseArgs(argc, argv, numArgs, args, &helpArg, helpText)) {
|
88
86
|
return helpArg.found ? 0 : 1;
|
89
87
|
}
|
90
88
|
|
91
89
|
if (latArg.found != lonArg.found) {
|
92
90
|
// One is found but the other is not.
|
93
|
-
printHelp(stderr, argv[0], helpText,
|
91
|
+
printHelp(stderr, argv[0], helpText, numArgs, args,
|
94
92
|
"Latitude and longitude must both be specified.", NULL);
|
95
93
|
return 1;
|
96
94
|
}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/*
|
2
|
-
* Copyright 2016-2017 Uber Technologies, Inc.
|
2
|
+
* Copyright 2016-2017, 2019 Uber Technologies, Inc.
|
3
3
|
*
|
4
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
5
5
|
* you may not use this file except in compliance with the License.
|
@@ -17,16 +17,14 @@
|
|
17
17
|
* @brief stdin/stdout filter that converts from integer H3 indexes to
|
18
18
|
* components.
|
19
19
|
*
|
20
|
-
*
|
20
|
+
* See `h3ToComponents --help` for usage.
|
21
21
|
*
|
22
22
|
* The program reads H3 indexes from stdin until EOF and outputs the
|
23
23
|
* corresponding component strings to stdout.
|
24
24
|
*/
|
25
25
|
|
26
|
-
#include <
|
27
|
-
#include
|
28
|
-
#include <string.h>
|
29
|
-
#include "baseCells.h"
|
26
|
+
#include <inttypes.h>
|
27
|
+
#include "args.h"
|
30
28
|
#include "h3Index.h"
|
31
29
|
#include "utility.h"
|
32
30
|
|
@@ -44,29 +42,12 @@ char resDigitToChar(int d) {
|
|
44
42
|
return '0' + d;
|
45
43
|
}
|
46
44
|
|
47
|
-
void doCell(H3Index h,
|
45
|
+
void doCell(H3Index h, bool verboseMode) {
|
48
46
|
int h3Mode = H3_GET_MODE(h);
|
49
47
|
int h3Res = H3_GET_RESOLUTION(h);
|
50
48
|
int h3BaseCell = H3_GET_BASE_CELL(h);
|
51
|
-
if (verboseMode
|
52
|
-
|
53
|
-
printf("%d:%d:%d:", h3Mode, h3Res, h3BaseCell);
|
54
|
-
for (int i = 1; i <= h3Res; i++) {
|
55
|
-
printf("%c", resDigitToChar(H3_GET_INDEX_DIGIT(h, i)));
|
56
|
-
}
|
57
|
-
printf("\n");
|
58
|
-
} else if (h3Mode == H3_UNIEDGE_MODE) {
|
59
|
-
printf("%d:%d:%d:%d:", h3Mode, H3_GET_RESERVED_BITS(h), h3Res,
|
60
|
-
h3BaseCell);
|
61
|
-
for (int i = 1; i <= h3Res; i++) {
|
62
|
-
printf("%c", resDigitToChar(H3_GET_INDEX_DIGIT(h, i)));
|
63
|
-
}
|
64
|
-
printf("\n");
|
65
|
-
} else {
|
66
|
-
printf("INVALID INDEX\n");
|
67
|
-
}
|
68
|
-
} else {
|
69
|
-
char* modes[] = {
|
49
|
+
if (verboseMode) {
|
50
|
+
const char* modes[] = {
|
70
51
|
"RESERVED", // 0
|
71
52
|
"Hexagon", // 1
|
72
53
|
"Unidirectional Edge", // 2
|
@@ -100,33 +81,55 @@ void doCell(H3Index h, int verboseMode) {
|
|
100
81
|
resDigitToChar(H3_GET_INDEX_DIGIT(h, i)));
|
101
82
|
}
|
102
83
|
printf("╚════════════╝\n\n");
|
84
|
+
} else {
|
85
|
+
if (h3Mode == H3_HEXAGON_MODE) {
|
86
|
+
printf("%d:%d:%d:", h3Mode, h3Res, h3BaseCell);
|
87
|
+
for (int i = 1; i <= h3Res; i++) {
|
88
|
+
printf("%c", resDigitToChar(H3_GET_INDEX_DIGIT(h, i)));
|
89
|
+
}
|
90
|
+
printf("\n");
|
91
|
+
} else if (h3Mode == H3_UNIEDGE_MODE) {
|
92
|
+
printf("%d:%d:%d:%d:", h3Mode, H3_GET_RESERVED_BITS(h), h3Res,
|
93
|
+
h3BaseCell);
|
94
|
+
for (int i = 1; i <= h3Res; i++) {
|
95
|
+
printf("%c", resDigitToChar(H3_GET_INDEX_DIGIT(h, i)));
|
96
|
+
}
|
97
|
+
printf("\n");
|
98
|
+
} else {
|
99
|
+
printf("INVALID INDEX\n");
|
100
|
+
}
|
103
101
|
}
|
104
102
|
}
|
105
103
|
|
106
104
|
int main(int argc, char* argv[]) {
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
105
|
+
Arg helpArg = ARG_HELP;
|
106
|
+
Arg verboseArg = {.names = {"-v", "--verbose"},
|
107
|
+
.helpText = "Verbose output mode."};
|
108
|
+
DEFINE_INDEX_ARG(index, indexArg);
|
109
|
+
const int numArgs = 3;
|
110
|
+
Arg* args[] = {&helpArg, &verboseArg, &indexArg};
|
111
|
+
|
112
|
+
if (parseArgs(argc, argv, numArgs, args, &helpArg,
|
113
|
+
"Converts H3 indexes to component parts")) {
|
114
|
+
return helpArg.found ? 0 : 1;
|
116
115
|
}
|
117
116
|
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
//
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
117
|
+
if (indexArg.found) {
|
118
|
+
doCell(index, verboseArg.found);
|
119
|
+
} else {
|
120
|
+
// process the indexes on stdin
|
121
|
+
char buff[BUFF_SIZE];
|
122
|
+
while (1) {
|
123
|
+
// get an index from stdin
|
124
|
+
if (!fgets(buff, BUFF_SIZE, stdin)) {
|
125
|
+
if (feof(stdin))
|
126
|
+
break;
|
127
|
+
else
|
128
|
+
error("reading H3 index from stdin");
|
129
|
+
}
|
128
130
|
|
129
|
-
|
130
|
-
|
131
|
+
H3Index h3 = H3_EXPORT(stringToH3)(buff);
|
132
|
+
doCell(h3, verboseArg.found);
|
133
|
+
}
|
131
134
|
}
|
132
135
|
}
|
@@ -17,8 +17,7 @@
|
|
17
17
|
* @brief stdin/stdout filter that converts from integer H3 indexes to lat/lon
|
18
18
|
* cell center point
|
19
19
|
*
|
20
|
-
*
|
21
|
-
* desc]]`
|
20
|
+
* See `h3ToGeo --help` for usage.
|
22
21
|
*
|
23
22
|
* The program reads H3 indexes from stdin and outputs the corresponding
|
24
23
|
* cell center points to stdout, until EOF is encountered. The H3 indexes
|
@@ -42,9 +41,7 @@
|
|
42
41
|
*/
|
43
42
|
|
44
43
|
#include <inttypes.h>
|
45
|
-
#include
|
46
|
-
#include <stdlib.h>
|
47
|
-
#include <string.h>
|
44
|
+
#include "args.h"
|
48
45
|
#include "h3api.h"
|
49
46
|
#include "kml.h"
|
50
47
|
#include "utility.h"
|
@@ -66,31 +63,11 @@ void doCell(H3Index h, int isKmlOut) {
|
|
66
63
|
}
|
67
64
|
|
68
65
|
int main(int argc, char *argv[]) {
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
.helpText = "Show this help message."};
|
75
|
-
Arg indexArg = {
|
76
|
-
.names = {"-i", "--index"},
|
77
|
-
.scanFormat = "%" PRIx64,
|
78
|
-
.valueName = "index",
|
79
|
-
.value = &index,
|
80
|
-
.helpText =
|
81
|
-
"Index, or not specified to read indexes from standard in."};
|
82
|
-
Arg kmlArg = {.names = {"-k", "--kml"},
|
83
|
-
.helpText = "Print output in KML format."};
|
84
|
-
Arg kmlNameArg = {.names = {"--kn", "--kml-name"},
|
85
|
-
.scanFormat = "%255c", // BUFF_SIZE - 1
|
86
|
-
.valueName = "name",
|
87
|
-
.value = &userKmlName,
|
88
|
-
.helpText = "Text for the KML name tag."};
|
89
|
-
Arg kmlDescArg = {.names = {"--kd", "--kml-description"},
|
90
|
-
.scanFormat = "%255c", // BUFF_SIZE - 1
|
91
|
-
.valueName = "description",
|
92
|
-
.value = &userKmlDesc,
|
93
|
-
.helpText = "Text for the KML description tag."};
|
66
|
+
Arg helpArg = ARG_HELP;
|
67
|
+
DEFINE_INDEX_ARG(index, indexArg);
|
68
|
+
Arg kmlArg = ARG_KML;
|
69
|
+
DEFINE_KML_NAME_ARG(userKmlName, kmlNameArg);
|
70
|
+
DEFINE_KML_DESC_ARG(userKmlDesc, kmlDescArg);
|
94
71
|
|
95
72
|
Arg *args[] = {&helpArg, &indexArg, &kmlArg, &kmlNameArg, &kmlDescArg};
|
96
73
|
|
@@ -17,8 +17,7 @@
|
|
17
17
|
* @brief stdin/stdout filter that converts from integer H3 indexes to lat/lon
|
18
18
|
* cell boundaries
|
19
19
|
*
|
20
|
-
*
|
21
|
-
* [--kml-description desc]]`
|
20
|
+
* See `h3ToGeoBoundary --help` for usage.
|
22
21
|
*
|
23
22
|
* The program reads H3 indexes from stdin and outputs the corresponding
|
24
23
|
* cell boundaries to stdout, until EOF is encountered.
|
@@ -44,6 +43,7 @@
|
|
44
43
|
#include <stdio.h>
|
45
44
|
#include <stdlib.h>
|
46
45
|
#include <string.h>
|
46
|
+
#include "args.h"
|
47
47
|
#include "h3api.h"
|
48
48
|
#include "kml.h"
|
49
49
|
#include "utility.h"
|
@@ -64,31 +64,11 @@ void doCell(H3Index h, int isKmlOut) {
|
|
64
64
|
}
|
65
65
|
|
66
66
|
int main(int argc, char *argv[]) {
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
.helpText = "Show this help message."};
|
73
|
-
Arg indexArg = {
|
74
|
-
.names = {"-i", "--index"},
|
75
|
-
.scanFormat = "%" PRIx64,
|
76
|
-
.valueName = "index",
|
77
|
-
.value = &index,
|
78
|
-
.helpText =
|
79
|
-
"Index, or not specified to read indexes from standard in."};
|
80
|
-
Arg kmlArg = {.names = {"-k", "--kml"},
|
81
|
-
.helpText = "Print output in KML format."};
|
82
|
-
Arg kmlNameArg = {.names = {"--kn", "--kml-name"},
|
83
|
-
.scanFormat = "%255c", // BUFF_SIZE - 1
|
84
|
-
.valueName = "name",
|
85
|
-
.value = &userKmlName,
|
86
|
-
.helpText = "Text for the KML name tag."};
|
87
|
-
Arg kmlDescArg = {.names = {"--kd", "--kml-description"},
|
88
|
-
.scanFormat = "%255c", // BUFF_SIZE - 1
|
89
|
-
.valueName = "description",
|
90
|
-
.value = &userKmlDesc,
|
91
|
-
.helpText = "Text for the KML description tag."};
|
67
|
+
Arg helpArg = ARG_HELP;
|
68
|
+
DEFINE_INDEX_ARG(index, indexArg);
|
69
|
+
Arg kmlArg = ARG_KML;
|
70
|
+
DEFINE_KML_NAME_ARG(userKmlName, kmlNameArg);
|
71
|
+
DEFINE_KML_DESC_ARG(userKmlDesc, kmlDescArg);
|
92
72
|
|
93
73
|
Arg *args[] = {&helpArg, &indexArg, &kmlArg, &kmlNameArg, &kmlDescArg};
|
94
74
|
|
@@ -17,7 +17,7 @@
|
|
17
17
|
* @brief stdin/stdout filter that converts from H3 indexes to local IJ
|
18
18
|
* coordinates. This is experimental.
|
19
19
|
*
|
20
|
-
*
|
20
|
+
* See `h3ToLocalIj --help` for usage.
|
21
21
|
*
|
22
22
|
* The program reads H3 indexes from stdin and outputs the corresponding
|
23
23
|
* IJ coordinates to stdout, until EOF is encountered. `NA` is printed if the
|
@@ -33,8 +33,7 @@
|
|
33
33
|
#include <inttypes.h>
|
34
34
|
#include <stdio.h>
|
35
35
|
#include <stdlib.h>
|
36
|
-
#include "
|
37
|
-
#include "h3Index.h"
|
36
|
+
#include "args.h"
|
38
37
|
#include "h3api.h"
|
39
38
|
#include "utility.h"
|
40
39
|
|
@@ -47,32 +46,50 @@ void doCell(H3Index h, H3Index origin) {
|
|
47
46
|
}
|
48
47
|
}
|
49
48
|
|
50
|
-
int main(int argc, char
|
51
|
-
|
52
|
-
if (argc != 2) {
|
53
|
-
fprintf(stderr, "usage: %s [origin]\n", argv[0]);
|
54
|
-
exit(1);
|
55
|
-
}
|
49
|
+
int main(int argc, char* argv[]) {
|
50
|
+
H3Index origin = 0;
|
56
51
|
|
57
|
-
|
52
|
+
Arg helpArg = ARG_HELP;
|
53
|
+
Arg originArg = {
|
54
|
+
.names = {"-o", "--origin"},
|
55
|
+
.scanFormat = "%" PRIx64,
|
56
|
+
.valueName = "origin",
|
57
|
+
.value = &origin,
|
58
|
+
.required = true,
|
59
|
+
.helpText =
|
60
|
+
"Origin (anchoring index) for the local coordinate system."};
|
61
|
+
DEFINE_INDEX_ARG(index, indexArg);
|
58
62
|
|
59
|
-
|
60
|
-
|
63
|
+
Arg* args[] = {&helpArg, &originArg, &indexArg};
|
64
|
+
const int numArgs = 3;
|
65
|
+
const char* helpText = "Converts H3 indexes to local IJ coordinates";
|
61
66
|
|
62
|
-
if (
|
67
|
+
if (parseArgs(argc, argv, numArgs, args, &helpArg, helpText)) {
|
68
|
+
return helpArg.found ? 0 : 1;
|
69
|
+
}
|
63
70
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
if (feof(stdin))
|
70
|
-
break;
|
71
|
-
else
|
72
|
-
error("reading H3 index from stdin");
|
73
|
-
}
|
71
|
+
if (!H3_EXPORT(h3IsValid)(origin)) {
|
72
|
+
printHelp(stderr, argv[0], helpText, numArgs, args,
|
73
|
+
"Origin is invalid.", NULL);
|
74
|
+
return 1;
|
75
|
+
}
|
74
76
|
|
75
|
-
|
76
|
-
doCell(
|
77
|
+
if (indexArg.found) {
|
78
|
+
doCell(index, origin);
|
79
|
+
} else {
|
80
|
+
// process the indexes on stdin
|
81
|
+
char buff[BUFF_SIZE];
|
82
|
+
while (1) {
|
83
|
+
// get an index from stdin
|
84
|
+
if (!fgets(buff, BUFF_SIZE, stdin)) {
|
85
|
+
if (feof(stdin))
|
86
|
+
break;
|
87
|
+
else
|
88
|
+
error("reading H3 index from stdin");
|
89
|
+
}
|
90
|
+
|
91
|
+
H3Index h3 = H3_EXPORT(stringToH3)(buff);
|
92
|
+
doCell(h3, origin);
|
93
|
+
}
|
77
94
|
}
|
78
95
|
}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/*
|
2
|
-
* Copyright 2016-2017 Uber Technologies, Inc.
|
2
|
+
* Copyright 2016-2017, 2019 Uber Technologies, Inc.
|
3
3
|
*
|
4
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
5
5
|
* you may not use this file except in compliance with the License.
|
@@ -17,7 +17,7 @@
|
|
17
17
|
* @brief stdin/stdout filter that converts from integer H3 indexes to
|
18
18
|
* k-rings
|
19
19
|
*
|
20
|
-
*
|
20
|
+
* See `hexRange --help` for usage.
|
21
21
|
*
|
22
22
|
* The program reads H3 indexes from stdin until EOF and outputs
|
23
23
|
* the H3 indexes within k-ring `k` to stdout. Requires all indexes
|
@@ -28,10 +28,11 @@
|
|
28
28
|
* as the only output.
|
29
29
|
*/
|
30
30
|
|
31
|
+
#include <inttypes.h>
|
31
32
|
#include <stdio.h>
|
32
33
|
#include <stdlib.h>
|
33
|
-
#include "
|
34
|
-
#include "
|
34
|
+
#include "args.h"
|
35
|
+
#include "h3api.h"
|
35
36
|
#include "utility.h"
|
36
37
|
|
37
38
|
void doCell(H3Index h, int k) {
|
@@ -50,29 +51,47 @@ void doCell(H3Index h, int k) {
|
|
50
51
|
}
|
51
52
|
|
52
53
|
int main(int argc, char* argv[]) {
|
53
|
-
// check command line args
|
54
|
-
if (argc != 2) {
|
55
|
-
fprintf(stderr, "usage: %s [k]\n", argv[0]);
|
56
|
-
exit(1);
|
57
|
-
}
|
58
|
-
|
59
54
|
int k = 0;
|
60
|
-
|
61
|
-
|
55
|
+
H3Index origin = 0;
|
56
|
+
|
57
|
+
Arg helpArg = ARG_HELP;
|
58
|
+
Arg kArg = {.names = {"-k", NULL},
|
59
|
+
.required = true,
|
60
|
+
.scanFormat = "%d",
|
61
|
+
.valueName = "k",
|
62
|
+
.value = &k,
|
63
|
+
.helpText = "Radius in hexagons."};
|
64
|
+
Arg originArg = {
|
65
|
+
.names = {"-o", "--origin"},
|
66
|
+
.scanFormat = "%" PRIx64,
|
67
|
+
.valueName = "origin",
|
68
|
+
.value = &origin,
|
69
|
+
.helpText =
|
70
|
+
"Origin, or not specified to read origins from standard input."};
|
71
|
+
const int numArgs = 3;
|
72
|
+
Arg* args[] = {&helpArg, &kArg, &originArg};
|
73
|
+
|
74
|
+
if (parseArgs(argc, argv, numArgs, args, &helpArg,
|
75
|
+
"Print indexes k distance away from the origin")) {
|
76
|
+
return helpArg.found ? 0 : 1;
|
62
77
|
}
|
63
78
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
//
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
79
|
+
if (originArg.found) {
|
80
|
+
doCell(origin, k);
|
81
|
+
} else {
|
82
|
+
// process the indexes on stdin
|
83
|
+
char buff[BUFF_SIZE];
|
84
|
+
while (1) {
|
85
|
+
// get an index from stdin
|
86
|
+
if (!fgets(buff, BUFF_SIZE, stdin)) {
|
87
|
+
if (feof(stdin))
|
88
|
+
break;
|
89
|
+
else
|
90
|
+
error("reading H3 index from stdin");
|
91
|
+
}
|
74
92
|
|
75
|
-
|
76
|
-
|
93
|
+
H3Index h3 = H3_EXPORT(stringToH3)(buff);
|
94
|
+
doCell(h3, k);
|
95
|
+
}
|
77
96
|
}
|
78
97
|
}
|