LSST Applications g063fba187b+cac8b7c890,g0f08755f38+6aee506743,g1653933729+a8ce1bb630,g168dd56ebc+a8ce1bb630,g1a2382251a+b4475c5878,g1dcb35cd9c+8f9bc1652e,g20f6ffc8e0+6aee506743,g217e2c1bcf+73dee94bd0,g28da252d5a+1f19c529b9,g2bbee38e9b+3f2625acfc,g2bc492864f+3f2625acfc,g3156d2b45e+6e55a43351,g32e5bea42b+1bb94961c2,g347aa1857d+3f2625acfc,g35bb328faa+a8ce1bb630,g3a166c0a6a+3f2625acfc,g3e281a1b8c+c5dd892a6c,g3e8969e208+a8ce1bb630,g414038480c+5927e1bc1e,g41af890bb2+8a9e676b2a,g7af13505b9+809c143d88,g80478fca09+6ef8b1810f,g82479be7b0+f568feb641,g858d7b2824+6aee506743,g89c8672015+f4add4ffd5,g9125e01d80+a8ce1bb630,ga5288a1d22+2903d499ea,gb58c049af0+d64f4d3760,gc28159a63d+3f2625acfc,gcab2d0539d+b12535109e,gcf0d15dbbd+46a3f46ba9,gda6a2b7d83+46a3f46ba9,gdaeeff99f8+1711a396fd,ge79ae78c31+3f2625acfc,gef2f8181fd+0a71e47438,gf0baf85859+c1f95f4921,gfa517265be+6aee506743,gfa999e8aa5+17cd334064,w.2024.51
LSST Data Management Base Package
|
Region
is a minimal interface for 2-dimensional regions on the unit sphere.
More...
#include <Region.h>
Public Member Functions | |
virtual | ~Region ()=default |
virtual std::unique_ptr< Region > | clone () 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 |
contains tests whether the unit vector defined by the given (not necessarily normalized) coordinates is inside this region. | |
bool | 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. | |
virtual std::vector< std::uint8_t > | encode () const =0 |
encode serializes this region into an opaque byte string. | |
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 ®ion) |
getRegions returns a vector of Region. | |
static std::unique_ptr< Region > | decode (std::vector< std::uint8_t > const &s) |
static std::unique_ptr< Region > | decode (std::uint8_t const *buffer, size_t n) |
static std::unique_ptr< Region > | decodeBase64 (std::string const &s) |
static std::unique_ptr< Region > | decodeBase64 (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) |
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.
|
virtualdefault |
|
inlinestaticprotected |
Definition at line 206 of file Region.h.
|
pure virtual |
clone
returns a deep copy of this region.
Implemented in lsst::sphgeom::Box, lsst::sphgeom::Circle, lsst::sphgeom::UnionRegion, lsst::sphgeom::IntersectionRegion, lsst::sphgeom::ConvexPolygon, and lsst::sphgeom::Ellipse.
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.
Definition at line 54 of file Region.cc.
bool lsst::sphgeom::Region::contains | ( | double | x, |
double | y, | ||
double | z ) const |
|
pure virtual |
contains
tests whether the given unit vector is inside this region.
Implemented in lsst::sphgeom::Box, lsst::sphgeom::Circle, lsst::sphgeom::UnionRegion, lsst::sphgeom::IntersectionRegion, lsst::sphgeom::ConvexPolygon, lsst::sphgeom::Ellipse, lsst::sphgeom::Box, lsst::sphgeom::Circle, lsst::sphgeom::UnionRegion, lsst::sphgeom::IntersectionRegion, lsst::sphgeom::ConvexPolygon, and lsst::sphgeom::Ellipse.
|
static |
decode
deserializes a Region from a byte string produced by encode.
Definition at line 72 of file Region.cc.
|
inlinestatic |
decode
deserializes a Region from a byte string produced by encode.
Definition at line 162 of file Region.h.
|
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.
Definition at line 176 of file Region.h.
|
static |
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.
Definition at line 93 of file Region.cc.
|
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.
|
static |
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.
Definition at line 117 of file Region.cc.
|
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::UnionRegion, lsst::sphgeom::IntersectionRegion, lsst::sphgeom::ConvexPolygon, and lsst::sphgeom::Ellipse.
|
pure virtual |
getBoundingBox
returns a bounding-box for this region.
Implemented in lsst::sphgeom::Box, lsst::sphgeom::Circle, lsst::sphgeom::UnionRegion, lsst::sphgeom::IntersectionRegion, lsst::sphgeom::ConvexPolygon, and lsst::sphgeom::Ellipse.
|
pure virtual |
getBoundingBox3d
returns a 3-dimensional bounding-box for this region.
Implemented in lsst::sphgeom::Box, lsst::sphgeom::Circle, lsst::sphgeom::UnionRegion, lsst::sphgeom::IntersectionRegion, lsst::sphgeom::ConvexPolygon, and lsst::sphgeom::Ellipse.
|
pure virtual |
getBoundingCircle
returns a bounding-circle for this region.
Implemented in lsst::sphgeom::Box, lsst::sphgeom::Circle, lsst::sphgeom::UnionRegion, lsst::sphgeom::IntersectionRegion, lsst::sphgeom::ConvexPolygon, and lsst::sphgeom::Ellipse.
|
static |
getRegions
returns a vector of Region.
Definition at line 145 of file Region.cc.
|
pure virtual |
isEmpty
returns true when a region does not contain any points.
Implemented in lsst::sphgeom::Box, lsst::sphgeom::Circle, lsst::sphgeom::UnionRegion, lsst::sphgeom::IntersectionRegion, lsst::sphgeom::ConvexPolygon, and lsst::sphgeom::Ellipse.
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::UnionRegion, lsst::sphgeom::IntersectionRegion, lsst::sphgeom::ConvexPolygon, and lsst::sphgeom::Ellipse.
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::UnionRegion, lsst::sphgeom::IntersectionRegion, lsst::sphgeom::ConvexPolygon, and lsst::sphgeom::Ellipse.
|
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::UnionRegion, lsst::sphgeom::IntersectionRegion, lsst::sphgeom::ConvexPolygon, and lsst::sphgeom::Ellipse.
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::UnionRegion, lsst::sphgeom::IntersectionRegion, lsst::sphgeom::ConvexPolygon, and lsst::sphgeom::Ellipse.
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::UnionRegion, lsst::sphgeom::IntersectionRegion, lsst::sphgeom::ConvexPolygon, and lsst::sphgeom::Ellipse.
Definition at line 59 of file Region.cc.
|
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:
S & DISJOINT
is set only if A and B do not have any points in common.S & CONTAINS
is set only if A contains all points in B.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::Circle, lsst::sphgeom::ConvexPolygon, lsst::sphgeom::Ellipse, lsst::sphgeom::Box, and lsst::sphgeom::CompoundRegion.
|
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:
S & DISJOINT
is set only if A and B do not have any points in common.S & CONTAINS
is set only if A contains all points in B.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::ConvexPolygon, lsst::sphgeom::Ellipse, and lsst::sphgeom::CompoundRegion.
|
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:
S & DISJOINT
is set only if A and B do not have any points in common.S & CONTAINS
is set only if A contains all points in B.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::ConvexPolygon, lsst::sphgeom::Ellipse, and lsst::sphgeom::CompoundRegion.
|
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:
S & DISJOINT
is set only if A and B do not have any points in common.S & CONTAINS
is set only if A contains all points in B.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::ConvexPolygon, lsst::sphgeom::Ellipse, and lsst::sphgeom::CompoundRegion.
|
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:
S & DISJOINT
is set only if A and B do not have any points in common.S & CONTAINS
is set only if A contains all points in B.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::CompoundRegion, lsst::sphgeom::Box, lsst::sphgeom::Circle, lsst::sphgeom::UnionRegion, lsst::sphgeom::IntersectionRegion, lsst::sphgeom::ConvexPolygon, and lsst::sphgeom::Ellipse.