Fishnet 2.0.1
Framework for Graph-Based Analysis of GIS Vector Data
Loading...
Searching...
No Matches
fishnet::geometry::Polygon< T > Class Template Reference

Polygon implementation A Polygon consist of a boundary (IRing) and zero or more holes (IRing) More...

#include <Polygon.hpp>

Inheritance diagram for fishnet::geometry::Polygon< T >:
Collaboration diagram for fishnet::geometry::Polygon< T >:

Public Types

using numeric_type = T
 
- Public Types inherited from fishnet::geometry::SimplePolygon< T >
using numeric_type = T
 
- Public Types inherited from fishnet::geometry::Ring< T >
using numeric_type = T
 

Public Member Functions

 Polygon (const Ring< T > &boundary, const std::vector< Ring< T > > &holes={}, bool checked=false)
 Construct a new Polygon object using boundary and holes.
 
 Polygon (const Ring< T > &boundary, const util::forward_range_of< Ring< T > > auto &holes, bool checked=false)
 
 Polygon (const SimplePolygon< T > &boundary, const std::vector< Ring< T > > &holes={}, bool checked=false)
 
 Polygon (const SimplePolygon< T > &boundary, const util::forward_range_of< Ring< T > > auto &holes, bool checked=false)
 
constexpr const Ring< T > & getBoundary () const noexcept
 
constexpr util::view_of< Ring< T > > auto getHoles () const noexcept
 
constexpr util::view_of< Segment< T > > auto getSegments ()=delete
 
constexpr util::random_access_range_of< Vec2D< T > > auto getPoints ()=delete
 
constexpr bool isSimple () const noexcept
 
constexpr const SimplePolygon< T > & toSimple () const noexcept
 
constexpr fishnet::math::DEFAULT_FLOATING_POINT area () const noexcept
 Calculate the area of the polygon Subtract accumulated area of holes from the area contained within the boundary.
 
constexpr Vec2DReal centroid () const noexcept
 Calculate weighted centroid of the polygon https://en.wikipedia.org/wiki/Centroid.
 
constexpr bool contains (IPoint auto const &point) const noexcept
 
constexpr bool contains (ISegment auto const &segment) const noexcept
 
constexpr bool isInside (IPoint auto const &point) const noexcept
 
constexpr bool isOnBoundary (IPoint auto const &point) const noexcept
 
constexpr bool isOutside (IPoint auto const &point) const noexcept
 
constexpr bool intersects (LinearGeometry auto const &linearFeature) const noexcept
 
constexpr std::unordered_set< Vec2D< double > > intersections (LinearGeometry auto const &linearFeature) const noexcept
 
constexpr bool containsInHole (IPoint auto const &point) const noexcept
 
constexpr bool containsInHole (IPolygon auto const &other) const noexcept
 
constexpr bool contains (IPolygon auto const &other) const noexcept
 
constexpr bool crosses (IPolygon auto const &other) const noexcept
 
constexpr bool touches (IPolygon auto const &other) const noexcept
 
constexpr fishnet::math::DEFAULT_FLOATING_POINT distance (IPolygon auto const &other) const noexcept
 Distance between the two polygons.
 
template<fishnet::math::Number U>
constexpr bool operator== (const Polygon< U > &other) const noexcept
 
constexpr size_t hash () const noexcept
 
constexpr std::string toString () const noexcept
 
- Public Member Functions inherited from fishnet::geometry::SimplePolygon< T >
 SimplePolygon (const Ring< T > &boundary)
 
 SimplePolygon (std::initializer_list< Vec2D< T > > &&points)
 
 SimplePolygon (util::random_access_range_of< Vec2D< T > > auto const &points)
 
 SimplePolygon (util::random_access_range_of< Segment< T > > auto const &segments)
 
constexpr util::view_of< Segment< T > > auto getSegments ()=delete
 
constexpr util::random_access_range_of< Vec2D< T > > auto getPoints ()=delete
 
