Skip to content

Commit d3a2ff0

Browse files
authored
Clamp affected tiles calculation to sane latitudes (#922)
1 parent 42d8b8a commit d3a2ff0

2 files changed

Lines changed: 6 additions & 2 deletions

File tree

include/coordinates.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,8 @@ double rad2deg(double rad);
9393
// max/min latitudes
9494
constexpr double MaxLat = 85.0511;
9595
constexpr double MinLat = -MaxLat;
96+
constexpr double MaxLatp = 180.0;
97+
constexpr double MinLatp = -MaxLatp;
9698

9799
// Project latitude (spherical Mercator)
98100
// (if calling with raw coords, remember to divide/multiply by 10000000.0)

src/coordinates_geom.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,13 +117,15 @@ void impl_insertIntermediateTiles(T const &points, uint baseZoom, std::unordered
117117
p2 = *it;
118118

119119
// Calculate p2 tile, and mark it
120-
double tileXf2 = lon2tilexf(p2.x(), baseZoom), tileYf2 = latp2tileyf(p2.y(), baseZoom);
120+
double p2y = std::min(MaxLatp, std::max(MinLatp, p2.y()));
121+
double tileXf2 = lon2tilexf(p2.x(), baseZoom), tileYf2 = latp2tileyf(p2y, baseZoom);
121122
TileCoordinate tileX2 = static_cast<TileCoordinate>(tileXf2), tileY2 = static_cast<TileCoordinate>(tileYf2);
122123
tileSet.insert(TileCoordinates(tileX2, tileY2));
123124
if (it == points.begin()) continue; // first point, so no line
124125

125126
// Calculate p1 tile
126-
double tileXf1 = lon2tilexf(p1.x(), baseZoom), tileYf1 = latp2tileyf(p1.y(), baseZoom);
127+
double p1y = std::min(MaxLatp, std::max(MinLatp, p1.y()));
128+
double tileXf1 = lon2tilexf(p1.x(), baseZoom), tileYf1 = latp2tileyf(p1y, baseZoom);
127129
TileCoordinate tileX1 = static_cast<TileCoordinate>(tileXf1), tileY1 = static_cast<TileCoordinate>(tileYf1);
128130
tileSet.insert(TileCoordinates(tileX1,tileY1));
129131

0 commit comments

Comments
 (0)