LSST Applications 26.0.0,g0265f82a02+6660c170cc,g07994bdeae+30b05a742e,g0a0026dc87+17526d298f,g0a60f58ba1+17526d298f,g0e4bf8285c+96dd2c2ea9,g0ecae5effc+c266a536c8,g1e7d6db67d+6f7cb1f4bb,g26482f50c6+6346c0633c,g2bbee38e9b+6660c170cc,g2cc88a2952+0a4e78cd49,g3273194fdb+f6908454ef,g337abbeb29+6660c170cc,g337c41fc51+9a8f8f0815,g37c6e7c3d5+7bbafe9d37,g44018dc512+6660c170cc,g4a941329ef+4f7594a38e,g4c90b7bd52+5145c320d2,g58be5f913a+bea990ba40,g635b316a6c+8d6b3a3e56,g67924a670a+bfead8c487,g6ae5381d9b+81bc2a20b4,g93c4d6e787+26b17396bd,g98cecbdb62+ed2cb6d659,g98ffbb4407+81bc2a20b4,g9ddcbc5298+7f7571301f,ga1e77700b3+99e9273977,gae46bcf261+6660c170cc,gb2715bf1a1+17526d298f,gc86a011abf+17526d298f,gcf0d15dbbd+96dd2c2ea9,gdaeeff99f8+0d8dbea60f,gdb4ec4c597+6660c170cc,ge23793e450+96dd2c2ea9,gf041782ebf+171108ac67
LSST Data Management Base Package
Loading...
Searching...
No Matches
Region.cc
Go to the documentation of this file.
1/*
2 * LSST Data Management System
3 * Copyright 2016 AURA/LSST.
4 *
5 * This product includes software developed by the
6 * LSST Project (http://www.lsst.org/).
7 *
8 * This program is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation, either version 3 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the LSST License Statement and
19 * the GNU General Public License along with this program. If not,
20 * see <https://www.lsstcorp.org/LegalNotices/>.
21 */
22
25
26#include <stdexcept>
27
28#include "lsst/sphgeom/Region.h"
29
30#include "lsst/sphgeom/Box.h"
31#include "lsst/sphgeom/Circle.h"
36
37namespace lsst {
38namespace sphgeom {
39
40bool Region::contains(double x, double y, double z) const {
41 return contains(UnitVector3d(x, y, z));
42}
43
44bool Region::contains(double lon, double lat) const {
45 return contains(UnitVector3d(LonLat::fromRadians(lon, lat)));
46}
47
48std::unique_ptr<Region> Region::decode(uint8_t const * buffer, size_t n) {
49 if (buffer == nullptr || n == 0) {
50 throw std::runtime_error("Byte-string is not an encoded Region");
51 }
52 uint8_t type = *buffer;
53 if (type == Box::TYPE_CODE) {
54 return Box::decode(buffer, n);
55 } else if (type == Circle::TYPE_CODE) {
56 return Circle::decode(buffer, n);
57 } else if (type == ConvexPolygon::TYPE_CODE) {
58 return ConvexPolygon::decode(buffer, n);
59 } else if (type == Ellipse::TYPE_CODE) {
60 return Ellipse::decode(buffer, n);
61 } else if (type == UnionRegion::TYPE_CODE) {
62 return UnionRegion::decode(buffer, n);
63 } else if (type == IntersectionRegion::TYPE_CODE) {
64 return IntersectionRegion::decode(buffer, n);
65 }
66 throw std::runtime_error("Byte-string is not an encoded Region");
67}
68
69}} // namespace lsst:sphgeom
This file declares a class for representing circular regions on the unit sphere.
This file declares classes for representing compound regions on the unit sphere.
This file declares a class for representing convex polygons with great circle edges on the unit spher...
table::Key< int > type
Definition Detector.cc:163
double z
Definition Match.cc:44
This file defines an interface for spherical regions.
int y
Definition SpanSet.cc:48
This file declares a class for representing unit vectors in ℝ³.
static std::unique_ptr< Box > decode(std::vector< uint8_t > const &s)
Definition Box.h:340
static constexpr uint8_t TYPE_CODE
Definition Box.h:56
static std::unique_ptr< Circle > decode(std::vector< uint8_t > const &s)
Definition Circle.h:251
static constexpr uint8_t TYPE_CODE
Definition Circle.h:48
static constexpr uint8_t TYPE_CODE
static std::unique_ptr< ConvexPolygon > decode(std::vector< uint8_t > const &s)
static constexpr uint8_t TYPE_CODE
Definition Ellipse.h:172
static std::unique_ptr< Ellipse > decode(std::vector< uint8_t > const &s)
Definition Ellipse.h:303
static std::unique_ptr< IntersectionRegion > decode(std::vector< uint8_t > const &s)
static constexpr uint8_t TYPE_CODE
static LonLat fromRadians(double lon, double lat)
Definition LonLat.h:55
static std::unique_ptr< Region > decode(std::vector< uint8_t > const &s)
Definition Region.h:137
virtual bool contains(UnitVector3d const &) const =0
contains tests whether the given unit vector is inside this region.
static std::unique_ptr< UnionRegion > decode(std::vector< uint8_t > const &s)
static constexpr uint8_t TYPE_CODE
UnitVector3d is a unit vector in ℝ³ with components stored in double precision.
This file declares a class for representing longitude/latitude angle boxes on the unit sphere.
This file declares a class for representing elliptical regions on the unit sphere.