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
|
Box
represents a rectangle in spherical coordinate space that contains its boundary.
More...
#include <Box.h>
Public Member Functions | |
Box () | |
This constructor creates an empty box. | |
Box (LonLat const &p) | |
This constructor creates a box containing a single point. | |
Box (LonLat const &p1, LonLat const &p2) | |
This constructor creates a box spanning the longitude interval [p1.getLon(), p2.getLon()] and latitude interval [p1.getLat(), p2.getLat()]. | |
Box (LonLat const &p, Angle w, Angle h) | |
This constructor creates a box with center p, half-width (in longitude angle) w and half-height (in latitude angle) h. | |
Box (NormalizedAngleInterval const &lon, AngleInterval const &lat) | |
This constructor creates a box spanning the given longitude and latitude intervals. | |
bool | operator== (Box const &b) const |
Two boxes are equal if they contain the same points. | |
bool | operator!= (Box const &b) const |
bool | operator== (LonLat const &p) const |
A box is equal to a point p if it contains only p. | |
bool | operator!= (LonLat const &p) const |
NormalizedAngleInterval const & | getLon () const |
getLon returns the longitude interval of this box. | |
AngleInterval const & | getLat () const |
getLat returns the latitude interval of this box. | |
bool | isEmpty () const override |
isEmpty returns true if this box does not contain any points. | |
bool | isFull () const |
isFull returns true if this box contains all points on the unit sphere. | |
LonLat | getCenter () const |
getCenter returns the center of this box. | |
NormalizedAngle | getWidth () const |
getWidth returns the width in longitude angle of this box. | |
Angle | getHeight () const |
getHeight returns the height in latitude angle of this box. | |
Box & | clipTo (LonLat const &x) |
clipTo shrinks this box until it contains only x. | |
Box & | clipTo (Box const &x) |
x.clipTo(y) sets x to the smallest box containing the intersection of x and y. | |
Box | clippedTo (LonLat const &x) const |
clippedTo returns the intersection of this box and x. | |
Box | clippedTo (Box const &x) const |
clippedTo returns the smallest box containing the intersection of this box and x. | |
Box & | dilateBy (Angle r) |
dilateBy minimally expands this Box to include all points within angular separation r of its boundary. | |
Box | dilatedBy (Angle r) const |
Box & | dilateBy (Angle w, Angle h) |
dilateBy morphologically dilates or erodes the longitude interval of this box by w, and the latitude interval of this box by h. | |
Box | dilatedBy (Angle w, Angle h) const |
Box & | erodeBy (Angle r) |
Box & | erodeBy (Angle w, Angle h) |
Box | erodedBy (Angle r) const |
Box | erodedBy (Angle w, Angle h) const |
Relationship | relate (LonLat const &p) const |
double | getArea () const |
getArea returns the area of this box in steradians. | |
std::unique_ptr< Region > | clone () const override |
clone returns a deep copy of this region. | |
Box | getBoundingBox () const override |
getBoundingBox returns a bounding-box for this region. | |
Box3d | getBoundingBox3d () const override |
getBoundingBox3d returns a 3-dimensional bounding-box for this region. | |
Circle | getBoundingCircle () const override |
getBoundingCircle returns a bounding-circle for this region. | |
bool | contains (UnitVector3d const &v) const override |
contains tests whether the given unit vector is inside this region. | |
Relationship | relate (Region const &r) const override |
Relationship | relate (Box const &b) const override |
Relationship | relate (Circle const &) const override |
Relationship | relate (ConvexPolygon const &) const override |
Relationship | relate (Ellipse const &) const override |
TriState | overlaps (Region const &other) const override |
TriState | overlaps (Box const &) const override |
TriState | overlaps (Circle const &) const override |
TriState | overlaps (ConvexPolygon const &) const override |
TriState | overlaps (Ellipse const &) const override |
std::vector< std::uint8_t > | encode () const override |
encode serializes this region into an opaque byte string. | |
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. | |
bool | contains (LonLat const &x) const |
bool | contains (Box const &x) const |
bool | isDisjointFrom (LonLat const &x) const |
bool | isDisjointFrom (Box const &x) const |
bool | intersects (LonLat const &x) const |
bool | intersects (Box const &x) const |
bool | isWithin (LonLat const &x) const |
bool | isWithin (Box const &x) const |
Box & | expandTo (LonLat const &x) |
Box & | expandTo (Box const &x) |
Box | expandedTo (LonLat const &x) const |
Box | expandedTo (Box const &x) const |
Static Public Member Functions | |
static Box | fromDegrees (double lon1, double lat1, double lon2, double lat2) |
static Box | fromRadians (double lon1, double lat1, double lon2, double lat2) |
static Box | empty () |
static Box | full () |
static NormalizedAngle | halfWidthForCircle (Angle r, Angle lat) |
halfWidthForCircle computes the half-width of bounding boxes for circles with radius r and centers at the given latitude. | |
static NormalizedAngleInterval | allLongitudes () |
allLongitudes returns a normalized angle interval containing all valid longitude angles. | |
static AngleInterval | allLatitudes () |
allLatitudes returns an angle interval containing all valid latitude angles. | |
static std::vector< std::unique_ptr< Region > > | getRegions (Region const ®ion) |
getRegions returns a vector of Region. | |
static std::unique_ptr< Box > | decode (std::vector< std::uint8_t > const &s) |
static std::unique_ptr< Box > | 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 Public Attributes | |
static constexpr std::uint8_t | TYPE_CODE = 'b' |
Static Protected Member Functions | |
static TriState | _relationship_to_overlaps (Relationship r) |
Box
represents a rectangle in spherical coordinate space that contains its boundary.
A box can be empty or full (equal to the entire unit sphere), and may contain just a single point. Besides the usual rectangular regions, a box can also represent polar caps or annuli (i.e. when the box spans all longitudes).
For any instance b of this class, the following properties hold:
|
inline |
|
inlineexplicit |
This constructor creates a box with center p, half-width (in longitude angle) w and half-height (in latitude angle) h.
Definition at line 122 of file Box.h.
|
inline |
|
inlinestaticprotectedinherited |
Definition at line 206 of file Region.h.
|
inlinestatic |
|
inlinestatic |
allLongitudes
returns a normalized angle interval containing all valid longitude angles.
x.clipTo(y)
sets x to the smallest box containing the intersection of x and y.
The result is not always unique, and x.clipTo(y)
is not guaranteed to equal y.clipTo(x)
.
Definition at line 235 of file Box.h.
|
inlineoverridevirtual |
clone
returns a deep copy of this region.
Implements lsst::sphgeom::Region.
|
inline |
contains
returns true if the intersection of this box and x is equal to x.
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.
bool lsst::sphgeom::Region::contains | ( | double | x, |
double | y, | ||
double | z ) const |
|
inline |
|
virtual |
contains
tests whether the given unit vector is inside this region.
Implements lsst::sphgeom::Region.
|
inlineoverridevirtual |
contains
tests whether the given unit vector is inside this region.
Implements lsst::sphgeom::Region.
|
static |
decode
deserializes a Box from a byte string produced by encode.
Definition at line 486 of file Box.cc.
|
inlinestatic |
|
inlinestaticinherited |
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.
|
staticinherited |
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.
|
inlinestaticinherited |
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.
|
staticinherited |
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.
dilateBy
minimally expands this Box to include all points within angular separation r of its boundary.
If this box is empty or full, or if r is non-positive, there is no effect.
Definition at line 85 of file Box.cc.
dilateBy
morphologically dilates or erodes the longitude interval of this box by w, and the latitude interval of this box by h.
If w is positive, the longitude interval is dilated by [-w,w]. If w is zero, the corresponding interval is not modified, and if it is negative, the longitude interval is eroded by [w,-w]. The action of h on the latitude interval is analogous.
If this box is empty or full, there is no effect. Furthermore, a box containing the north or south pole is not considered to have a latitude boundary there, so that eroding it will not necessarily remove the pole.
If the desired outcome is the bounding box of points within some angular separation r of this box, then dilateBy(r)
must be called, not dilateBy(r, r)
.
Definition at line 108 of file Box.cc.
|
inlinestatic |
|
overridevirtual |
encode
serializes this region into an opaque byte string.
Byte strings emitted by encode can be deserialized with decode.
Implements lsst::sphgeom::Region.
Definition at line 474 of file Box.cc.
expandTo
minimally expands this box to contain x. The result is not always unique, and x.expandTo(y)
is not guaranteed to equal y.expandTo(x)
.
Definition at line 260 of file Box.h.
|
inlinestatic |
Definition at line 67 of file Box.h.
|
inlinestatic |
|
inlinestatic |
double lsst::sphgeom::Box::getArea | ( | ) | const |
getArea
returns the area of this box in steradians.
Definition at line 122 of file Box.cc.
|
inlineoverridevirtual |
getBoundingBox
returns a bounding-box for this region.
Implements lsst::sphgeom::Region.
Definition at line 315 of file Box.h.
|
overridevirtual |
getBoundingBox3d
returns a 3-dimensional bounding-box for this region.
Implements lsst::sphgeom::Region.
Definition at line 134 of file Box.cc.
|
overridevirtual |
getBoundingCircle
returns a bounding-circle for this region.
Implements lsst::sphgeom::Region.
Definition at line 194 of file Box.cc.
|
inline |
|
inline |
getHeight
returns the height in latitude angle of this box.
It is negative or NaN for empty boxes.
Definition at line 177 of file Box.h.
|
inline |
|
inline |
|
staticinherited |
getRegions
returns a vector of Region.
Definition at line 145 of file Region.cc.
|
inline |
|
static |
halfWidthForCircle
computes the half-width of bounding boxes for circles with radius r
and centers at the given latitude.
If r is non-positive, the result is zero, and if |lat| + r >= PI/2, the result is PI.
Definition at line 50 of file Box.cc.
|
inline |
intersects
returns true if the intersection of this box and x is non-empty.
|
inline |
intersects
returns true if the intersection of this box and x is non-empty.
|
inline |
|
inline |
|
inlineoverridevirtual |
isEmpty
returns true if this box does not contain any points.
Implements lsst::sphgeom::Region.
Definition at line 159 of file Box.h.
|
inline |
|
inline |
isWithin
returns true if the intersection of this box and x is this box.
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
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.
Implements lsst::sphgeom::Region.
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.
Implements lsst::sphgeom::Region.
Definition at line 459 of file Box.cc.
|
overridevirtual |
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.
Implements lsst::sphgeom::Region.
Definition at line 464 of file Box.cc.
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.
Implements lsst::sphgeom::Region.
Definition at line 469 of file Box.cc.
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.
Implements lsst::sphgeom::Region.
Definition at line 344 of file Box.h.
|
inlineoverridevirtual |
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.
Implements lsst::sphgeom::Region.
Definition at line 330 of file Box.h.
|
overridevirtual |
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.
Implements lsst::sphgeom::Region.
Definition at line 325 of file Box.cc.
|
overridevirtual |
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.
Implements lsst::sphgeom::Region.
Definition at line 444 of file Box.cc.
|
overridevirtual |
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.
Implements lsst::sphgeom::Region.
Definition at line 449 of file Box.cc.
|
inline |
|
inlineoverridevirtual |
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.
Implements lsst::sphgeom::Region.
|
staticconstexpr |