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;
|
||||
size_t maximum_string_attribute_length = 0;
|
||||
std::string accumulate_numeric;
|
||||
std::string use_h3_index;
|
||||
|
||||
std::vector<order_field> order_by;
|
||||
bool order_reverse;
|
||||
@@ -3128,6 +3129,7 @@ int main(int argc, char **argv) {
|
||||
{"coalesce", no_argument, &additional[A_COALESCE], 1},
|
||||
{"reverse", no_argument, &additional[A_REVERSE], 1},
|
||||
{"hilbert", no_argument, &additional[A_HILBERT], 1},
|
||||
{"use-h3-index", required_argument, 0, '~'},
|
||||
{"order-by", required_argument, 0, '~'},
|
||||
{"order-descending-by", required_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]);
|
||||
exit(EXIT_ARGS);
|
||||
}
|
||||
} else if (strcmp(opt, "use-h3-index") == 0) {
|
||||
use_h3_index = optarg;
|
||||
} else if (strcmp(opt, "order-by") == 0) {
|
||||
order_by.push_back(order_field(optarg, false));
|
||||
} else if (strcmp(opt, "order-descending-by") == 0) {
|
||||
|
||||
@@ -53,6 +53,7 @@ extern long long extend_zooms_max;
|
||||
extern int retain_points_multiplier;
|
||||
extern size_t maximum_string_attribute_length;
|
||||
extern std::string accumulate_numeric;
|
||||
extern std::string use_h3_index;
|
||||
extern unsigned long long preserve_multiplier_density_threshold;
|
||||
|
||||
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);
|
||||
|
||||
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]) {
|
||||
sf.full_keys.push_back(key_pool.pool("tippecanoe:index"));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user