lsst.sphgeom g31e44d4a5c+b0138be388
 
Loading...
Searching...
No Matches
lsst::sphgeom::Region Class Referenceabstract

#include <Region.h>

Inheritance diagram for lsst::sphgeom::Region:
lsst::sphgeom::Box lsst::sphgeom::Circle lsst::sphgeom::CompoundRegion lsst::sphgeom::ConvexPolygon lsst::sphgeom::Ellipse lsst::sphgeom::IntersectionRegion lsst::sphgeom::UnionRegion

Public Member Functions

virtual std::unique_ptr< Regionclone () const =0
 clone returns a deep copy of this region.
 
virtual Box getBoundingBox () const =0
 getBoundingBox returns a bounding-box for this region.
 
virtual Box3d getBoundingBox3d () const =0
 getBoundingBox3d returns a 3-dimensional bounding-box for this region.
 
virtual Circle getBoundingCircle () const =0
 getBoundingCircle returns a bounding-circle for this region.
 
virtual bool isEmpty () const =0
 isEmpty returns true when a region does not contain any points.
 
virtual bool contains (UnitVector3d const &) const =0
 contains tests whether the given unit vector is inside this region.
 
bool contains (double x, double y, double z) const
 
bool contains (double lon, double lat) const
 
virtual std::vector< std::uint8_t > encode () const =0
 
virtual Relationship relate (Region const &) const =0
 
virtual Relationship relate (Box const &) const =0
 
virtual Relationship relate (Circle const &) const =0
 
virtual Relationship relate (ConvexPolygon const &) const =0
 
virtual Relationship relate (Ellipse const &) const =0
 
virtual TriState overlaps (Region const &other) const =0
 
virtual TriState overlaps (Box const &) const =0
 
virtual TriState overlaps (Circle const &) const =0
 
virtual TriState overlaps (ConvexPolygon const &) const =0
 
virtual TriState overlaps (Ellipse const &) const =0
 

Static Public Member Functions

static std::vector< std::unique_ptr< Region > > getRegions (Region const &region)
 getRegions returns a vector of Region.
 
static std::unique_ptr< Regiondecode (std::vector< std::uint8_t > const &s)
 
static std::unique_ptr< Regiondecode (std::uint8_t const *buffer, size_t n)
 
static std::unique_ptr< RegiondecodeBase64 (std::string const &s)
 
static std::unique_ptr< RegiondecodeBase64 (std::string_view const &s)
 
static TriState decodeOverlapsBase64 (std::string const &s)
 
static TriState decodeOverlapsBase64 (std::string_view const &s)
 

Static Protected Member Functions

static TriState _relationship_to_overlaps (Relationship r)
 

Detailed Description

Region is a minimal interface for 2-dimensional regions on the unit sphere. It provides three core pieces of functionality:

  • It allows a region to be approximated with a simpler one.
  • It allows for inexact (but conservative) computation of the spatial relationships between two regions.
  • It provides transformation between objects and binary strings.

Given a pixelization of the unit sphere with pixels that can be bounded by Regions, this provides all the necessary functionality for determining which pixels may intersect a Region.

When implementing a new concrete region subclass R, the Region interface should be extended with:

virtual Relationship relate(R const &) const = 0;

All other Region subclasses must then implement this method. In addition, R is expected to contain the following implementation of the generic relate method:

virtual Relationship relate(Region const & r) const {
    return invert(r.relate(*this));
}

where invert is defined in Relationship.h.

Given two Region references r1 and r2 of type R1 and R2, the net effect is that r1.relate(r2) will end up calling R2::relate(R1 const &). In other words, the call is polymorphic in the types of both r1 and r2.

One negative consequence of this design is that one cannot implement new Region types outside of this library.

Member Function Documentation

◆ clone()

virtual std::unique_ptr< Region > lsst::sphgeom::Region::clone ( ) const
pure virtual

◆ contains() [1/3]

bool lsst::sphgeom::Region::contains ( double lon,
double lat ) const

contains tests whether the unit vector defined by the given longitude and latitude coordinates (in radians) is inside this region.

◆ contains() [2/3]

bool lsst::sphgeom::Region::contains ( double x,
double y,
double z ) const

contains tests whether the unit vector defined by the given (not necessarily normalized) coordinates is inside this region.

◆ contains() [3/3]

