libdap++ Updated for version 3.8.2
|
#include <ArrayGeoConstraint.h>
Classes | |
struct | Extent |
struct | Projection |
Public Types | |
enum | LatitudeSense { unknown_sense, normal, inverted } |
enum | Notation { unknown_notation, pos, neg_pos } |
Public Member Functions | |
virtual void | apply_constraint_to_data () |
virtual Array * | get_constrained_array () const |
void | set_bounding_box (double top, double left, double bottom, double right) |
virtual | ~ArrayGeoConstraint () |
Constructors | |
ArrayGeoConstraint (Array *) | |
ArrayGeoConstraint (Array *array, double left, double top, double right, double bottom) | |
ArrayGeoConstraint (Array *array, double left, double top, double right, double bottom, const string &projection, const string &datum) | |
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_length () const |
int | get_lon_length () const |
void | set_lat_length (int len) |
void | set_lon_length (int len) |
Array::Dim_iter | get_lon_dim () const |
Array::Dim_iter | get_lat_dim () const |
void | set_lon_dim (Array::Dim_iter lon) |
void | set_lat_dim (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 |
Protected Member Functions | |
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 (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 void | reorder_data_longitude_axis (Array &a, 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 | ArrayGeoConstraintTest |
class | GridGeoConstraintTest |
Geographical constraint applied to an Array.
Definition at line 55 of file ArrayGeoConstraint.h.
enum libdap::GeoConstraint::LatitudeSense [inherited] |
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 118 of file GeoConstraint.h.
enum libdap::GeoConstraint::Notation [inherited] |
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 109 of file GeoConstraint.h.
libdap::ArrayGeoConstraint::ArrayGeoConstraint | ( | Array * | ) | [inline] |
Definition at line 110 of file ArrayGeoConstraint.h.
libdap::ArrayGeoConstraint::ArrayGeoConstraint | ( | Array * | array, |
double | left, | ||
double | top, | ||
double | right, | ||
double | bottom | ||
) |
Definition at line 65 of file ArrayGeoConstraint.cc.
libdap::ArrayGeoConstraint::ArrayGeoConstraint | ( | Array * | array, |
double | left, | ||
double | top, | ||
double | right, | ||
double | bottom, | ||
const string & | projection, | ||
const string & | datum | ||
) |
Definition at line 74 of file ArrayGeoConstraint.cc.
virtual libdap::ArrayGeoConstraint::~ArrayGeoConstraint | ( | ) | [inline, virtual] |
Definition at line 127 of file ArrayGeoConstraint.h.
void libdap::ArrayGeoConstraint::apply_constraint_to_data | ( | ) | [virtual] |
Once the bounding box is set, apply the constraint. If the data can be sent using Vector::serialize(), do so. If they cannot, read and organize the data so that Vector::serialize() will be able to send the data when asked to.
How can it be that Vector::serialize() would not be able to read the data? If the longitude extent of the bounding box for the constraint wraps around the edge of the data/array, then two reads are required to get the data. This method performs those reads (using the constraints and the read() method so that the data server's type-specific and optimized code will be used to read actual data values) and then loads the combined result back into the object, marking it as having been read. Vector::serialize() will then see the object is loaded with data values, skip the regular read call and send all the data in the buffer.
Implements libdap::GeoConstraint.
Definition at line 150 of file ArrayGeoConstraint.cc.
References libdap::Array::add_constraint(), libdap::GeoConstraint::get_array_data(), libdap::GeoConstraint::get_array_data_size(), libdap::GeoConstraint::get_lat_dim(), libdap::GeoConstraint::get_latitude_index_bottom(), libdap::GeoConstraint::get_latitude_index_top(), libdap::GeoConstraint::get_latitude_sense(), libdap::GeoConstraint::get_lon_dim(), libdap::GeoConstraint::get_lon_length(), libdap::GeoConstraint::get_longitude_index_left(), libdap::GeoConstraint::get_longitude_index_right(), libdap::GeoConstraint::inverted, libdap::GeoConstraint::is_bounding_box_set(), libdap::BaseType::read(), libdap::GeoConstraint::reorder_data_longitude_axis(), libdap::GeoConstraint::set_latitude_index_bottom(), libdap::GeoConstraint::set_latitude_index_top(), libdap::GeoConstraint::set_longitude_index_left(), libdap::GeoConstraint::set_longitude_index_right(), libdap::Vector::set_read_p(), and libdap::Vector::val2buf().
GeoConstraint::LatitudeSense libdap::GeoConstraint::categorize_latitude | ( | ) | const [protected, virtual, inherited] |
Take a look at the latitude vector values and record whether the world is normal or upside down.
Definition at line 336 of file GeoConstraint.cc.
Referenced by libdap::GeoConstraint::set_bounding_box().
GeoConstraint::Notation libdap::GeoConstraint::categorize_notation | ( | const double | left, |
const double | right | ||
) | const [protected, inherited] |
A private method that determines if the longitude part of the bounding box uses 0/359 or -180/179 notation. This class only supports latitude constraints which use 90/-90 notation, so there's no need to figure out what sort of notation they use.
left | The left side of the bounding box, in degrees |
right | The right side of the bounding box |
Definition at line 110 of file GeoConstraint.cc.
Referenced by libdap::GeoConstraint::set_bounding_box().
void libdap::GeoConstraint::find_latitude_indeces | ( | double | top, |
double | bottom, | ||
LatitudeSense | sense, | ||
int & | latitude_index_top, | ||
int & | latitude_index_bottom | ||
) | const [protected, inherited] |
Scan from the top to the bottom, and the bottom to the top, looking for the top and bottom bounding box edges, respectively.
top | The top edge of the bounding box |
bottom | The bottom edge |
sense | Does the array/grid store data with larger latitudes at the starting indices or are the latitude 'upside down?' |
latitude_index_top | Value-result parameter that holds the index in the grid's latitude map of the top bounding box edge. Uses a closed interval for the test. |
latitude_index_bottom | Value-result parameter for the bottom edge index. |
Definition at line 285 of file GeoConstraint.cc.
Referenced by libdap::GeoConstraint::set_bounding_box().
void libdap::GeoConstraint::find_longitude_indeces | ( | double | left, |
double | right, | ||
int & | longitude_index_left, | ||
int & | longitude_index_right | ||
) | const [protected, inherited] |
Scan from the left to the right, and the right to the left, looking for the left and right bounding box edges, respectively.
left | The left edge of the bounding box |
right | The right edge |
longitude_index_left | Value-result parameter that holds the index in the grid's longitude map of the left bounding box edge. Uses a closed interval for the test. |
longitude_index_right | Value-result parameter for the right edge index. |
Definition at line 207 of file GeoConstraint.cc.
References DBG2, and libdap::double_to_string().
Referenced by libdap::GeoConstraint::set_bounding_box().
void libdap::GeoConstraint::flip_latitude_within_array | ( | Array & | a, |
int | lat_length, | ||
int | lon_length | ||
) | [protected, virtual, inherited] |
Definition at line 395 of file GeoConstraint.cc.
References DBG, libdap::BaseType::read(), libdap::Vector::value(), libdap::Vector::var(), libdap::BaseType::width(), and libdap::Vector::width().
Referenced by libdap::GridGeoConstraint::apply_constraint_to_data().
char* libdap::GeoConstraint::get_array_data | ( | ) | const [inline, inherited] |
Definition at line 222 of file GeoConstraint.h.
Referenced by libdap::GridGeoConstraint::apply_constraint_to_data(), and apply_constraint_to_data().
int libdap::GeoConstraint::get_array_data_size | ( | ) | const [inline, inherited] |
Definition at line 226 of file GeoConstraint.h.
Referenced by libdap::GridGeoConstraint::apply_constraint_to_data(), and apply_constraint_to_data().
set<string> libdap::GeoConstraint::get_coards_lat_units | ( | ) | const [inline, inherited] |
Definition at line 347 of file GeoConstraint.h.
set<string> libdap::GeoConstraint::get_coards_lon_units | ( | ) | const [inline, inherited] |
Definition at line 351 of file GeoConstraint.h.
virtual Array* libdap::ArrayGeoConstraint::get_constrained_array | ( | ) | const [inline, virtual] |
Definition at line 132 of file ArrayGeoConstraint.h.
double* libdap::GeoConstraint::get_lat | ( | ) | const [inline, inherited] |
Definition at line 231 of file GeoConstraint.h.
Referenced by libdap::GridGeoConstraint::apply_constraint_to_data().
Array::Dim_iter libdap::GeoConstraint::get_lat_dim | ( | ) | const [inline, inherited] |
Definition at line 269 of file GeoConstraint.h.
Referenced by libdap::GridGeoConstraint::apply_constraint_to_data(), and apply_constraint_to_data().
int libdap::GeoConstraint::get_lat_length | ( | ) | const [inline, inherited] |
Definition at line 248 of file GeoConstraint.h.
set<string> libdap::GeoConstraint::get_lat_names | ( | ) | const [inline, inherited] |
Definition at line 356 of file GeoConstraint.h.
int libdap::GeoConstraint::get_latitude_index_bottom | ( | ) | const [inline, inherited] |
Definition at line 287 of file GeoConstraint.h.
Referenced by libdap::GridGeoConstraint::apply_constraint_to_data(), and apply_constraint_to_data().
int libdap::GeoConstraint::get_latitude_index_top | ( | ) | const [inline, inherited] |
Definition at line 283 of file GeoConstraint.h.
Referenced by libdap::GridGeoConstraint::apply_constraint_to_data(), and apply_constraint_to_data().
LatitudeSense libdap::GeoConstraint::get_latitude_sense | ( | ) | const [inline, inherited] |
Definition at line 334 of file GeoConstraint.h.
Referenced by libdap::GridGeoConstraint::apply_constraint_to_data(), and apply_constraint_to_data().
double* libdap::GeoConstraint::get_lon | ( | ) | const [inline, inherited] |
Definition at line 235 of file GeoConstraint.h.
Referenced by libdap::GridGeoConstraint::apply_constraint_to_data().
Array::Dim_iter libdap::GeoConstraint::get_lon_dim | ( | ) | const [inline, inherited] |
Definition at line 265 of file GeoConstraint.h.
Referenced by libdap::GridGeoConstraint::apply_constraint_to_data(), and apply_constraint_to_data().
int libdap::GeoConstraint::get_lon_length | ( | ) | const [inline, inherited] |
Definition at line 252 of file GeoConstraint.h.
Referenced by libdap::GridGeoConstraint::apply_constraint_to_data(), and apply_constraint_to_data().
set<string> libdap::GeoConstraint::get_lon_names | ( | ) | const [inline, inherited] |
Definition at line 360 of file GeoConstraint.h.
int libdap::GeoConstraint::get_longitude_index_left | ( | ) | const [inline, inherited] |
Definition at line 300 of file GeoConstraint.h.
Referenced by libdap::GridGeoConstraint::apply_constraint_to_data(), and apply_constraint_to_data().
int libdap::GeoConstraint::get_longitude_index_right | ( | ) | const [inline, inherited] |
Definition at line 304 of file GeoConstraint.h.
Referenced by libdap::GridGeoConstraint::apply_constraint_to_data(), and apply_constraint_to_data().
Notation libdap::GeoConstraint::get_longitude_notation | ( | ) | const [inline, inherited] |
Definition at line 330 of file GeoConstraint.h.
Referenced by libdap::GridGeoConstraint::apply_constraint_to_data().
bool libdap::GeoConstraint::is_bounding_box_set | ( | ) | const [inline, inherited] |
Definition at line 317 of file GeoConstraint.h.
Referenced by libdap::GridGeoConstraint::apply_constraint_to_data(), and apply_constraint_to_data().
bool libdap::GeoConstraint::is_bounding_box_valid | ( | const double | left, |
const double | top, | ||
const double | right, | ||
const double | bottom | ||
) | const [protected, virtual, inherited] |
Definition at line 175 of file GeoConstraint.cc.
Referenced by libdap::GeoConstraint::set_bounding_box().
bool libdap::GeoConstraint::is_longitude_rightmost | ( | ) | const [inline, inherited] |
Definition at line 321 of file GeoConstraint.h.
void libdap::GeoConstraint::reorder_data_longitude_axis | ( | Array & | a, |
Array::Dim_iter | lon_dim | ||
) | [protected, virtual, inherited] |
Reorder the data values relative to the longitude axis so that the reordered longitude map (see GeoConstraint::reorder_longitude_map()) and the data values match.
Definition at line 478 of file GeoConstraint.cc.
References libdap::Array::add_constraint(), DBG, DBG2, libdap::Array::print_val(), libdap::BaseType::read(), libdap::Vector::set_read_p(), libdap::Vector::value(), libdap::Vector::var(), libdap::BaseType::width(), and libdap::Vector::width().
Referenced by libdap::GridGeoConstraint::apply_constraint_to_data(), and apply_constraint_to_data().
void libdap::GeoConstraint::reorder_longitude_map | ( | int | longitude_index_left | ) | [protected, virtual, inherited] |
Reorder the elements in the longitude map so that the longitude constraint no longer crosses the edge of the map's storage. The d_lon field is modified.
longitude_index_left | The left edge of the bounding box. |
Definition at line 439 of file GeoConstraint.cc.
Referenced by libdap::GridGeoConstraint::apply_constraint_to_data().
void libdap::GeoConstraint::set_bounding_box | ( | double | top, |
double | left, | ||
double | bottom, | ||
double | right | ||
) | [inherited] |
Set the bounding box for this constraint. After calling this method the object has values for the indexes for the latitude and longitude extent as well as the sense of the latitude (south pole at the top or bottom of the Array or Grid). These are used by the apply_constraint_to_data() method to actually constrain the data.
left | The left side of the bounding box. |
right | The right side |
top | The top |
bottom | The bottom |
Definition at line 594 of file GeoConstraint.cc.
References libdap::GeoConstraint::categorize_latitude(), libdap::GeoConstraint::categorize_notation(), DBG, libdap::double_to_string(), libdap::GeoConstraint::find_latitude_indeces(), libdap::GeoConstraint::find_longitude_indeces(), libdap::GeoConstraint::inverted, libdap::GeoConstraint::is_bounding_box_valid(), libdap::GeoConstraint::neg_pos, libdap::GeoConstraint::transform_constraint_to_pos_notation(), and libdap::GeoConstraint::transform_longitude_to_pos_notation().
Referenced by libdap::function_geogrid().
void libdap::GeoConstraint::set_lat | ( | double * | lat | ) | [inline, inherited] |
Definition at line 239 of file GeoConstraint.h.
void libdap::GeoConstraint::set_lat_dim | ( | Array::Dim_iter | lat | ) | [inline, inherited] |
Definition at line 277 of file GeoConstraint.h.
void libdap::GeoConstraint::set_lat_length | ( | int | len | ) | [inline, inherited] |
Definition at line 256 of file GeoConstraint.h.
void libdap::GeoConstraint::set_latitude_index_bottom | ( | int | bottom | ) | [inline, inherited] |
Definition at line 295 of file GeoConstraint.h.
Referenced by libdap::GridGeoConstraint::apply_constraint_to_data(), and apply_constraint_to_data().
void libdap::GeoConstraint::set_latitude_index_top | ( | int | top | ) | [inline, inherited] |
Definition at line 291 of file GeoConstraint.h.
Referenced by libdap::GridGeoConstraint::apply_constraint_to_data(), and apply_constraint_to_data().
void libdap::GeoConstraint::set_latitude_sense | ( | LatitudeSense | l | ) | [inline, inherited] |
Definition at line 342 of file GeoConstraint.h.
void libdap::GeoConstraint::set_lon | ( | double * | lon | ) | [inline, inherited] |
Definition at line 243 of file GeoConstraint.h.
void libdap::GeoConstraint::set_lon_dim | ( | Array::Dim_iter | lon | ) | [inline, inherited] |
Definition at line 273 of file GeoConstraint.h.
void libdap::GeoConstraint::set_lon_length | ( | int | len | ) | [inline, inherited] |
Definition at line 260 of file GeoConstraint.h.
void libdap::GeoConstraint::set_longitude_index_left | ( | int | left | ) | [inline, inherited] |
Definition at line 308 of file GeoConstraint.h.
Referenced by libdap::GridGeoConstraint::apply_constraint_to_data(), and apply_constraint_to_data().
void libdap::GeoConstraint::set_longitude_index_right | ( | int | right | ) | [inline, inherited] |
Definition at line 312 of file GeoConstraint.h.
Referenced by libdap::GridGeoConstraint::apply_constraint_to_data(), and apply_constraint_to_data().
void libdap::GeoConstraint::set_longitude_notation | ( | Notation | n | ) | [inline, inherited] |
Definition at line 338 of file GeoConstraint.h.
void libdap::GeoConstraint::set_longitude_rightmost | ( | bool | state | ) | [inline, inherited] |
Definition at line 325 of file GeoConstraint.h.
void libdap::GeoConstraint::transform_constraint_to_pos_notation | ( | double & | left, |
double & | right | ||
) | const [protected, inherited] |
Definition at line 131 of file GeoConstraint.cc.
Referenced by libdap::GeoConstraint::set_bounding_box().
void libdap::GeoConstraint::transform_longitude_to_neg_pos_notation | ( | ) | [protected, virtual, inherited] |
Given that the Grid has a longitude map that uses the 'pos' notation, transform it to the 'neg_pos' notation. This method modifies the d_lon array.
Definition at line 168 of file GeoConstraint.cc.
Referenced by libdap::GridGeoConstraint::apply_constraint_to_data().
void libdap::GeoConstraint::transform_longitude_to_pos_notation | ( | ) | [protected, virtual, inherited] |
Given that the Grid has a longitude map that uses the 'neg_pos' notation, transform it to the 'pos' notation. This method modifies the d_lon array.
Definition at line 149 of file GeoConstraint.cc.
Referenced by libdap::GeoConstraint::set_bounding_box().
void libdap::GeoConstraint::transpose_vector | ( | double * | src, |
const int | length | ||
) | [protected, virtual, inherited] |
Given a vector of doubles, transpose the elements. Use this to flip the latitude vector for a Grid that stores the southern latitudes at the top instead of the bottom.
src | A pointer to the vector |
length | The number of elements in the vector |
Definition at line 369 of file GeoConstraint.cc.
Referenced by libdap::GridGeoConstraint::apply_constraint_to_data().
friend class ArrayGeoConstraintTest [friend] |
Definition at line 105 of file ArrayGeoConstraint.h.
friend class GridGeoConstraintTest [friend, inherited] |
Reimplemented in libdap::GridGeoConstraint.
Definition at line 204 of file GeoConstraint.h.