LSSTApplications  20.0.0
LSSTDataManagementBasePackage
Public Member Functions | List of all members
lsst::sphgeom::Region Class Referenceabstract

Region is a minimal interface for 2-dimensional regions on the unit sphere. More...

#include <Region.h>

Inheritance diagram for lsst::sphgeom::Region:
lsst::sphgeom::Box lsst::sphgeom::Circle lsst::sphgeom::ConvexPolygon lsst::sphgeom::Ellipse

Public Member Functions

virtual ~Region ()
 
virtual std::unique_ptr< Regionclone () const =0
 clone returns a deep copy of this region. More...
 
virtual Box getBoundingBox () const =0
 getBoundingBox returns a bounding-box for this region. More...
 
virtual Box3d getBoundingBox3d () const =0
 getBoundingBox3d returns a 3-dimensional bounding-box for this region. More...
 
virtual Circle getBoundingCircle () const =0
 getBoundingCircle returns a bounding-circle for this region. More...
 
virtual bool contains (UnitVector3d const &) const =0
 contains tests whether the given unit vector is inside this region. More...
 
virtual std::vector< uint8_t > encode () const =0
 encode serializes this region into an opaque byte string. More...
 
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
 

Static Public Member Functions

static std::unique_ptr< Regiondecode (std::vector< uint8_t > const &s)
 
static std::unique_ptr< Regiondecode (uint8_t const *buffer, size_t n)
 

Detailed Description

Region is a minimal interface for 2-dimensional regions on the unit sphere.

It provides three core pieces of functionality:

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.

Definition at line 79 of file Region.h.

Constructor & Destructor Documentation

◆ ~Region()

virtual lsst::sphgeom::Region::~Region ( )
inlinevirtual

Definition at line 81 of file Region.h.

81 {}

Member Function Documentation

◆ clone()

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

clone returns a deep copy of this region.

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

◆ contains()

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::Ellipse, lsst::sphgeom::Circle, and lsst::sphgeom::ConvexPolygon.

◆ decode() [1/2]

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

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

Definition at line 129 of file Region.h.

129  {
130  return decode(s.data(), s.size());
131  }

◆ decode() [2/2]

std::unique_ptr< Region > lsst::sphgeom::Region::decode ( uint8_t const *  buffer,
size_t  n 
)
static

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

Definition at line 39 of file Region.cc.

39  {
40  if (buffer == nullptr || n == 0) {
41  throw std::runtime_error("Byte-string is not an encoded Region");
42  }
43  uint8_t type = *buffer;
44  if (type == Box::TYPE_CODE) {
45  return Box::decode(buffer, n);
46  } else if (type == Circle::TYPE_CODE) {
47  return Circle::decode(buffer, n);
48  } else if (type == ConvexPolygon::TYPE_CODE) {
49  return ConvexPolygon::decode(buffer, n);
50  } else if (type == Ellipse::TYPE_CODE) {
51  return Ellipse::decode(buffer, n);
52  }
53  throw std::runtime_error("Byte-string is not an encoded Region");
54 }

◆ encode()

virtual std::vector<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::Ellipse, lsst::sphgeom::Circle, and lsst::sphgeom::ConvexPolygon.

◆ getBoundingBox()

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

getBoundingBox returns a bounding-box for this region.

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

◆ 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::Ellipse, lsst::sphgeom::Circle, and lsst::sphgeom::ConvexPolygon.

◆ getBoundingCircle()

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

getBoundingCircle returns a bounding-circle for this region.

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

◆ relate() [1/5]

virtual Relationship lsst::sphgeom::Region::relate ( Box 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::Ellipse, lsst::sphgeom::Circle, and lsst::sphgeom::ConvexPolygon.

◆ relate() [2/5]

virtual Relationship lsst::sphgeom::Region::relate ( Circle 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::Ellipse, lsst::sphgeom::Circle, and lsst::sphgeom::ConvexPolygon.

◆ relate() [3/5]

virtual Relationship lsst::sphgeom::Region::relate ( ConvexPolygon 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::Ellipse, lsst::sphgeom::Circle, and lsst::sphgeom::ConvexPolygon.

◆ relate() [4/5]

virtual Relationship lsst::sphgeom::Region::relate ( Ellipse 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::Ellipse, lsst::sphgeom::Circle, and lsst::sphgeom::ConvexPolygon.

◆ relate() [5/5]

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::Ellipse, lsst::sphgeom::Circle, and lsst::sphgeom::ConvexPolygon.


The documentation for this class was generated from the following files:
lsst::sphgeom::Region::decode
static std::unique_ptr< Region > decode(std::vector< uint8_t > const &s)
Definition: Region.h:129
lsst::sphgeom::Ellipse::TYPE_CODE
static constexpr uint8_t TYPE_CODE
Definition: Ellipse.h:171
lsst::sphgeom::Circle::TYPE_CODE
static constexpr uint8_t TYPE_CODE
Definition: Circle.h:48
std::vector::size
T size(T... args)
lsst::sphgeom::Ellipse::decode
static std::unique_ptr< Ellipse > decode(std::vector< uint8_t > const &s)
Definition: Ellipse.h:300
std::runtime_error
STL class.
lsst::sphgeom::Circle::decode
static std::unique_ptr< Circle > decode(std::vector< uint8_t > const &s)
Definition: Circle.h:249
type
table::Key< int > type
Definition: Detector.cc:163
lsst::sphgeom::Box::TYPE_CODE
static constexpr uint8_t TYPE_CODE
Definition: Box.h:56
lsst::sphgeom::ConvexPolygon::decode
static std::unique_ptr< ConvexPolygon > decode(std::vector< uint8_t > const &s)
Definition: ConvexPolygon.h:155
lsst::sphgeom::ConvexPolygon::TYPE_CODE
static constexpr uint8_t TYPE_CODE
Definition: ConvexPolygon.h:59
std::vector::data
T data(T... args)
lsst::sphgeom::Box::decode
static std::unique_ptr< Box > decode(std::vector< uint8_t > const &s)
Definition: Box.h:338