constexpr const Ring< T > & getBoundary () const noexcept
 
constexpr util::view_of< Ring< T > > auto getHoles () const noexcept
 
constexpr Rectangle< T > aaBB () const noexcept
 
template<fishnet::math::Number U>
constexpr bool operator== (const SimplePolygon< U > &other) const noexcept
 
constexpr bool isSimple () const noexcept
 
constexpr bool containsInHole (IPoint auto const &point) const noexcept
 
constexpr bool containsInHole (IPolygon auto const &other) const noexcept
 
constexpr bool contains (IPolygon auto const &other) const noexcept
 
constexpr bool crosses (IPolygon auto const &other) const noexcept
 
constexpr bool touches (IPolygon auto const &other) const noexcept
 
constexpr fishnet::math::DEFAULT_FLOATING_POINT distance (IPolygon auto const &other) const noexcept
 Distance between the two polygons.
 
- Public Member Functions inherited from fishnet::geometry::Ring< T >
 Ring (util::random_access_range_of< Vec2D< T > > auto const &points, bool checked=false)
 
 Ring (util::random_access_range_of< Segment< T > > auto &&segments, bool checked=false)
 
 Ring (std::initializer_list< Vec2D< T > > &&points)
 
template<fishnet::math::Number U>
constexpr operator Ring< U > () const noexcept
 
constexpr const Ring< T > & getBoundary () const noexcept
 
constexpr auto getHoles () const noexcept
 
constexpr util::view_of< Segment< T > > auto getSegments () const noexcept
 
constexpr util::view_of< Vec2D< T > > auto getPoints () const noexcept
 
constexpr fishnet::math::DEFAULT_FLOATING_POINT area () const noexcept
 Calculate the area of the ring Uses Shoelace formula: https://en.wikipedia.org/wiki/Shoelace_formula.
 
constexpr Vec2DReal centroid () const noexcept
 Calculate centroid point of the ring https://en.wikipedia.org/wiki/Centroid.
 
constexpr Rectangle< T > aaBB () const noexcept
 Computes the axis-aligned bounding box of the ring Calculated be computing the extreme points in every direction and forming a rectangle.
 
constexpr bool contains (IPoint auto const &point) const noexcept
 
constexpr bool isInside (IPoint auto const &point) const noexcept
 
constexpr bool isOnBoundary (IPoint auto const &point) const noexcept
 
constexpr bool isOutside (IPoint auto const &point) const noexcept
 
template<LinearGeometry L>
constexpr bool intersects (const L &linearFeature) const noexcept
 test whether a linear feature intersects the ring
 
constexpr std::unordered_set< Vec2DReal > intersections (LinearGeometry auto const &linearFeature) const noexcept
 
constexpr bool contains (ISegment auto const &segment) const noexcept
 Test whether a segment is fully contained inside the boundary of the ring Collect all intersections of the segment with the boundary segments, test if all middle points in-between the intersection points on the segment are contained in the ring.
 
template<fishnet::math::Number U>
constexpr bool operator== (const Ring< U > &other) const noexcept
 
constexpr bool crosses (IRing auto const &other) const noexcept
 
constexpr bool contains (IRing auto const &other) const noexcept
 
constexpr bool touches (IRing auto const &other) const noexcept
 
constexpr fishnet::math::DEFAULT_FLOATING_POINT distance (IRing auto const &other) const noexcept
 Distance between the two rings.
 
constexpr size_t hash () const noexcept
 
constexpr std::string toString () const noexcept
 

Static Public Attributes

static constexpr GeometryType type = GeometryType::POLYGON
 
- Static Public Attributes inherited from fishnet::geometry::SimplePolygon< T >
static constexpr GeometryType type = GeometryType::POLYGON
 
- Static Public Attributes inherited from fishnet::geometry::Ring< T >
static constexpr GeometryType type = GeometryType::RING
 

