in src/h3lib/include/polygonAlgos.h [151:196]
void GENERIC_LOOP_ALGO(bboxFrom)(const TYPE *loop, BBox *bbox) {
// Early exit if there are no vertices
if (IS_EMPTY(loop)) {
*bbox = (BBox){0};
return;
}
bbox->south = DBL_MAX;
bbox->west = DBL_MAX;
bbox->north = -DBL_MAX;
bbox->east = -DBL_MAX;
double minPosLng = DBL_MAX;
double maxNegLng = -DBL_MAX;
bool isTransmeridian = false;
double lat;
double lng;
LatLng coord;
LatLng next;
INIT_ITERATION;
while (true) {
ITERATE(loop, coord, next);
lat = coord.lat;
lng = coord.lng;
if (lat < bbox->south) bbox->south = lat;
if (lng < bbox->west) bbox->west = lng;
if (lat > bbox->north) bbox->north = lat;
if (lng > bbox->east) bbox->east = lng;
// Save the min positive and max negative longitude for
// use in the transmeridian case
if (lng > 0 && lng < minPosLng) minPosLng = lng;
if (lng < 0 && lng > maxNegLng) maxNegLng = lng;
// check for arcs > 180 degrees longitude, flagging as transmeridian
if (fabs(lng - next.lng) > M_PI) {
isTransmeridian = true;
}
}
// Swap east and west if transmeridian
if (isTransmeridian) {
bbox->east = maxNegLng;
bbox->west = minPosLng;
}
}