bes Updated for version 3.21.1
The Backend Server (BES) is the lower two tiers of the Hyrax data server
|
#include <GeoConstraint.h>
Public Types | |
enum | LatitudeSense { unknown_sense , normal , inverted } |
enum | Notation { unknown_notation , pos , neg_pos } |
Public Member Functions | |
Constructors | |
Accessors/Mutators | |
char * | get_array_data () const |
int | get_array_data_size () const |
double * | get_lat () const |
double * | get_lon () const |
void | set_lat (double *lat) |
void | set_lon (double *lon) |
int | get_lat_size () const |
int | get_lon_size () const |
void | set_lat_size (int len) |
void | set_lon_size (int len) |
libdap::Array::Dim_iter | get_lon_dim () const |
libdap::Array::Dim_iter | get_lat_dim () const |
void | set_lon_dim (libdap::Array::Dim_iter lon) |
void | set_lat_dim (libdap::Array::Dim_iter lat) |
int | get_latitude_index_top () const |
int | get_latitude_index_bottom () const |
void | set_latitude_index_top (int top) |
void | set_latitude_index_bottom (int bottom) |
int | get_longitude_index_left () const |
int | get_longitude_index_right () const |
void | set_longitude_index_left (int left) |
void | set_longitude_index_right (int right) |
bool | is_bounding_box_set () const |
bool | is_longitude_rightmost () const |
void | set_longitude_rightmost (bool state) |
Notation | get_longitude_notation () const |
LatitudeSense | get_latitude_sense () const |
void | set_longitude_notation (Notation n) |
void | set_latitude_sense (LatitudeSense l) |
set< string > | get_coards_lat_units () const |
set< string > | get_coards_lon_units () const |
set< string > | get_lat_names () const |
set< string > | get_lon_names () const |
void | set_bounding_box (double top, double left, double bottom, double right) |
virtual void | apply_constraint_to_data ()=0 |
Once the bounding box is set use this method to apply the constraint. | |
Protected Member Functions | |
virtual bool | build_lat_lon_maps ()=0 |
virtual LatitudeSense | categorize_latitude () const |
Notation | categorize_notation (const double left, const double right) const |
void | find_latitude_indeces (double top, double bottom, LatitudeSense sense, int &latitude_index_top, int &latitude_index_bottom) const |
void | find_longitude_indeces (double left, double right, int &longitude_index_left, int &longitude_index_right) const |
virtual void | flip_latitude_within_array (libdap::Array &a, int lat_length, int lon_length) |
virtual bool | is_bounding_box_valid (const double left, const double top, const double right, const double bottom) const |
virtual bool | lat_lon_dimensions_ok ()=0 |
virtual void | reorder_data_longitude_axis (libdap::Array &a, libdap::Array::Dim_iter lon_dim) |
virtual void | reorder_longitude_map (int longitude_index_left) |
void | transform_constraint_to_pos_notation (double &left, double &right) const |
virtual void | transform_longitude_to_neg_pos_notation () |
virtual void | transform_longitude_to_pos_notation () |
virtual void | transpose_vector (double *src, const int length) |
Friends | |
class | GridGeoConstraintTest |
Encapsulate the logic needed to handle geographical constraints when they are applied to DAP Grid (and some Array) variables.
This class will apply a longitude/latitude bounding box to a Grid that is a 'geo-referenced' Grid. That is, it follows the COARDS/CF conventions. This may be relaxed...
If the longitude range of the constraint crosses the boundary of the data array so that the constraint creates two separate rectangles, this class will arrange to return the result as a single Grid. It will do this by rearranging the data before control is passed onto the constraint evaluator and serialization logic. Here's a diagram of how it works:
Suppose a constraint for the longitude BB starts at the left edge of L and goes to the right edge of R:
0.0 180.0 360.0 (longitude, in degrees) +----------------------+ |xxxxxyyyyyyyyyyyyzzzzz| -----+ +----- | | | | | R | | L | | | | | -----+ +----- | | +----------------------+
For example, suppose the client provides a bounding box that starts at 200 degrees and ends at 80. This class will first copy the Left part to new storage and then copy the right part, thus 'stitching together' the two halves of the constraint. The result looks like:
80.0 360.0/0.0 180.0 ~200.0 (longitude, in degrees) +----------------------+ |zzzzzxxxxxxyyyyyyyyyyy| -----++----- | | || | | | L || R | | | || | | -----++----- | | | +----------------------+
The changes are made in the Grid variable itself, so once this is done the Grid should not be re-read by the CE or serialization code.
Definition at line 97 of file GeoConstraint.h.
Most of the time, latitude starts at the top of an array with positive values and ends up at the bottom with negative ones. But sometimes... the world is upside down.
Definition at line 112 of file GeoConstraint.h.
The longitude extents of the constraint bounding box can be expressed two ways: using a 0/359 notation and using a -180/179 notation. I call the 0/359 notation 'pos' and the -180/179 notation 'neg_pos'.
Definition at line 103 of file GeoConstraint.h.
|
inlinevirtual |
Definition at line 205 of file GeoConstraint.h.
|
pure virtual |
Once the bounding box is set use this method to apply the constraint.
Implemented in functions::GridGeoConstraint.
|
protectedpure virtual |
A protected method that searches for latitude and longitude map vectors and sets six key internal fields. This method returns false if either map cannot be found.
The d_lon, d_lon_length and d_lon_dim (and matching lat) fields must be set by this method.
|
inline |
Definition at line 215 of file GeoConstraint.h.
|
inline |
Definition at line 219 of file GeoConstraint.h.
Definition at line 340 of file GeoConstraint.h.
Definition at line 344 of file GeoConstraint.h.
|
inline |
Definition at line 224 of file GeoConstraint.h.
|
inline |
Definition at line 262 of file GeoConstraint.h.
Definition at line 349 of file GeoConstraint.h.
|
inline |
Definition at line 241 of file GeoConstraint.h.
|
inline |
Definition at line 280 of file GeoConstraint.h.
|
inline |
Definition at line 276 of file GeoConstraint.h.
|
inline |
Definition at line 327 of file GeoConstraint.h.
|
inline |
Definition at line 228 of file GeoConstraint.h.
|
inline |
Definition at line 258 of file GeoConstraint.h.
Definition at line 353 of file GeoConstraint.h.
|
inline |
Definition at line 245 of file GeoConstraint.h.
|
inline |
Definition at line 293 of file GeoConstraint.h.
|
inline |
Definition at line 297 of file GeoConstraint.h.
|
inline |
Definition at line 323 of file GeoConstraint.h.
|
inline |
Definition at line 310 of file GeoConstraint.h.
|
inline |
Definition at line 314 of file GeoConstraint.h.
|
protectedpure virtual |
Are the latitude and longitude dimensions ordered so that this class can properly constrain the data? This method throws Error if lat and lon are not to two 'fastest-varying' (or 'rightmost) dimensions. It sets the internal property longitude_rightmost if that's true.
|
inline |
Definition at line 232 of file GeoConstraint.h.
|
inline |
Definition at line 270 of file GeoConstraint.h.
|
inline |
Definition at line 249 of file GeoConstraint.h.
|
inline |
Definition at line 288 of file GeoConstraint.h.
|
inline |
Definition at line 284 of file GeoConstraint.h.
|
inline |
Definition at line 335 of file GeoConstraint.h.
|
inline |
Definition at line 236 of file GeoConstraint.h.
|
inline |
Definition at line 266 of file GeoConstraint.h.
|
inline |
Definition at line 253 of file GeoConstraint.h.
|
inline |
Definition at line 301 of file GeoConstraint.h.
|
inline |
Definition at line 305 of file GeoConstraint.h.
|
inline |
Definition at line 331 of file GeoConstraint.h.
|
inline |
Definition at line 318 of file GeoConstraint.h.
|
friend |
Definition at line 197 of file GeoConstraint.h.