This file is indexed.

/usr/include/ossim/util/ossimChipProcTool.h is in libossim-dev 2.2.2-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
//**************************************************************************************************
//
//     OSSIM Open Source Geospatial Data Processing Library
//     See top level LICENSE.txt file for license information
//
//**************************************************************************************************

#ifndef ossimChipProcUtil_HEADER
#define ossimChipProcUtil_HEADER 1

#include <ossim/base/ossimConstants.h>
#include <ossim/base/ossimRefPtr.h>
#include <ossim/base/ossimIrect.h>
#include <ossim/base/ossimGrect.h>
#include <ossim/imaging/ossimImageSource.h>
#include <ossim/imaging/ossimSingleImageChain.h>
#include <ossim/imaging/ossimImageFileWriter.h>
#include <ossim/imaging/ossimRectangleCutFilter.h>
#include <ossim/projection/ossimMapProjection.h>
#include <ossim/projection/ossimImageViewAffineTransform.h>
#include <ossim/base/ossimProcessInterface.h>
#include <ossim/base/ossimListenerManager.h>
#include <ossim/util/ossimTool.h>
#include <map>
#include <vector>

/**************************************************************************************************
 * Base class for all utilities that process chips of image (or DEM) pixels.
 *
 * Many utilities share parameters in common, especially ROI (bounding box), input imagery,
 * color look-up tables, DEM file specification, etc. This class does the following:
 *   * Consolidates the parsing of common parameters,
 *   * Provides for creating input chains with needed handlers and resamplers. The derived classes
 *     would finish populating the processing chain(s) according to their requirements.
 *   * Inserts the chipper filter at the end of the processing chain
 *   * Appends the appropriate writer
 *   * Provides a functional, default implementation of execute() and getChip()
 *
 * @note Almost all methods use throw for stack unwinding.  This is not in
 * method declarations to alleviate build errors on windows.  Sorry...
 **************************************************************************************************/
class OSSIM_DLL ossimChipProcTool : public ossimTool,
                                    public ossimProcessInterface,
                                    public ossimListenerManager

