mirror of
https://github.com/felt/tippecanoe.git
synced 2026-10-02 08:25:40 +02:00
Add a flag to use an H3 index for the feature index
This commit is contained in:
@@ -99,6 +99,7 @@ int retain_points_multiplier = 1;
|
|||||||
std::vector<std::string> unidecode_data;
|
std::vector<std::string> unidecode_data;
|
||||||
size_t maximum_string_attribute_length = 0;
|
size_t maximum_string_attribute_length = 0;
|
||||||
std::string accumulate_numeric;
|
std::string accumulate_numeric;
|
||||||
|
std::string use_h3_index;
|
||||||
|
|
||||||
std::vector<order_field> order_by;
|
std::vector<order_field> order_by;
|
||||||
bool order_reverse;
|
bool order_reverse;
|
||||||
@@ -3128,6 +3129,7 @@ int main(int argc, char **argv) {
|
|||||||
{"coalesce", no_argument, &additional[A_COALESCE], 1},
|
{"coalesce", no_argument, &additional[A_COALESCE], 1},
|
||||||
{"reverse", no_argument, &additional[A_REVERSE], 1},
|
{"reverse", no_argument, &additional[A_REVERSE], 1},
|
||||||
{"hilbert", no_argument, &additional[A_HILBERT], 1},
|
{"hilbert", no_argument, &additional[A_HILBERT], 1},
|
||||||
|
{"use-h3-index", required_argument, 0, '~'},
|
||||||
{"order-by", required_argument, 0, '~'},
|
{"order-by", required_argument, 0, '~'},
|
||||||
{"order-descending-by", required_argument, 0, '~'},
|
{"order-descending-by", required_argument, 0, '~'},
|
||||||
{"order-smallest-first", no_argument, 0, '~'},
|
{"order-smallest-first", no_argument, 0, '~'},
|
||||||
@@ -3269,6 +3271,8 @@ int main(int argc, char **argv) {
|
|||||||
fprintf(stderr, "%s: --extra-detail can be at most 30\n", argv[0]);
|
fprintf(stderr, "%s: --extra-detail can be at most 30\n", argv[0]);
|
||||||
exit(EXIT_ARGS);
|
exit(EXIT_ARGS);
|
||||||
}
|
}
|
||||||
|
} else if (strcmp(opt, "use-h3-index") == 0) {
|
||||||
|
use_h3_index = optarg;
|
||||||
} else if (strcmp(opt, "order-by") == 0) {
|
} else if (strcmp(opt, "order-by") == 0) {
|
||||||
order_by.push_back(order_field(optarg, false));
|
order_by.push_back(order_field(optarg, false));
|
||||||
} else if (strcmp(opt, "order-descending-by") == 0) {
|
} else if (strcmp(opt, "order-descending-by") == 0) {
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ extern long long extend_zooms_max;
|
|||||||
extern int retain_points_multiplier;
|
extern int retain_points_multiplier;
|
||||||
extern size_t maximum_string_attribute_length;
|
extern size_t maximum_string_attribute_length;
|
||||||
extern std::string accumulate_numeric;
|
extern std::string accumulate_numeric;
|
||||||
|
extern std::string use_h3_index;
|
||||||
extern unsigned long long preserve_multiplier_density_threshold;
|
extern unsigned long long preserve_multiplier_density_threshold;
|
||||||
|
|
||||||
struct order_field {
|
struct order_field {
|
||||||
|
|||||||
+13
@@ -714,6 +714,19 @@ int serialize_feature(struct serialization_state *sst, serial_feature &sf, std::
|
|||||||
}
|
}
|
||||||
|
|
||||||
bbox_index = encode_index(midx, midy);
|
bbox_index = encode_index(midx, midy);
|
||||||
|
|
||||||
|
if (use_h3_index.size() > 0) {
|
||||||
|
for (size_t i = 0; i < sf.full_keys.size(); i++) {
|
||||||
|
if (*(sf.full_keys[i]) == use_h3_index) {
|
||||||
|
unsigned long long h3_index = atoll(sf.full_values[i].s.c_str());
|
||||||
|
// the top 52 bits of the feature index are the H3 index;
|
||||||
|
// the bottom 12 bits are retained from what otherwise would have been the index.
|
||||||
|
bbox_index = ((h3_index & ((1LL << 52) - 1)) << 12) | (bbox_index & ((1 << 12) - 1));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (additional[A_CALCULATE_INDEX]) {
|
if (additional[A_CALCULATE_INDEX]) {
|
||||||
sf.full_keys.push_back(key_pool.pool("tippecanoe:index"));
|
sf.full_keys.push_back(key_pool.pool("tippecanoe:index"));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user