00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef CDMINTERPOLATOR_H_
00025 #define CDMINTERPOLATOR_H_
00026
00027 #include <vector>
00028 #include "fimex/CDMReader.h"
00029 #include "fimex/CachedInterpolation.h"
00030 #include "fimex/CachedVectorReprojection.h"
00031
00032 namespace MetNoFimex
00033 {
00034
00035 class CDMInterpolator : public MetNoFimex::CDMReader
00036 {
00037 private:
00038 boost::shared_ptr<CDMReader> dataReader;
00039 std::vector<std::string> projectionVariables;
00040 boost::shared_ptr<CachedInterpolationInterface> cachedInterpolation;
00041 CachedVectorReprojection cachedVectorReprojection;
00042 std::string latitudeName;
00043 std::string longitudeName;
00045 void axisString2Vector(const std::string& axis, std::vector<double>& axis_vals, int axisId);
00046 void changeProjectionByProjectionParameters(int method, const std::string& proj_input, const std::vector<double>& out_x_axis, const std::vector<double>& out_y_axis, const std::string& out_x_axis_unit, const std::string& out_y_axis_unit) throw(CDMException);
00047 void changeProjectionByCoordinates(int method, const std::string& proj_input, const std::vector<double>& out_x_axis, const std::vector<double>& out_y_axis, const std::string& out_x_axis_unit, const std::string& out_y_axis_unit) throw(CDMException);
00048 void changeProjectionByForwardInterpolation(int method, const std::string& proj_input, const std::vector<double>& out_x_axis, const std::vector<double>& out_y_axis, const std::string& out_x_axis_unit, const std::string& out_y_axis_unit) throw(CDMException);
00049 public:
00050 CDMInterpolator(boost::shared_ptr<CDMReader> dataReader);
00051 virtual ~CDMInterpolator();
00056 virtual boost::shared_ptr<Data> getDataSlice(const std::string& varName, size_t unLimDimPos = 0) throw(CDMException);
00067 virtual void changeProjection(int method, const std::string& proj_input, const std::vector<double>& out_x_axis, const std::vector<double>& out_y_axis, const std::string& out_x_axis_unit, const std::string& out_y_axis_unit) throw(CDMException);
00078 virtual void changeProjection(int method, const std::string& proj_input, const std::string& out_x_axis, const std::string& out_y_axis, const std::string& out_x_axis_unit, const std::string& out_y_axis_unit) throw(CDMException);
00083 virtual void setLatitudeName(const std::string& latName) {this->latitudeName = latName;}
00087 virtual const std::string& getLatitudeName() const {return latitudeName;}
00092 virtual void setLongitudeName(const std::string& lonName) {this->longitudeName = lonName;}
00096 virtual const std::string& getLongitudeName() const {return longitudeName;}
00097 };
00098
00099 }
00100
00101 #endif