{
public:
   /** default constructor */
   ossimChipProcTool();

   /** virtual destructor */
   virtual ~ossimChipProcTool();

   virtual void setUsage(ossimArgumentParser& ap);

   /** Disconnects and clears the dem and image layers. */
   virtual void clear();
   
   /** Initial method to be ran prior to execute. Intended for command-line app usage.
    * @param ap Arg parser to initialize from.
    * @return FALSE if --help option requested or no params provided, so that derived classes can
    * @note Throws ossimException on error.
    * @note A throw with an error message of "usage" is used to get out when a usage is printed. */
   virtual bool initialize(ossimArgumentParser& ap);

   /** This method is responsible for completely setting up the full processing chain according to
    * the specifications given in the kwl passed in. If the utility is run from a command line,
    * the initialize(ossimArgumentParser) will assign the member master KWL and pass it to this
    * method. Web service calls will fill a KWL and pass it.
    *
    * This base class implementation should be called by the derived class implementation (assuming
    * the derived class needs to pull some parameters out of the KWL before the chains are set up.
    *
    * This method will instantiate the output projection and define the output bounding rect and
    * product size in pixels. The processing chain (stored in m_procChain) will be completely
    * initialized and ready for calls to getTile(). Then either getChip() or execute() can be called
    * depending on usage to fetch product.
    * @note Throws ossimException on error. */
   virtual void initialize(const ossimKeywordlist& kwl);

   /** Performs the actual product write.
    * @note Throws ossimException on error. */
   virtual bool execute();

   virtual void abort();

   /** Overrides base class implementation to indicate this class supports getChip() calls.
    * Can be done with dunamic cast and pointer test, but not sure how that is supported in SWIG
    * (OLK 11/2015). */
   virtual bool isChipProcessor() const { return true; }

   virtual ossimListenerManager* getManager();
   virtual ossimObject* getObject();
   virtual const ossimObject* getObject() const;

   /** The meat and potatos of this class. Performs an execute on specified rect. */
   virtual ossimRefPtr<ossimImageData> getChip(const ossimIrect& img_rect);
   virtual ossimRefPtr<ossimImageData> getChip(const ossimGrect& gnd_rect);
   ossimRefPtr<ossimImageData> getChip(const ossimDrect& map_bounding_rect, const ossimDpt& gsd);

   const ossimFilename& getProductFilename() const { return m_productFilename; }

protected:
   /** Intended to be called after derived class has picked off its own options from the parser, and
    * arguments remain (such as input and output filenames).
    * @note Throws ossimException on error. */
   void processRemainingArgs(ossimArgumentParser& ap);

   /** Derived classes initialize their custom chains here. */
   virtual void initProcessingChain() = 0;

   /** Called after initProcessingChain() to append common items to the processing chain.
    * Sets up the AOI box cutter filter and related stuff and initializes area of interest(aoi).
    * The filter is appended to the current m_procChain. Derived class should override if not
    * applicable to its processing chain. */
   virtual void finalizeChain();

   /** Creates chains for image entries associated with specified keyword. This is usually
    * the input image sources but could also be used for reading list of color sources.
    * @note Throws ossimException on error. */
   virtual void loadImageFiles();
   
   /** Loads all DEM files specified in master KWL into the elev manager's database */
   virtual void loadDemFiles();

   /** Creates the ossimSingleImageChain from image filename and populates the chain with resampler
    * and product output projection on view-side of resampler's IVT.
    * @param file File to open.
    * @param entryIndex Entry to open.
    * @return Ref pointer to ossimSingleImageChain.
    * @note Throws ossimException on error. */
   ossimRefPtr<ossimSingleImageChain> createInputChain(const ossimFilename& image_file,
                                                       ossim_uint32 entry_index=0);

   /** Creates the output or view projection.
    * @note All chains must be constructed prior to calling this. */
   void createOutputProjection();
   
   /** Sets the single image chain for identity operations view to a ossimImageViewAffineTransform.
    *  This will have a rotation if up is up is selected.  Also set m_outputProjection to the
    *  input's for area of interest. */
   ossimRefPtr<ossimMapProjection>  newIdentityProjection();

   /** Convenience method to get a utm projection.
    * @return new ossimUtmProjection. */
   ossimRefPtr<ossimMapProjection> newUtmProjection();

   /** Initializes the projection gsd. This loops through all chains to find the minimum gsd.
    * @note Throws ossimException on error. */
   virtual void initializeProjectionGsd();

   /** Initializes m_aoiViewRect with the output area of interest as specified in master KWL.
    *  Initialization will either come from user defined cut options or the
    *  source bounding rect with user options taking precidence.
    * @note Throws ossimException on error. */
   virtual void initializeAOI();

   /** Reads the KWL for origin latitude and central meridian.
    * @param gpt Point to initialize. Set to 0 unless lat or lon specified in KWL
    * @return false if no items found in KWL.
    * @note Throws ossimException on error. */
   bool getProjectionOrigin(ossimGpt& gpt);

   /** Creates a new writer. This will use the writer option (-w or --writer), if present; else,
    * it will be derived from the output file extention. This will also set any writer properties
    * passed in.
    * @return new ossimImageFileWriter.
    * @note Throws ossimException on error. */
   ossimRefPtr<ossimImageFileWriter> newWriter();

   /** Loops through all chains and sets the output projection.
    * @note Throws ossimException on error. */
   void propagateGeometryToChains();

   /** When multiple input sources are present, this method instantiates a combiner and adds inputs
    * @return Reference to the combiner. */
   ossimRefPtr<ossimImageSource>
   combineLayers(std::vector< ossimRefPtr<ossimSingleImageChain> >& layers) const;

   /** Initializes m_aoiViewRect given m_aoiGroundRect. */
   void computeAdjustedViewFromGrect();

   /** Assigns the AOI to be the bounding rect of the union of all inputs. */
   void setAoiToInputs();

   /** Gets the band list if BANDS keyword is set.
    * NOTE: BANDS keyword values are ONE based.  bandList values are ZERO based.
    * @param input image index for which the band selection applies
    * @param bandList List initialized by this. */
   void getBandList(ossim_uint32 image_idx, std::vector<ossim_uint32>& bandList ) const;

   /** Passes reader properties to single image handler if any.
    * @param ih Image handler to set properties on. */
   void setReaderProps( ossimImageHandler* ih ) const;
   
   /** Hidden from use copy constructor. */
   ossimChipProcTool( const ossimChipProcTool& obj );

   /** Hidden from use assignment operator. */
   const ossimChipProcTool& operator=( const ossimChipProcTool& /*rhs*/ ) { return *this; }

   ossimRefPtr<ossimGeoPolygon>  createClipPolygon()const;

   /** Tries to determine the AOI center point based on KWL entries, else returns NaNs in gpt.
    * Needed for bootstrapping the GSD computation when information in KWL is sparse */
   void findCenterGpt(ossimGpt& gpt);

   /**
    * Some utilities need to work on DEMs as images. This method determines which DEMs cover the AOI
    * and creates an image mosaic with the DEMS serving as pixel sources. Throws exceptions.
    */
   ossimRefPtr<ossimImageSource>  mosaicDemSources();

   ossimRefPtr<ossimImageGeometry> m_geom; //> Product chip/image geometry
   ossimIrect m_aoiViewRect;
   ossimGrect m_aoiGroundRect;
   std::vector< ossimRefPtr<ossimSingleImageChain> > m_imgLayers;
   std::vector< ossimFilename > m_demSources; //> Stores list of DEMs provided to the utility (versus pulled from the elevation database)
   mutable ossimRefPtr<ossimImageFileWriter> m_writer;
   ossimRefPtr<ossimImageChain> m_procChain;
   ossimRefPtr<ossimRectangleCutFilter> m_cutRectFilter;
   bool m_projIsIdentity;
   ossimDpt m_gsd; // meters
   bool m_geoScaled;
   ossimFilename m_productFilename;
   ossimScalarType m_productScalarType;
   bool m_needCutRect; // True when a specific AOI, different from the input, was requested
};

#endif /* #ifndef ossimChipProcUtil_HEADER */