1 //*******************************************************************
2 //
3 // License:  MIT
4 //
5 // See LICENSE.txt file in the top level directory for more details.
6 //
7 // Author: Walt Bunch
8 //
9 // Description: Nitf support class for SENSRA - Sensor parameters extension.
10 //
11 //********************************************************************
12 // $Id: ossimNitfSensraTag.h 22013 2012-12-19 17:37:20Z dburken $
13 #ifndef ossimNitfSensraTag_HEADER
14 #define ossimNitfSensraTag_HEADER
15 #include <ossim/support_data/ossimNitfRegisteredTag.h>
16 
17 class OSSIM_DLL ossimNitfSensraTag : public ossimNitfRegisteredTag
18 {
19 public:
20 
21    enum
22    {
23       REF_ROW_SIZE         = 8,
24       REF_COL_SIZE         = 8,
25       SENSOR_MODEL_SIZE    = 6,
26       SENSOR_MOUNT_SIZE    = 3,
27       SENSOR_LOC_SIZE      = 21,
28       SENSOR_ALT_SRC_SIZE  = 1,
29       SENSOR_ALT_SIZE      = 6,
30       SENSOR_ALT_UNIT_SIZE = 1,
31       SENSOR_AGL_SIZE      = 5,
32       SENSOR_PITCH_SIZE    = 7,
33       SENSOR_ROLL_SIZE     = 8,
34       SENSOR_YAW_SIZE      = 8,
35       PLATFORM_PITCH_SIZE  = 7,
36       PLATFORM_ROLL_SIZE   = 8,
37       PLATFORM_HDG_SIZE    = 5,
38       GROUND_SPD_SRC_SIZE  = 1,
39       GROUND_SPEED_SIZE    = 6,
40       GROUND_SPD_UNIT_SIZE = 1,
41       GROUND_TRACK_SIZE    = 5,
42       VERTICAL_VEL_SIZE    = 5,
43       VERT_VEL_UNIT_SIZE   = 1,
44       SWATH_FRAMES_SIZE    = 4,
45       N_SWATHS_SIZE        = 4,
46       SPOT_NUM_SIZE        = 3
47       //                  -----
48       //                   132
49    };
50 
51    ossimNitfSensraTag();
52    virtual ~ossimNitfSensraTag();
53 
54    virtual void parseStream(std::istream& in);
55    virtual void writeStream(std::ostream& out);
56 
57    virtual void clearFields();
58 
59    /**
60     * @brief Print method that outputs a key/value type format
61     * adding prefix to keys.
62     * @param out Stream to output to.
63     * @param prefix Prefix added to key like "image0.";
64     */
65    virtual std::ostream& print(std::ostream& out,
66                                const std::string& prefix) const;
67 
68   // The set methods below taking ossimString args will truncate and
69   // pad with spaces, as necessary, to match enumed size
70    void setRefRow(ossimString refRow);
71    ossimString getRefRow()const;
72    void setRefCol(ossimString refCol);
73    ossimString getRefCol()const;
74    void setSensorModel(ossimString sensorModel);
75    ossimString getSensorModel()const;
76    void setSensorMount(ossimString sensorMount);
77    ossimString getSensorMount()const;
78    void setSensorLoc(ossimString sensorLoc);
79    ossimString getSensorLoc()const;
80    void setSensorAltSrc(ossimString sensorAltSrc);
81    ossimString getSensorAltSrc()const;
82    void setSensorAlt(ossimString sensorAlt);
83    ossimString getSensorAlt()const;
84    void setSensorAltUnit(ossimString sensorAltUnit);
85    ossimString getSensorAltUnit()const;
86    void setSensorAgl(ossimString sensorAgl);
87    ossimString getSensorAgl()const;
88    void setSensorPitch(ossimString sensorPitch);
89    ossimString getSensorPitch()const;
90    void setSensorRoll(ossimString sensorRoll);
91    ossimString getSensorRoll()const;
92    void setSensorYaw(ossimString sensorYaw);
93    ossimString getSensorYaw()const;
94    void setPlatformPitch(ossimString platformPitch);
95    ossimString getPlatformPitch()const;
96    void setPlatformRoll(ossimString platformRoll);
97    ossimString getPlatformRoll()const;
98    void setPlatformHdg(ossimString platformHdg);
99    ossimString getPlatformHdg()const;
100    void setGroundSpdSrc(ossimString groundSpdSrc);
101    ossimString getGroundSpdSrc()const;
102    void setGroundSpeed(ossimString groundSpeed);
103    ossimString getGroundSpeed()const;
104    void setGroundSpdUnit(ossimString groundSpdUnit);
105    ossimString getGroundSpdUnit()const;
106    void setGroundTrack(ossimString groundTrack);
107    ossimString getGroundTrack()const;
108    void setVerticalVel(ossimString verticalVel);
109    ossimString getVerticalVel()const;
110    void setVertVelUnit(ossimString vertVelUnit);
111    ossimString getVertVelUnit()const;
112    void setSwathFrames(ossimString swathFrames);
113    ossimString getSwathFrames()const;
114    void setNSwaths(ossimString nSwaths);
115    ossimString getNSwaths()const;
116    void setSpotNum(ossimString spotNum);
117    ossimString getSpotNum()const;
118 
119 protected:
120 
121    /**
122     * FIELD: REFROW
123     *
124     */
125    char theRefRow[REF_ROW_SIZE+1];
126 
127    /**
128     * FIELD: REFCOL
129     *
130     */
131    char theRefCol[REF_COL_SIZE+1];
132 
133    /**
134     * FIELD: SENSORMODEL
135     *
136     */
137    char theSensorModel[SENSOR_MODEL_SIZE+1];
138 
139    /**
140     * FIELD: SENSORMOUNT
141     *
142     */
143    char theSensorMount[SENSOR_MOUNT_SIZE+1];
144 
145    /**
146     * FIELD: SENSORLOC
147     *
148     */
149    char theSensorLoc[SENSOR_LOC_SIZE+1];
150 
151    /**
152     * FIELD: SENSORALTSRC
153     *
154     */
155    char theSensorAltSrc[SENSOR_ALT_SRC_SIZE+1];
156 
157    /**
158     * FIELD: SENSORALT
159     *
160     */
161    char theSensorAlt[SENSOR_ALT_SIZE+1];
162 
163    /**
164     * FIELD: SENSORALTUNIT
165     *
166     */
167    char theSensorAltUnit[SENSOR_ALT_UNIT_SIZE+1];
168 
169    /**
170     * FIELD: SENSORAGL
171     *
172     */
173    char theSensorAgl[SENSOR_AGL_SIZE+1];
174 
175    /**
176     * FIELD: SENSORPITCH
177     *
178     */
179    char theSensorPitch[SENSOR_PITCH_SIZE+1];
180 
181    /**
182     * FIELD: SENSORROLL
183     *
184     */
185    char theSensorRoll[SENSOR_ROLL_SIZE+1];
186 
187    /**
188     * FIELD: SENSORYAW
189     *
190     */
191    char theSensorYaw[SENSOR_YAW_SIZE+1];
192 
193    /**
194     * FIELD: PLATFORMPITCH
195     *
196     */
197    char thePlatformPitch[PLATFORM_PITCH_SIZE+1];
198 
199    /**
200     * FIELD: PLATFORMROLL
201     *
202     */
203    char thePlatformRoll[PLATFORM_ROLL_SIZE+1];
204 
205    /**
206     * FIELD: PLATFORMHDG
207     *
208     */
209    char thePlatformHdg[PLATFORM_HDG_SIZE+1];
210 
211    /**
212     * FIELD: GROUNDSPDSRC
213     *
214     */
215    char theGroundSpdSrc[GROUND_SPD_SRC_SIZE+1];
216 
217    /**
218     * FIELD: GROUNDSPEED
219     *
220     */
221    char theGroundSpeed[GROUND_SPEED_SIZE+1];
222 
223    /**
224     * FIELD: GROUNDSPDUNIT
225     *
226     */
227    char theGroundSpdUnit[GROUND_SPD_UNIT_SIZE+1];
228 
229    /**
230     * FIELD: GROUNDTRACK
231     *
232     */
233    char theGroundTrack[GROUND_TRACK_SIZE+1];
234 
235    /**
236     * FIELD: VERTICALVEL
237     *
238     */
239    char theVerticalVel[VERTICAL_VEL_SIZE+1];
240 
241    /**
242     * FIELD: VERTVELUNIT
243     *
244     */
245    char theVertVelUnit[VERT_VEL_UNIT_SIZE+1];
246 
247    /**
248     * FIELD: SWATHFRAMES
249     *
250     */
251    char theSwathFrames[SWATH_FRAMES_SIZE+1];
252 
253    /**
254     * FIELD: NSWATHS
255     *
256     */
257    char theNSwaths[N_SWATHS_SIZE+1];
258 
259    /**
260     * FIELD: SPOTNUM
261     *
262     */
263    char theSpotNum[SPOT_NUM_SIZE+1];
264 
265 TYPE_DATA
266 };
267 
268 #endif
269