diff --git a/geometry.cpp b/geometry.cpp index 646d2db9e..037707d65 100644 --- a/geometry.cpp +++ b/geometry.cpp @@ -197,21 +197,25 @@ drawvec reduce_tiny_poly(drawvec &geom, int z, int detail, bool *still_needs_sim double area = get_area(geom, i, j); - long long minx = LLONG_MAX; - long long maxx = LLONG_MIN; - long long miny = LLONG_MAX; - long long maxy = LLONG_MIN; - for (auto const &d : geom) { - minx = std::min(minx, (long long) d.x); - maxx = std::max(maxx, (long long) d.x); - miny = std::min(miny, (long long) d.y); - maxy = std::max(maxy, (long long) d.y); - } - if (area > 0 && area <= pixel * pixel && area < (maxx - minx) * (maxy - miny) / 5) { - // if the polygon doesn't use most of its area, - // don't let it be dust, because the shape is - // probably something weird and interesting. - area = pixel * pixel * 2; + // if we are trying to salvage polygons that would otherwise drop out, + // also raise the standards for what can qualify as polygon dust + if (additional[A_BUFFER_POLYGONS_OUTWARD]) { + long long minx = LLONG_MAX; + long long maxx = LLONG_MIN; + long long miny = LLONG_MAX; + long long maxy = LLONG_MIN; + for (auto const &d : geom) { + minx = std::min(minx, (long long) d.x); + maxx = std::max(maxx, (long long) d.x); + miny = std::min(miny, (long long) d.y); + maxy = std::max(maxy, (long long) d.y); + } + if (area > 0 && area <= pixel * pixel && area < (maxx - minx) * (maxy - miny) / 3) { + // if the polygon doesn't use most of its area, + // don't let it be dust, because the shape is + // probably something weird and interesting. + area = pixel * pixel * 2; + } } // XXX There is an ambiguity here: If the area of a ring is 0 and it is followed by holes, diff --git a/tile.cpp b/tile.cpp index ed59f5c9b..f42dc3059 100644 --- a/tile.cpp +++ b/tile.cpp @@ -614,7 +614,7 @@ void *partial_feature_worker(void *v) { drawvec geom = (*partials)[i].geoms[0]; if (additional[A_BUFFER_POLYGONS_OUTWARD] && t == VT_POLYGON) { - geom = buffer_poly(geom, (1LL << (32 - z - out_detail)) * sqrt(2) / 2, z, (*partials)[i].tx, (*partials)[i].ty, a->shared_nodes_map, a->nodepos); + geom = buffer_poly(geom, (1LL << (32 - z - out_detail)) * sqrt(2), z, (*partials)[i].tx, (*partials)[i].ty, a->shared_nodes_map, a->nodepos); } to_tile_scale(geom, z, out_detail);