Additional Inherited Members

- Protected Member Functions inherited from fishnet::geometry::Ring< T >
constexpr PointLocation getPointLocation (IPoint auto const &point) const noexcept
 Get the location of a point with regard to the ring (INSIDE | OUTSIDE | BOUNDARY) Uses the Ray-Casting algorithm: https://en.wikipedia.org/wiki/Point_in_polygon.
 

Detailed Description

template<fishnet::math::Number T>
class fishnet::geometry::Polygon< T >

Polygon implementation A Polygon consist of a boundary (IRing) and zero or more holes (IRing)

Template Parameters
Tnumeric_type used for computations

Member Typedef Documentation

◆ numeric_type

template<fishnet::math::Number T>
using fishnet::geometry::Polygon< T >::numeric_type = T

Constructor & Destructor Documentation

◆ Polygon() [1/4]

template<fishnet::math::Number T>
fishnet::geometry::Polygon< T >::Polygon ( const Ring< T > &  boundary,
const std::vector< Ring< T > > &  holes = {},
bool  checked = false 
)
inline

Construct a new Polygon object using boundary and holes.

Parameters
boundary
holes

◆ Polygon() [2/4]

template<fishnet::math::Number T>
fishnet::geometry::Polygon< T >::Polygon ( const Ring< T > &  boundary,
const util::forward_range_of< Ring< T > > auto &  holes,
bool  checked = false 
)
inline

◆ Polygon() [3/4]

template<fishnet::math::Number T>
fishnet::geometry::Polygon< T >::Polygon ( const SimplePolygon< T > &  boundary,
const std::vector< Ring< T > > &  holes = {},
bool  checked = false 
)
inline

◆ Polygon() [4/4]

template<fishnet::math::Number T>
fishnet::geometry::Polygon< T >::Polygon ( const SimplePolygon< T > &  boundary,
const util::forward_range_of< Ring< T > > auto &  holes,
bool  checked = false 
)
inline

Member Function Documentation

◆ area()

template<fishnet::math::Number T>
constexpr fishnet::math::DEFAULT_FLOATING_POINT fishnet::geometry::Polygon< T >::area ( ) const
inlineconstexprnoexcept

Calculate the area of the polygon Subtract accumulated area of holes from the area contained within the boundary.

Returns
constexpr fishnet::math::DEFAULT_FLOATING_POINT

◆ centroid()

template<fishnet::math::Number T>
constexpr Vec2DReal fishnet::geometry::Polygon< T >::centroid ( ) const
inlineconstexprnoexcept

Calculate weighted centroid of the polygon https://en.wikipedia.org/wiki/Centroid.

Note
the rings are weighted by their share of the area rather than by their absolute area, as Vec2D rounds coordinates below epsilon to zero: centroid * area would be rounded away for polygons with an area close to epsilon, e.g. slivers in degree based coordinate systems.
Returns
constexpr Vec2DReal

◆ contains() [1/3]

template<fishnet::math::Number T>
constexpr bool fishnet::geometry::Polygon< T >::contains ( IPoint auto const &  point) const
inlineconstexprnoexcept

◆ contains() [2/3]

template<fishnet::math::Number T>
constexpr bool fishnet::geometry::Polygon< T >::contains ( IPolygon< T > auto const &  other) const
inlineconstexprnoexcept

◆ contains() [3/3]

template<fishnet::math::Number T>
constexpr bool fishnet::geometry::Polygon< T >::contains ( ISegment auto const &  segment) const
inlineconstexprnoexcept

◆ containsInHole() [1/2]

template<fishnet::math::Number T>
constexpr bool fishnet::geometry::Polygon< T >::containsInHole ( IPoint auto const &  point) const
inlineconstexprnoexcept

◆ containsInHole() [2/2]

template<fishnet::math::Number T>
constexpr bool fishnet::geometry::Polygon< T >::containsInHole ( IPolygon< T > auto const &  other) const
inlineconstexprnoexcept

