mirror of
https://git.osgeo.org/gitea/postgis/postgis
synced 2024-10-24 00:52:40 +00:00
5508a4f89c
Closes https://github.com/postgis/postgis/pull/356 Closes #4311 git-svn-id: http://svn.osgeo.org/postgis/trunk@17231 b70326c6-7e19-0410-871a-916f4a2858ee
34 lines
843 B
C++
34 lines
843 B
C++
#pragma once
|
|
|
|
#include <mapbox/geometry/box.hpp>
|
|
#include <mapbox/geometry/for_each_point.hpp>
|
|
|
|
#include <limits>
|
|
|
|
namespace mapbox {
|
|
namespace geometry {
|
|
|
|
template <typename G, typename T = typename G::coordinate_type>
|
|
box<T> envelope(G const& geometry)
|
|
{
|
|
using limits = std::numeric_limits<T>;
|
|
|
|
T min_t = limits::has_infinity ? -limits::infinity() : limits::min();
|
|
T max_t = limits::has_infinity ? limits::infinity() : limits::max();
|
|
|
|
point<T> min(max_t, max_t);
|
|
point<T> max(min_t, min_t);
|
|
|
|
for_each_point(geometry, [&](point<T> const& point) {
|
|
if (min.x > point.x) min.x = point.x;
|
|
if (min.y > point.y) min.y = point.y;
|
|
if (max.x < point.x) max.x = point.x;
|
|
if (max.y < point.y) max.y = point.y;
|
|
});
|
|
|
|
return box<T>(min, max);
|
|
}
|
|
|
|
} // namespace geometry
|
|
} // namespace mapbox
|