36#include <libdap/ServerFunction.h>
50 SizeBox(
int x,
int y) : x_size(x), y_size(y) { }
51 SizeBox(): x_size(0), y_size(0) { }
61 GeoBox(
double t,
double b,
double l,
double r) : top(t), bottom(b), left(l), right(r) { }
62 GeoBox() : top(0.0), bottom(0.0), left(0.0), right(0.0) { }
66SizeBox get_size_box(libdap::Array *x, libdap::Array *y);
68std::vector<double> get_geotransform_data(libdap::Array *x, libdap::Array *y,
bool test_maps =
false);
70std::vector<GDAL_GCP> get_gcp_data(libdap::Array *x, libdap::Array *y,
int sample_x = 1,
int sample_y = 1);
72GDALDataType get_array_type(
const libdap::Array *a);
73void read_band_data(
const libdap::Array *src, GDALRasterBand* band);
74void add_band_data(
const libdap::Array *src, GDALDataset* ds);
76std::unique_ptr<GDALDataset> build_src_dataset(libdap::Array *data, libdap::Array *x, libdap::Array *y,
77 const std::string &srs =
"WGS84");
78std::unique_ptr<GDALDataset> build_src_dataset_3D(libdap::Array *data, libdap::Array *t,libdap::Array *x, libdap::Array *y,
79 const std::string &srs =
"WGS84");
81std::unique_ptr<GDALDataset> scale_dataset(std::unique_ptr<GDALDataset>& src,
const SizeBox &size,
82 const std::string &crs =
"",
const std::string &interp =
"nearest");
84std::unique_ptr<GDALDataset> scale_dataset_3D(std::unique_ptr<GDALDataset>& src,
const SizeBox &size,
85 const std::string &crs =
"",
const std::string &interp =
"nearest");
87libdap::Array *build_array_from_gdal_dataset(GDALDataset *dst,
const libdap::Array *src);
88libdap::Array *build_array_from_gdal_dataset_3D(GDALDataset *dst,
const libdap::Array *src);
89void build_maps_from_gdal_dataset(GDALDataset *dst, libdap::Array *x_map, libdap::Array *y_map,
bool name_maps =
false);
90void build_maps_from_gdal_dataset_3D(GDALDataset *dst, libdap::Array *t, libdap::Array *t_map, libdap::Array *x_map, libdap::Array *y_map,
bool name_maps =
false);
92libdap::Grid *scale_dap_grid(
const libdap::Grid *src,
const SizeBox &size,
const std::string &dest_crs,
93 const std::string &interp);
94libdap::Grid *scale_dap_array(
const libdap::Array *data,
const libdap::Array *lon,
const libdap::Array *lat,
95 const SizeBox &size,
const std::string &crs,
const std::string &interp);
96libdap::Grid *scale_dap_array_3D(
const libdap::Array *data,
const libdap::Array *t,
const libdap::Array *lon,
const libdap::Array *lat,
const SizeBox &size,
97 const std::string &crs,
const std::string &interp);
99void function_scale_grid(
int argc, libdap::BaseType * argv[], libdap::DDS &, libdap::BaseType **btpp);
100void function_scale_array(
int argc, libdap::BaseType * argv[], libdap::DDS &, libdap::BaseType **btpp);
101void function_scale_array_3D(
int argc, libdap::BaseType * argv[], libdap::DDS &, libdap::BaseType **btpp);
103class ScaleGrid:
public libdap::ServerFunction {
107 setName(
"scale_grid");
108 setDescriptionString(
"Scale a DAP2 Grid");
109 setUsageString(
"scale_grid(Grid, Y size, X size, CRS, Interpolation method)");
110 setRole(
"http://services.opendap.org/dap4/server-side-function/scale_grid");
111 setDocUrl(
"http://docs.opendap.org/index.php/Server_Side_Processing_Functions#scale_grid");
112 setFunction(function_scale_grid);
121class ScaleArray:
public libdap::ServerFunction {
125 setName(
"scale_array");
126 setDescriptionString(
"Scale a DAP2 Array");
127 setUsageString(
"scale_grid(Array data, Array lon, Array lat, Y size, X size, CRS, Interpolation method)");
128 setRole(
"http://services.opendap.org/dap4/server-side-function/scale_array");
129 setDocUrl(
"http://docs.opendap.org/index.php/Server_Side_Processing_Functions#scale_array");
130 setFunction(function_scale_array);
133 virtual ~ScaleArray()
139class Scale3DArray:
public libdap::ServerFunction {
143 setName(
"scale_3D_array");
144 setDescriptionString(
"Scale a DAP2 3D Array");
145 setUsageString(
"scale_3D_grid(Array data, Array time, Array lon, Array lat, Y size, X size, CRS, Interpolation method)");
146 setRole(
"http://services.opendap.org/dap4/server-side-function/scale_3D_array");
147 setDocUrl(
"http://docs.opendap.org/index.php/Server_Side_Processing_Functions#scale_3D_array");
148 setFunction(function_scale_array_3D);
151 virtual ~Scale3DArray()