◆ crosses()

template<fishnet::math::Number T>
constexpr bool fishnet::geometry::Polygon< T >::crosses ( IPolygon< T > auto const &  other) const
inlineconstexprnoexcept

◆ distance()

template<fishnet::math::Number T>
constexpr fishnet::math::DEFAULT_FLOATING_POINT fishnet::geometry::Polygon< T >::distance ( IPolygon< T > auto const &  other) const
inlineconstexprnoexcept

Distance between the two polygons.

Returns
0 if the polygons overlap in any way, i.e. if one contains or touches the other, otherwise the distance between their boundaries, measured through a hole where applicable

◆ getBoundary()

template<fishnet::math::Number T>
constexpr const Ring< T > & fishnet::geometry::Polygon< T >::getBoundary ( ) const
inlineconstexprnoexcept

◆ getHoles()

template<fishnet::math::Number T>
constexpr util::view_of< Ring< T > > auto fishnet::geometry::Polygon< T >::getHoles ( ) const
inlineconstexprnoexcept

◆ getPoints()

template<fishnet::math::Number T>
constexpr util::random_access_range_of< Vec2D< T > > auto fishnet::geometry::Polygon< T >::getPoints ( )
constexprdelete

◆ getSegments()

template<fishnet::math::Number T>
constexpr util::view_of< Segment< T > > auto fishnet::geometry::Polygon< T >::getSegments ( )
constexprdelete

◆ hash()

template<fishnet::math::Number T>
constexpr size_t fishnet::geometry::Polygon< T >::hash ( ) const
inlineconstexprnoexcept

◆ intersections()

template<fishnet::math::Number T>
constexpr std::unordered_set< Vec2D< double > > fishnet::geometry::Polygon< T >::intersections ( LinearGeometry auto const &  linearFeature) const
inlineconstexprnoexcept

◆ intersects()

template<fishnet::math::Number T>
constexpr bool fishnet::geometry::Polygon< T >::intersects ( LinearGeometry auto const &  linearFeature) const
inlineconstexprnoexcept

◆ isInside()

template<fishnet::math::Number T>
constexpr bool fishnet::geometry::Polygon< T >::isInside ( IPoint auto const &  point) const
inlineconstexprnoexcept

◆ isOnBoundary()

template<fishnet::math::Number T>
constexpr bool fishnet::geometry::Polygon< T >::isOnBoundary ( IPoint auto const &  point) const
inlineconstexprnoexcept

◆ isOutside()

template<fishnet::math::Number T>
constexpr bool fishnet::geometry::Polygon< T >::isOutside ( IPoint auto const &  point) const
inlineconstexprnoexcept

◆ isSimple()

template<fishnet::math::Number T>
constexpr bool fishnet::geometry::Polygon< T >::isSimple ( ) const
inlineconstexprnoexcept

◆ operator==()

template<fishnet::math::Number T>
template<fishnet::math::Number U>
constexpr bool fishnet::geometry::Polygon< T >::operator== ( const Polygon< U > &  other) const
inlineconstexprnoexcept

◆ toSimple()

template<fishnet::math::Number T>
constexpr const SimplePolygon< T > & fishnet::geometry::Polygon< T >::toSimple ( ) const
inlineconstexprnoexcept

◆ toString()

template<fishnet::math::Number T>
constexpr std::string fishnet::geometry::Polygon< T >::toString ( ) const
inlineconstexprnoexcept

◆ touches()

template<fishnet::math::Number T>
constexpr bool fishnet::geometry::Polygon< T >::touches ( IPolygon< T > auto const &  other) const
inlineconstexprnoexcept

Member Data Documentation

◆ type

template<fishnet::math::Number T>
constexpr GeometryType fishnet::geometry::Polygon< T >::type = GeometryType::POLYGON
staticconstexpr

The documentation for this class was generated from the following file: