3 ms·
The situation I was talking about above is one I've observed in production but don't have samples at the ready for, so maybe I'll give another example of weird
by apendleton 6y ago
The situation I was talking about above is one I've observed in production but don't have samples at the ready for, so maybe I'll give another example of weird antemeridian stuff that doesn't require example idiosyncratic polygons: bounding boxes.
We see cases in computational geometry all the time where people use [min_x,min_y,max_x,max_y] bounding boxes when operating on sets of points or polygons or whatever, usually either (a) as entries in some sort of a spatial index like an R-Tree, or (b) as part of some short-circuit to avoid a more expensive polygon operation (like, if the question is "is this point in this polygon?" if you have the polygon's bounding box pre-calculated, you can first cheaply check if the point is in the box before doing the expensive point-in-poly operation; likewise to see if two polygons intersect, you can see if their bounding boxes intersect first, etc.).
Turns out though, that with the usual naive bounding box math, features like the US or Russia end up with bounding boxes that wrap all the way around the world in the X direction, which makes them pretty useless for those kinds of operations. So then you inevitably think "well, okay, we can have the bounding box cross the antemeridian." But then all kinds of assumptions about bounding boxes start to break down: suddenly your "minimum" can be bigger than your "maximum," and your point_in_bbox function that wasn't AM-aware breaks, as does your bboxes_intersect function. So then you fix those, but it turns out even the process of figuring out what the optimal bounding box of a multi-part geometry that can cross the antemeridian should be is non-trivial; imagining a multi-point geometry comprised of three points spaced equally in the X direction around the world, there are three possible distinct, equally optimally sized bounding boxes one could draw, so it turns out a given set of points doesn't have a unique optimal bounding box anymore either.
Even assuming a set of points does though, you usually end up with an algorithm that looks for the biggest X-direction "gap" between components and makes that the part not in the bounding box, and the rest in. But that leads to yet more subtle weirdness: in non-wrapping geometry, for example, you can assume that if you have two sets of points, and calculate the bounding boxes for each, the bounding box of the union of the sets of points is the bounding box of the union of the bounding boxes. But in the wrapping/AM-crossing context, that's not necessarily the case anymore: your points could combine in such a way that that optimal largest "gap" is now in a different position, and you have a totally different bounding box over the combined sets of points than you would over the combined bounding boxes.
etc., etc., etc.
None of this is impossible to handle, but it's sort of akin to those "things programmers assume about dates" blog posts: most people, and especially people who live in the continental US, just don't think about any of this, and don't encounter it in US testing, and then their code totally breaks in bizarre ways once usage extends to other parts of the world because these corner cases are unaccounted for.