mirror of
https://github.com/felt/tippecanoe.git
synced 2026-10-02 08:25:40 +02:00
Track the new identity of merged polygons so they can be merged further
This commit is contained in:
@@ -390,6 +390,7 @@ struct partial {
|
|||||||
signed char t;
|
signed char t;
|
||||||
unsigned long long id;
|
unsigned long long id;
|
||||||
bool has_id;
|
bool has_id;
|
||||||
|
ssize_t renamed;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct partial_arg {
|
struct partial_arg {
|
||||||
@@ -971,7 +972,13 @@ bool find_common_edges(std::vector<partial> &partials, int z, int line_detail, d
|
|||||||
}
|
}
|
||||||
|
|
||||||
size_t i = order[o].p1;
|
size_t i = order[o].p1;
|
||||||
// XXX snap links
|
while (partials[i].renamed >= 0) {
|
||||||
|
i = partials[i].renamed;
|
||||||
|
}
|
||||||
|
size_t i2 = order[o].p2;
|
||||||
|
while (partials[i2].renamed >= 0) {
|
||||||
|
i2 = partials[i2].renamed;
|
||||||
|
}
|
||||||
|
|
||||||
for (size_t j = 0; j < partials[i].arc_polygon.size() && merged < merge_count; j++) {
|
for (size_t j = 0; j < partials[i].arc_polygon.size() && merged < merge_count; j++) {
|
||||||
if (partials[i].arc_polygon[j] == order[o].edge) {
|
if (partials[i].arc_polygon[j] == order[o].edge) {
|
||||||
@@ -987,7 +994,7 @@ bool find_common_edges(std::vector<partial> &partials, int z, int line_detail, d
|
|||||||
|
|
||||||
std::vector<ssize_t> additions;
|
std::vector<ssize_t> additions;
|
||||||
std::vector<ssize_t> &here = partials[i].arc_polygon;
|
std::vector<ssize_t> &here = partials[i].arc_polygon;
|
||||||
std::vector<ssize_t> &other = partials[order[o].p2].arc_polygon;
|
std::vector<ssize_t> &other = partials[i2].arc_polygon;
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
printf("seeking %zd\n", partials[i].arc_polygon[j]);
|
printf("seeking %zd\n", partials[i].arc_polygon[j]);
|
||||||
@@ -1053,7 +1060,8 @@ bool find_common_edges(std::vector<partial> &partials, int z, int line_detail, d
|
|||||||
k = l;
|
k = l;
|
||||||
}
|
}
|
||||||
|
|
||||||
partials[order[o].p2].arc_polygon.clear();
|
partials[i2].arc_polygon.clear();
|
||||||
|
partials[i2].renamed = i;
|
||||||
merged++;
|
merged++;
|
||||||
|
|
||||||
for (size_t k = 0; k < additions.size(); k++) {
|
for (size_t k = 0; k < additions.size(); k++) {
|
||||||
@@ -1424,6 +1432,7 @@ long long write_tile(FILE *geoms, long long *geompos_in, char *metabase, char *s
|
|||||||
p.has_id = has_id;
|
p.has_id = has_id;
|
||||||
p.index2 = merge_previndex;
|
p.index2 = merge_previndex;
|
||||||
p.index = index;
|
p.index = index;
|
||||||
|
p.renamed = -1;
|
||||||
partials.push_back(p);
|
partials.push_back(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user