mirror of
https://github.com/felt/tippecanoe.git
synced 2026-10-02 08:25:40 +02:00
Fix collapse of islands to shards
This commit is contained in:
+1
-1
@@ -383,7 +383,7 @@ size_t bits(long long n) {
|
||||
return 64;
|
||||
}
|
||||
|
||||
static long long square_distance_from_line(long long point_x, long long point_y, long long segA_x, long long segA_y, long long segB_x, long long segB_y, long long divisor) {
|
||||
long long square_distance_from_line(long long point_x, long long point_y, long long segA_x, long long segA_y, long long segB_x, long long segB_y, long long divisor) {
|
||||
// long long fpversion = square_distance_from_line_fp(point_x, point_y, segA_x, segA_y, segB_x, segB_y);
|
||||
|
||||
if (divisor != 1) {
|
||||
|
||||
@@ -91,6 +91,7 @@ drawvec clip_lines(drawvec &geom, long long x1, long long y1, long long x2, long
|
||||
drawvec clip_point(drawvec &geom, long long x1, long long y1, long long x2, long long y2);
|
||||
void visvalingam(drawvec &ls, size_t start, size_t end, double threshold, size_t retain);
|
||||
int pnpoly(const drawvec &vert, size_t start, size_t nvert, long long testx, long long testy);
|
||||
long long square_distance_from_line(long long point_x, long long point_y, long long segA_x, long long segA_y, long long segB_x, long long segB_y, long long divisor);
|
||||
|
||||
std::string overzoom(std::string s, int oz, int ox, int oy, int nz, int nx, int ny,
|
||||
int detail, int buffer, std::set<std::string> const &keep);
|
||||
|
||||
@@ -2329,16 +2329,13 @@ long long write_tile(decompressor *geoms, std::atomic<long long> *geompos_in, ch
|
||||
size_t which2 = i;
|
||||
|
||||
for (size_t k = i + 1; k < j - 1; k++) {
|
||||
double xd = sf.geometry[k].x - sf.geometry[i].x;
|
||||
double yd = sf.geometry[k].y - sf.geometry[i].y;
|
||||
double xd2 = sf.geometry[k].x - sf.geometry[which].x;
|
||||
double yd2 = sf.geometry[k].y - sf.geometry[which].y;
|
||||
double d1 = xd * xd + yd * yd;
|
||||
double d2 = xd2 * xd2 + yd2 * yd2;
|
||||
if (d1 != 0 && d2 != 0 &&
|
||||
(d1 + d2 > far ||
|
||||
((d1 + d2 == far) && (sf.geometry[k] < sf.geometry[which2])))) {
|
||||
far = d1 + d2;
|
||||
long long d = square_distance_from_line(sf.geometry[k].x, sf.geometry[k].y,
|
||||
sf.geometry[i].x, sf.geometry[i].y,
|
||||
sf.geometry[which].x, sf.geometry[which].y,
|
||||
16);
|
||||
if ((d > far) ||
|
||||
((d == far) && (sf.geometry[k] < sf.geometry[which2]))) {
|
||||
far = d;
|
||||
which2 = k;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user