Skip to content

Commit 464ccb9

Browse files
committed
Remove special case in expire code that doesn't work
We have had some code in osm2pgsql basically forever that is supposed to handle the case where a (multi)polygon crosses the 180° line (antimeridian). The idea is as follows: Lets say we have a polygon (like a small island) straddling the 180° line: +---------------------+ | | | | |> <| | | +---------------------+ If we calculate the bounding box by taking the smallest and the largest longitude value for that polygon, we'll get this: +---------------------+ | | | ___________________ | |[___________________]| | | +---------------------+ To detect this, we check the width of the bounding box. If it is larger than half the circumference of the earth, we assume that we have a case like this. Then we create two bounding boxes, one going from -180° to the left edge of the original bounding box, one from the right edge of the original bounding box to +180° like this: +---------------------+ | | | | |] [| | | +---------------------+ The same code is run for multipolygon relations. So far, so good. The problem is that this is not how we map things. We don't have polygons crossing the 180° line in OSM, because they lead to all sorts of problems when using the data. Instead mapping is done using multipolygon relations. The polygon is split into two, one to the left and one to the right of the 180° line. The effect is that we have two polygons, both touching the 180° line. When we use this algorithm, it calculates the bounding box as going around the whole earth from -180° to +180°, then decides that this is more than half the circumference of the earth, so it creates two new bounding boxes with zero width, one at -180°, one at +180°. That doesn't make any sense. So this code handles cases we don't have in our current planet file, but does the wrong thing for some cases we do have. It comes from way back, probably before we had relations, we should retire it.
1 parent 83a1af0 commit 464ccb9

File tree

1 file changed

+0
-11
lines changed

1 file changed

+0
-11
lines changed

src/expire-tiles.cpp

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -230,17 +230,6 @@ int expire_tiles_t::from_bbox(geom::box_t const &box,
230230
{
231231
double const width = box.width();
232232
double const height = box.height();
233-
if (width > tile_t::HALF_EARTH_CIRCUMFERENCE + 1) {
234-
/* Over half the planet's width within the bounding box - assume the
235-
box crosses the international date line and split it into two boxes */
236-
int ret = from_bbox({-tile_t::HALF_EARTH_CIRCUMFERENCE, box.min_y(),
237-
box.min_x(), box.max_y()},
238-
expire_config);
239-
ret += from_bbox({box.max_x(), box.min_y(),
240-
tile_t::HALF_EARTH_CIRCUMFERENCE, box.max_y()},
241-
expire_config);
242-
return ret;
243-
}
244233

245234
if (expire_config.mode == expire_mode::hybrid &&
246235
(width > expire_config.full_area_limit ||

0 commit comments

Comments
 (0)