pktools 2.6.7
Processing Kernel for geospatial data
pksensormodel.h
1/**********************************************************************
2pksensormodel.h: program to calculate geometric position based on row (sensor), col (sensor), roll, pitch, yaw and lens coordinates
3Copyright (C) 2008-2014 Pieter Kempeneers
4
5This file is part of pktools
6
7pktools is free software: you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation, either version 3 of the License, or
10(at your option) any later version.
11
12pktools is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with pktools. If not, see <http://www.gnu.org/licenses/>.
19***********************************************************************/
20#ifndef _PKSENSORMODEL_H_
21#define _PKSENSORMODEL_H_
22#include <vector>
23// #include <gslwrap/matrix_double.h>
24#include <armadillo>
25#include "models/SensorModel.h"
26
27double objFunction(const std::vector<double> &x, std::vector<double> &grad, void *my_func_data);
28
30 public:
31 DataModel() : m_threshold(0){};
32 DataModel(const SensorModel::SensorModel& theModel) : m_model(theModel), m_threshold(0){};
33 ~DataModel(){};
34 void setModel(const SensorModel::SensorModel& theModel){m_model=theModel;};
35 const SensorModel::SensorModel& getModel() const {return m_model;};
36 int getSize() const{return m_posGCP.size();};
37 void setThreshold(double theThreshold){m_threshold=theThreshold;};
38 double getThreshold(){return m_threshold;};
39 int erase(int index){
40 m_attPlatform.erase(m_attPlatform.begin()+index);
41 m_posPlatform.erase(m_posPlatform.begin()+index);
42 m_posGCP.erase(m_posGCP.begin()+index);
43 m_row.erase(m_row.begin()+index);
44 m_col.erase(m_col.begin()+index);
45 };
46 int pushAttPlatform(const arma::vec& atp){m_attPlatform.push_back(atp); return m_attPlatform.size();};
47 int pushPosPlatform(const arma::vec& ppl){m_posPlatform.push_back(ppl); return m_posPlatform.size();};
48 int pushPosGCP(const arma::vec& pgcp){m_posGCP.push_back(pgcp); return m_posGCP.size();};
49 int pushRow(int r){m_row.push_back(r); return m_row.size();};
50 int pushCol(int c){m_col.push_back(c); return m_col.size();};
51 arma::vec getPosPlatform(int index) const{assert(index>=0);assert(index<m_posPlatform.size());return(m_posPlatform[index]);};
52 arma::vec getAttPlatform(int index) const{assert(index>=0);assert(index<m_attPlatform.size());return(m_attPlatform[index]);};
53 arma::vec getPosGCP(int index) const{assert(index>=0);assert(index<m_posGCP.size());return(m_posGCP[index]);};
54 arma::vec getPos(int index) const{
55 assert(index>=0);
56 assert(index<m_posPlatform.size());
57 assert(index<m_attPlatform.size());
58 assert(index<m_row.size());
59 assert(index<m_col.size());
60 assert(index<m_posGCP.size());
61 return(m_model.getPos(m_posPlatform[index],m_attPlatform[index],m_row[index],m_col[index],m_posGCP[index][2]));
62 };
63 double getDistGeo(int index) const{assert(index>=0);assert(index<m_posGCP.size());return(m_model.getDistGeo(m_posGCP[index],getPos(index)));};
64 int getRow(int index) const{assert(index>=0);assert(index<m_row.size());return(m_row[index]);};
65 int getCol(int index) const{assert(index>=0);assert(index<m_col.size());return(m_col[index]);};
66 double getHeight(int index) const{assert(index>=0);assert(index<m_posGCP.size());return(m_posGCP[index][2]);};
67 void setBoresightAtt(const arma::vec& bc_att){
68 m_model.setBoresightAtt(bc_att);
69 // for(int index=0;index<m_attPlatform.size();++index)
70 // m_attPlatform[index]+=bc_att;
71 };
72 private:
73 SensorModel::SensorModel m_model;
74 vector<arma::vec> m_posPlatform;
75 vector<arma::vec> m_posGCP;
76 vector<arma::vec> m_attPlatform;
77 vector<int> m_row;
78 vector<int> m_col;
79 double m_threshold;
80};
81
82#endif //_PKSENSORMODEL_H_