00001 /* 00002 * Fimex, ProjectionImpl.h 00003 * 00004 * (C) Copyright 2010, met.no 00005 * 00006 * Project Info: https://wiki.met.no/fimex/start 00007 * 00008 * This library is free software; you can redistribute it and/or modify it 00009 * under the terms of the GNU Lesser General Public License as published by 00010 * the Free Software Foundation; either version 2.1 of the License, or 00011 * (at your option) any later version. 00012 * 00013 * This library is distributed in the hope that it will be useful, but 00014 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 00015 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 00016 * License for more details. 00017 * 00018 * You should have received a copy of the GNU Lesser General Public 00019 * License along with this library; if not, write to the Free Software 00020 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 00021 * USA. 00022 * 00023 * Created on: Apr 27, 2010 00024 * Author: Heiko Klein 00025 */ 00026 00027 #ifndef PROJECTIONIMPL_H_ 00028 #define PROJECTIONIMPL_H_ 00029 00030 #include "fimex/coordSys/Projection.h" 00035 namespace MetNoFimex 00036 { 00037 00047 class ProjectionImpl: public MetNoFimex::Projection 00048 { 00049 public: 00050 virtual ~ProjectionImpl(); 00051 virtual std::vector<CDMAttribute> getParameters() const; 00052 virtual void addParameter(CDMAttribute attribute); 00053 virtual void addParameters(std::vector<CDMAttribute> attributes); 00054 virtual void removeParameter(std::string paramName); 00056 virtual const std::string& getName() const; 00057 virtual const bool isDegree() const; 00058 00066 virtual std::string getProj4String() const; 00068 virtual std::string toString() const; 00069 protected: 00071 static bool proj4ProjectionMatchesName(const std::string& proj4String, const std::string& name); 00077 static void proj4GetEarthAttributes(const std::string& proj4String, std::vector<CDMAttribute>& attrList); 00078 // set the name of the projection and assign the isDegree parameter 00079 explicit ProjectionImpl(std::string name, bool isDegree); 00084 virtual std::ostream& getProj4ProjectionPart(std::ostream&) const = 0; 00093 bool addParameterToStream(std::ostream& outStream, const std::string& name, std::string replaceName = "") const; 00094 std::vector<CDMAttribute> params_; 00095 private: 00096 const std::string name_; 00097 const bool isDegree_; 00098 }; 00099 00100 } 00101 00102 #endif /* PROJECTIONIMPL_H_ */