Make some features to bin into

This commit is contained in:
Erica Fischer
2024-08-23 15:59:53 -07:00
parent aae1ab9085
commit 1521c376dd
2 changed files with 49 additions and 8591 deletions
+22 -10
View File
@@ -1295,39 +1295,49 @@ mvt_tile assign_to_bins(mvt_tile const &features, std::vector<mvt_layer> const &
std::sort(events.begin(), events.end()); std::sort(events.begin(), events.end());
std::set<std::pair<size_t, size_t>> active; std::set<std::pair<size_t, size_t>> active;
mvt_layer outlayer;
outlayer.extent = 1 << detail;
outlayer.version = 2;
outlayer.name = features.layers[0].name;
for (auto &e : events) { for (auto &e : events) {
if (e.kind == index_event::ENTER) { if (e.kind == index_event::ENTER) {
printf("enter\n");
active.emplace(e.layer, e.feature); active.emplace(e.layer, e.feature);
const mvt_feature &bin = bins[e.layer].features[e.feature];
mvt_feature outfeature;
outfeature.geometry = bin.geometry;
outfeature.type = bin.type;
for (size_t i = 0; i + 1 < bin.tags.size(); i += 2) {
outlayer.tag(outfeature, bins[e.layer].keys[bin.tags[i]], bins[e.layer].values[bin.tags[i + 1]]);
}
outlayer.features.push_back(std::move(outfeature));
} else if (e.kind == index_event::CHECK) { } else if (e.kind == index_event::CHECK) {
auto const &feature = features.layers[e.layer].features[e.feature]; auto const &feature = features.layers[e.layer].features[e.feature];
printf("checking "); #if 0
for (size_t i = 0; i + 1 < feature.tags.size(); i += 2) { for (size_t i = 0; i + 1 < feature.tags.size(); i += 2) {
printf("%s ", features.layers[e.layer].values[feature.tags[i + 1]].toString().c_str()); printf("%s ", features.layers[e.layer].values[feature.tags[i + 1]].toString().c_str());
} }
printf(": "); printf(": ");
#endif
bool found = false;
for (auto const &a : active) { for (auto const &a : active) {
auto const &bin = bins[a.first].features[a.second]; auto const &bin = bins[a.first].features[a.second];
if (pnpoly_mp(bin.geometry, feature.geometry[0].x, feature.geometry[0].y)) { if (pnpoly_mp(bin.geometry, feature.geometry[0].x, feature.geometry[0].y)) {
#if 0
printf("found: "); printf("found: ");
for (size_t i = 0; i + 1 < bin.tags.size(); i += 2) { for (size_t i = 0; i + 1 < bin.tags.size(); i += 2) {
printf("%s ", bins[a.first].values[bin.tags[i + 1]].toString().c_str()); printf("%s ", bins[a.first].values[bin.tags[i + 1]].toString().c_str());
} }
printf("\n"); printf("\n");
#endif
found = true;
break; break;
} }
} }
if (!found) {
printf("not found\n");
}
} else /* EXIT */ { } else /* EXIT */ {
printf("exit\n");
auto const &found = active.find({e.layer, e.feature}); auto const &found = active.find({e.layer, e.feature});
if (found != active.end()) { if (found != active.end()) {
active.erase(found); active.erase(found);
@@ -1338,7 +1348,9 @@ mvt_tile assign_to_bins(mvt_tile const &features, std::vector<mvt_layer> const &
} }
} }
return features; mvt_tile ret;
ret.layers.push_back(outlayer);
return ret;
} }
std::string overzoom(std::vector<source_tile> const &tiles, int nz, int nx, int ny, std::string overzoom(std::vector<source_tile> const &tiles, int nz, int nx, int ny,
File diff suppressed because it is too large Load Diff