virtual bool lsst::sphgeom::Region::contains ( UnitVector3d const & ) const
pure virtual

contains tests whether the given unit vector is inside this region.

Implemented in lsst::sphgeom::Box, lsst::sphgeom::Circle, lsst::sphgeom::ConvexPolygon, lsst::sphgeom::Ellipse, lsst::sphgeom::IntersectionRegion, and lsst::sphgeom::UnionRegion.

◆ decode()

static std::unique_ptr< Region > lsst::sphgeom::Region::decode ( std::vector< std::uint8_t > const & s)
inlinestatic

decode deserializes a Region from a byte string produced by encode.

◆ decodeBase64()

static std::unique_ptr< Region > lsst::sphgeom::Region::decodeBase64 ( std::string const & s)
inlinestatic

decodeBase64 deserializes a Region from an ASCII string produced by encode and then base64-encoding that result.

This method also interprets ':' as a delimiter for the elements of a UnionRegion, to support cases where a union of region is constructed server-side in a database as a concatenation with that delimiter.

◆ decodeOverlapsBase64()

static TriState lsst::sphgeom::Region::decodeOverlapsBase64 ( std::string const & s)
inlinestatic

decodeOverlapsBase64 evaluates an encoded overlap expression.

A single overlap expression is formed by concatenating a pair of base64-encoded regions (Region::encode then base64 encoding) with '&' as the delimiter. Multiple such pairwise overlap expressions can then be concatenated with '|' as the delimiter to form the logical OR.

◆ encode()

virtual std::vector< std::uint8_t > lsst::sphgeom::Region::encode ( ) const
pure virtual

encode serializes this region into an opaque byte string. Byte strings emitted by encode can be deserialized with decode.

Implemented in lsst::sphgeom::Box, lsst::sphgeom::Circle, lsst::sphgeom::ConvexPolygon, lsst::sphgeom::Ellipse, lsst::sphgeom::IntersectionRegion, and lsst::sphgeom::UnionRegion.

◆ getBoundingBox()

virtual Box lsst::sphgeom::Region::getBoundingBox ( ) const
pure virtual

◆ getBoundingBox3d()

virtual Box3d lsst::sphgeom::Region::getBoundingBox3d ( ) const
pure virtual

getBoundingBox3d returns a 3-dimensional bounding-box for this region.

Implemented in lsst::sphgeom::Box, lsst::sphgeom::Circle, lsst::sphgeom::ConvexPolygon, lsst::sphgeom::Ellipse, lsst::sphgeom::IntersectionRegion, and lsst::sphgeom::UnionRegion.

◆ getBoundingCircle()

virtual Circle lsst::sphgeom::Region::getBoundingCircle ( ) const
pure virtual

◆ isEmpty()

virtual bool lsst::sphgeom::Region::isEmpty ( ) const
pure virtual

◆ overlaps()

TriState lsst::sphgeom::Region::overlaps ( Region const & other) const
pure virtual

overlaps tests whether two regions overlap. This method returns a TriState object, when the value is true it means that regions definitely overlap, false means they are definitely disjont, and unknown state means that they may or may not overlap.

Implemented in lsst::sphgeom::Box, lsst::sphgeom::Circle, lsst::sphgeom::ConvexPolygon, lsst::sphgeom::Ellipse, lsst::sphgeom::IntersectionRegion, and lsst::sphgeom::UnionRegion.

◆ relate()

virtual Relationship lsst::sphgeom::Region::relate ( Region const & ) const
pure virtual

relate computes the spatial relationships between this region A and another region B. The return value S is a bitset with the following properties:

  • Bit S & DISJOINT is set only if A and B do not have any points in common.
  • Bit S & CONTAINS is set only if A contains all points in B.
  • Bit S & WITHIN is set only if B contains all points in A.

Said another way: if the CONTAINS, WITHIN or DISJOINT bit is set, then the corresponding spatial relationship between the two regions holds conclusively. If it is not set, the relationship may or may not hold.

These semantics allow for conservative relationship computations. In particular, a Region may choose to implement relate by replacing itself and/or the argument with a simplified bounding region.

Implemented in lsst::sphgeom::Box, lsst::sphgeom::Circle, lsst::sphgeom::CompoundRegion, lsst::sphgeom::ConvexPolygon, lsst::sphgeom::Ellipse, lsst::sphgeom::IntersectionRegion, and lsst::sphgeom::UnionRegion.


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