[ossim] 02/06: New upstream version 2.3.0

Bas Couwenberg sebastic at debian.org
Mon Mar 5 19:17:07 UTC 2018


This is an automated email from the git hooks/post-receive script.

sebastic pushed a commit to branch experimental
in repository ossim.

commit 1741c125866ebdc167c1974230a7f6af40b9e611
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Mon Mar 5 19:44:26 2018 +0100

    New upstream version 2.3.0
---
 apps/ossim-cli/ossim-cli.cpp                       |  10 +-
 apps/ossim-rpcgen/ossim-rpcgen.cpp                 |   6 -
 cmake/CMakeModules/FindOpenCV.cmake                | 130 +++++++++++--------
 include/ossim/init/JsonConfig.h                    |   7 +-
 include/ossim/point_cloud/ossimPointBlock.h        |   6 +-
 .../point_cloud/ossimPointCloudImageHandler.h      |  62 ++++-----
 .../point_cloud/ossimPointCloudUtilityFilter.h     |  32 +----
 include/ossim/projection/ossimRpcModel.h           |   2 +-
 include/ossim/projection/ossimRpcSolver.h          |  13 +-
 include/ossim/support_data/ossimSrcRecord.h        |   5 +-
 include/ossim/util/ossimChipperUtil.h              |   3 +-
 include/ossim/util/ossimImageUtil.h                |   2 +-
 include/ossim/util/ossimInfo.h                     |  10 ++
 ...ossimPointCloudUtil.h => ossimPointCloudTool.h} |  39 ++----
 src/base/ossimRectanglePartitioner.cpp             |   2 +-
 src/imaging/ossimFilterResampler.cpp               |   9 +-
 src/imaging/ossimImageHandler.cpp                  |  29 +++--
 src/imaging/ossimImageSourceFilter.cpp             |   2 +-
 src/imaging/ossimJpegTileSource.cpp                |   2 +-
 src/imaging/ossimMetadataFileWriter.cpp            |   2 +-
 src/imaging/ossimResampler.cpp                     |  56 ++++----
 src/imaging/ossimSingleImageChain.cpp              |  21 ++-
 src/imaging/ossimTiffOverviewBuilder.cpp           |   2 +-
 src/imaging/ossimVertexExtractor.cpp               |   2 +-
 src/init/JsonConfig.cpp                            |  35 +++--
 src/point_cloud/ossimPointCloudImageHandler.cpp    |  36 +++---
 src/point_cloud/ossimPointCloudUtilityFilter.cpp   |  18 +--
 src/projection/ossimRpcModel.cpp                   |   6 +-
 src/projection/ossimRpcSolver.cpp                  |  39 +++---
 src/reg/Image.cpp                                  |   3 +-
 src/reg/TiePoint.cpp                               |  18 ++-
 src/support_data/ossimERS.cpp                      |   2 +-
 src/support_data/ossimSrcRecord.cpp                |  27 +++-
 src/util/ossimChipperUtil.cpp                      | 144 ++++++++-------------
 src/util/ossimInfo.cpp                             |  49 ++++++-
 ...mPointCloudUtil.cpp => ossimPointCloudTool.cpp} |  42 +++---
 src/util/ossimToolFactory.cpp                      |   4 +
 src/util/ossimViewshedTool.cpp                     |   6 +-
 38 files changed, 479 insertions(+), 404 deletions(-)

diff --git a/apps/ossim-cli/ossim-cli.cpp b/apps/ossim-cli/ossim-cli.cpp
index 527409f..1b3a7e0 100755
--- a/apps/ossim-cli/ossim-cli.cpp
+++ b/apps/ossim-cli/ossim-cli.cpp
@@ -16,10 +16,8 @@ using namespace std;
 #include <ossim/base/ossimStdOutProgress.h>
 #include <ossim/base/ossimTimer.h>
 #include <ossim/base/ossimKeywordlist.h>
-#include <ossim/base/ossimString.h>
 #include <ossim/util/ossimToolRegistry.h>
 #include <ossim/base/ossimException.h>
-#include <ossim/base/ossimNotify.h>
 
 #define CINFO  ossimNotify(ossimNotifyLevel_INFO)
 #define CWARN  ossimNotify(ossimNotifyLevel_WARN)
@@ -160,15 +158,11 @@ int main(int argc, char *argv[])
 
       } while (false);
    }
-   catch  (const ossimException& e)
+   catch  (const exception& e)
    {
-      ossimNotify(ossimNotifyLevel_FATAL)<<e.what()<<endl;
+      CFATAL<<e.what()<<endl;
       exit(1);
    }
-   catch( ... )
-   {
-      CFATAL << "Caught unknown exception!" << endl;
-   }
 
    if (status_ok)
       exit(0);
diff --git a/apps/ossim-rpcgen/ossim-rpcgen.cpp b/apps/ossim-rpcgen/ossim-rpcgen.cpp
index b9832da..16f7282 100644
--- a/apps/ossim-rpcgen/ossim-rpcgen.cpp
+++ b/apps/ossim-rpcgen/ossim-rpcgen.cpp
@@ -2,16 +2,12 @@
 #include <ossim/base/ossimNotifyContext.h>
 #include <ossim/base/ossimArgumentParser.h>
 #include <ossim/base/ossimApplicationUsage.h>
-#include <ossim/base/ossimTrace.h>
-#include <ossim/base/ossimKeywordNames.h>
 #include <ossim/base/ossimRefPtr.h>
 #include <ossim/imaging/ossimImageGeometry.h>
 #include <ossim/imaging/ossimImageHandler.h>
 #include <ossim/imaging/ossimImageHandlerRegistry.h>
 #include <ossim/projection/ossimProjectionFactoryRegistry.h>
-#include <ossim/projection/ossimProjection.h>
 #include <ossim/projection/ossimRpcSolver.h>
-#include <sstream>
 #include <ossim/base/ossimXmlDocument.h>
 
 using namespace std;
@@ -182,8 +178,6 @@ int main(int argc, char* argv[])
       ossimNotify(ossimNotifyLevel_INFO) << "\nSolving for RPC coefficients..." << std::endl;
       ossimRefPtr<ossimRpcSolver> solver = new ossimRpcSolver(true, false);
       bool converged = solver->solve(imageRect, geom.get(), error);
-      double meanResidual = solver->getRmsError();
-      double maxResidual = solver->getMaxError();
       rpc = solver->getRpcModel();
    }
 
diff --git a/cmake/CMakeModules/FindOpenCV.cmake b/cmake/CMakeModules/FindOpenCV.cmake
index c4b388e..f526ecc 100644
--- a/cmake/CMakeModules/FindOpenCV.cmake
+++ b/cmake/CMakeModules/FindOpenCV.cmake
@@ -34,14 +34,13 @@ find_path(OPENCV_INCLUDE_DIR opencv/cv.hpp  PATHS ${OPENCV_HOME}/include)
 macro(FIND_OPENCV_LIBRARY MYLIBRARY MYLIBRARYNAME)
    find_library( ${MYLIBRARY}
         NAMES "${MYLIBRARYNAME}${OPENCV_RELEASE_POSTFIX}"
-   	  PATHS ${OPENCV_HOME}/lib)
+   	  PATHS ${OPENCV_HOME}/lib ${OPENCV_HOME}/share/OpenCV/3rdparty/lib )
 endmacro(FIND_OPENCV_LIBRARY MYLIBRARY MYLIBRARYNAME)
 
 # Required
 FIND_OPENCV_LIBRARY(OPENCV_CORE_LIBRARY opencv_core)
 FIND_OPENCV_LIBRARY(OPENCV_FEATURES2D_LIBRARY opencv_features2d)
 FIND_OPENCV_LIBRARY(OPENCV_FLANN_LIBRARY opencv_flann)
-FIND_OPENCV_LIBRARY(OPENCV_HIGHGUI_LIBRARY opencv_highgui)
 FIND_OPENCV_LIBRARY(OPENCV_IMGPROC_LIBRARY opencv_imgproc)
 FIND_OPENCV_LIBRARY(OPENCV_ML_LIBRARY opencv_ml)
 FIND_OPENCV_LIBRARY(OPENCV_OBJDETECT_LIBRARY opencv_objdetect)
@@ -49,61 +48,90 @@ FIND_OPENCV_LIBRARY(OPENCV_XFEATURES2D_LIBRARY opencv_xfeatures2d)
 FIND_OPENCV_LIBRARY(OPENCV_PHOTO_LIBRARY opencv_photo)
 FIND_OPENCV_LIBRARY(OPENCV_VIDEO_LIBRARY opencv_video)
 
-# Optional
-FIND_OPENCV_LIBRARY(OPENCV_IMGCODECS_LIBRARY opencv_imgcodecs)
-FIND_OPENCV_LIBRARY(OPENCV_CUDAARITHM_LIBRARY opencv_cudaarithm)
-FIND_OPENCV_LIBRARY(OPENCV_CUDAIMGPROC_LIBRARY opencv_cudaimgproc)
-FIND_OPENCV_LIBRARY(OPENCV_CUDEV_LIBRARY opencv_cudev)
-
-set(OPENCV_LIBRARIES ${OPENCV_OBJDETECT_LIBRARY} 
-                     ${OPENCV_CORE_LIBRARY} 
-                     ${OPENCV_FEATURES2D_LIBRARY} 
-                     ${OPENCV_XFEATURES2D_LIBRARY} 
-                     ${OPENCV_FLANN_LIBRARY} 
-                     ${OPENCV_HIGHGUI_LIBRARY} 
-                     ${OPENCV_IMGPROC_LIBRARY} 
-                     ${OPENCV_ML_LIBRARY} 
-                     ${OPENCV_PHOTO_LIBRARY}
-                     ${OPENCV_VIDEO_LIBRARY})
+set(OPENCV_LIBRARIES ${OPENCV_OBJDETECT_LIBRARY}
+        ${OPENCV_VIDEO_LIBRARY}
+        ${OPENCV_PHOTO_LIBRARY}
+        ${OPENCV_ML_LIBRARY}
+        ${OPENCV_IMGPROC_LIBRARY}
+        ${OPENCV_FLANN_LIBRARY}
+        ${OPENCV_FEATURES2D_LIBRARY}
+        ${OPENCV_XFEATURES2D_LIBRARY}
+        ${OPENCV_CORE_LIBRARY}
+        )
 
 set(OPENCV_FOUND "NO")
-if ( OPENCV_INCLUDE_DIR AND 
-     OPENCV_CORE_LIBRARY AND 
-     OPENCV_FEATURES2D_LIBRARY AND 
-     OPENCV_XFEATURES2D_LIBRARY AND 
-     OPENCV_FLANN_LIBRARY AND 
-     OPENCV_HIGHGUI_LIBRARY AND 
-     OPENCV_IMGPROC_LIBRARY AND 
-     OPENCV_ML_LIBRARY AND 
-     OPENCV_OBJDETECT_LIBRARY AND 
-     OPENCV_PHOTO_LIBRARY AND
-     OPENCV_VIDEO_LIBRARY)
-   set(OPENCV_FOUND "YES")
+if ( OPENCV_INCLUDE_DIR AND
+        OPENCV_CORE_LIBRARY AND
+        OPENCV_FEATURES2D_LIBRARY AND
+        OPENCV_XFEATURES2D_LIBRARY AND
+        OPENCV_FLANN_LIBRARY AND
+        OPENCV_IMGPROC_LIBRARY AND
+        OPENCV_ML_LIBRARY AND
+        OPENCV_OBJDETECT_LIBRARY AND
+        OPENCV_PHOTO_LIBRARY AND
+        OPENCV_VIDEO_LIBRARY)
+    set(OPENCV_FOUND "YES")
 else()
-   message( WARNING "Could not find all OpenCV libraries. Check the list for NOTFOUND:" )
-   message( "${OPENCV_LIBRARIES}" )
+    message( WARNING "Could not find all OpenCV libraries. Check the list for NOTFOUND:" )
+    message( "${OPENCV_LIBRARIES}" )
 endif()
 
-set(OPENCV_GPU_FOUND "NO")
-if ( OPENCV_FOUND AND
-     OPENCV_CUDAARITHM_LIBRARY AND 
-     OPENCV_CUDAIMGPROC_LIBRARY AND 
-     OPENCV_CUDEV_LIBRARY)
-   set(OPENCV_GPU_FOUND "YES")
-   set(OPENCV_LIBRARIES ${OPENCV_LIBRARIES} 
-                        ${OPENCV_CUDAARITHM_LIBRARY} 
-                        ${OPENCV_CUDAIMGPROC_LIBRARY} 
-                        ${OPENCV_CUDEV_LIBRARY} )
-else()
-   message( "Could not find optional OpenCV GPU (CUDA) Libraries. " )
-endif()
+if (OPENCV_FOUND)
+    FIND_OPENCV_LIBRARY(OPENCV_IPPICV_LIBRARY ippicv)
+    if ( OPENCV_IPPICV_LIBRARY )
+        set( OPENCV_LIBRARIES ${OPENCV_LIBRARIES} ${OPENCV_IPPICV_LIBRARY} )
+    else()
+        message( WARNING "Could not find libippicv needed by OpenCV." )
+    endif()
+    FIND_OPENCV_LIBRARY(OPENCV_ILMIMF_LIBRARY IlmImf)
+    if ( OPENCV_ILMIMF_LIBRARY )
+        set( OPENCV_LIBRARIES ${OPENCV_LIBRARIES} ${OPENCV_ILMIMF_LIBRARY} )
+    else()
+        message( WARNING "Could not find IlmImf needed by OpenCV." )
+    endif()
+    FIND_OPENCV_LIBRARY(OPENCV_LIBTIFF_LIBRARY libtiff)
+    if ( OPENCV_LIBTIFF_LIBRARY )
+        set( OPENCV_LIBRARIES ${OPENCV_LIBRARIES} ${OPENCV_LIBTIFF_LIBRARY} )
+    else()
+        message( WARNING "Could not find libtiff needed by OpenCV." )
+    endif()
 
-set(OPENCV_IMGCODECS_FOUND "NO")
-if(OPENCV_FOUND AND OPENCV_IMGCODECS_LIBRARY)
-   set(OPENCV_IMGCODECS_FOUND "YES")
-   set(OPENCV_LIBRARIES ${OPENCV_LIBRARIES} ${OPENCV_IMGCODECS_LIBRARY})
-else()
-   message( "Could not find optional OpenCV Image Codecs Library" )
+    # Optional
+    FIND_OPENCV_LIBRARY(OPENCV_IMGCODECS_LIBRARY opencv_imgcodecs)
+    FIND_OPENCV_LIBRARY(OPENCV_CUDAARITHM_LIBRARY opencv_cudaarithm)
+    FIND_OPENCV_LIBRARY(OPENCV_CUDAIMGPROC_LIBRARY opencv_cudaimgproc)
+    FIND_OPENCV_LIBRARY(OPENCV_CUDEV_LIBRARY opencv_cudev)
+    FIND_OPENCV_LIBRARY(OPENCV_HIGHGUI_LIBRARY opencv_highgui)
+
+    set(OPENCV_GPU_FOUND "NO")
+    if (  OPENCV_CUDAARITHM_LIBRARY AND OPENCV_CUDAIMGPROC_LIBRARY AND OPENCV_CUDEV_LIBRARY)
+        set(OPENCV_GPU_FOUND "YES")
+        set(OPENCV_LIBRARIES ${OPENCV_LIBRARIES}
+                ${OPENCV_CUDAARITHM_LIBRARY}
+                ${OPENCV_CUDAIMGPROC_LIBRARY}
+                ${OPENCV_CUDEV_LIBRARY} )
+    else()
+        message( "Could not find optional OpenCV GPU (CUDA) Libraries. " )
+    endif()
+
+    set(OPENCV_IMGCODECS_FOUND "NO")
+    if(OPENCV_IMGCODECS_LIBRARY)
+        set(OPENCV_IMGCODECS_FOUND "YES")
+        set(OPENCV_LIBRARIES ${OPENCV_LIBRARIES} ${OPENCV_IMGCODECS_LIBRARY})
+    else()
+        message( "Could not find optional OpenCV Image Codecs Library" )
+    endif()
+
+    set(OPENCV_HIGHGUI_FOUND 0)
+    if(OPENCV_HIGHGUI_LIBRARY)
+        set(OPENCV_HIGHGUI_FOUND 1)
+        set(OPENCV_LIBRARIES ${OPENCV_LIBRARIES} ${OPENCV_HIGHGUI_LIBRARY})
+    else()
+        message( "Could not find optional OpenCV HighGui Library" )
+    endif()
+
+    # Unfortunately, OpenCV inter-library dependency is so complicated, we just list the libs twice:
+    set(OPENCV_LIBRARIES ${OPENCV_LIBRARIES} ${OPENCV_LIBRARIES} )
 endif()
 
 if(OPENCV_FOUND)
diff --git a/include/ossim/init/JsonConfig.h b/include/ossim/init/JsonConfig.h
index f20e584..8c2f065 100644
--- a/include/ossim/init/JsonConfig.h
+++ b/include/ossim/init/JsonConfig.h
@@ -164,20 +164,19 @@ public:
 
    bool operator==(const JsonParam& p) const { return (p._name == _name); }
 
-   void setValue(const Json::Value& json_node);
-   void setValue(void* value);
-   void resetValue();
-
    /** Outputs JSON to output stream provided */
    friend std::ostream& operator<<(std::ostream& out, const JsonParam& obj);
 
 private:
+   void setValue(void* value);
+   void resetValue();
 
    ossimString _name;
    ossimString _label;
    ossimString _descr;
    ParamType   _type;
    void*       _value;
+   std::vector<ossimString> _allowedValues; // only used for multiple-choice string parameters
 };
 
 
diff --git a/include/ossim/point_cloud/ossimPointBlock.h b/include/ossim/point_cloud/ossimPointBlock.h
index 22b1f7f..5f07ea7 100755
--- a/include/ossim/point_cloud/ossimPointBlock.h
+++ b/include/ossim/point_cloud/ossimPointBlock.h
@@ -26,9 +26,9 @@ class OSSIMDLLEXPORT ossimPointBlock: public ossimDataObject
 public:
    typedef std::vector< ossimRefPtr<ossimPointRecord> > PointList;
 
-   ossimPointBlock(ossimSource* owner=0, ossim_uint32 fields=0);
+   explicit ossimPointBlock(ossimSource* owner=0, ossim_uint32 fields=0);
 
-   virtual ~ossimPointBlock();
+   ~ossimPointBlock();
 
    /** Returns allocated size. The pointList may contain only null points if not assigned */
    virtual ossim_uint32 size() const { return (ossim_uint32)m_pointList.size(); }
@@ -80,7 +80,7 @@ public:
    virtual void initialize() {};
 
 protected:
-   ossimPointBlock(const ossimPointBlock& rhs);
+   ossimPointBlock(const ossimPointBlock& rhs) {}
    void scanForMinMax() const;
 
    ossimPointRecord m_nullPCR;
diff --git a/include/ossim/point_cloud/ossimPointCloudImageHandler.h b/include/ossim/point_cloud/ossimPointCloudImageHandler.h
index b9eda4b..3b7842a 100644
--- a/include/ossim/point_cloud/ossimPointCloudImageHandler.h
+++ b/include/ossim/point_cloud/ossimPointCloudImageHandler.h
@@ -69,8 +69,8 @@ public:
     *  corner of the tile to grab from the image.
     *  Satisfies pure virtual from TileSource class.
     */
-   virtual ossimRefPtr<ossimImageData> getTile(const  ossimIrect& rect,
-                                               ossim_uint32 resLevel=0);
+   ossimRefPtr<ossimImageData> getTile(const  ossimIrect& rect,
+                                       ossim_uint32 resLevel=0) override;
    
    /**
     * Method to get a tile.   
@@ -82,14 +82,14 @@ public:
     *  is undefined so caller should handle appropriately with makeBlank or
     * whatever.
     */
-   virtual bool getTile(ossimImageData* result, ossim_uint32 resLevel=0);
+   bool getTile(ossimImageData* result, ossim_uint32 resLevel=0) override;
    
    /**
     * @brief Gets bands.
     * Satisfies ossimImageSource::getNumberOfInputBands pure virtual.
     * @retrun Number of bands.
     */
-   virtual ossim_uint32 getNumberOfInputBands() const;
+   ossim_uint32 getNumberOfInputBands() const override;
 
    /**
     * @brief Gets lines.
@@ -98,7 +98,7 @@ public:
     * Default = 0
     * @return The number of lines for specified reduced resolution level.
     */
-   virtual ossim_uint32 getNumberOfLines(ossim_uint32 resLevel = 0) const;
+   ossim_uint32 getNumberOfLines(ossim_uint32 resLevel = 0) const override;
 
    /**
     * @brief Gets samples.
@@ -107,7 +107,7 @@ public:
     * Default = 0
     * @return The number of samples for specified reduced resolution level.
     */
-   virtual ossim_uint32 getNumberOfSamples(ossim_uint32 resLevel = 0) const;
+   ossim_uint32 getNumberOfSamples(ossim_uint32 resLevel = 0) const override;
 
    /**
     * @brief Gets tile width.
@@ -117,7 +117,7 @@ public:
     * returns the output tile width which can be different than the internal
     * image tile width on disk.
     */
-   virtual ossim_uint32 getImageTileWidth() const;
+   ossim_uint32 getImageTileWidth() const  override;
 
    /**
     * @brief Gets tile height.
@@ -127,16 +127,16 @@ public:
     * returns the output tile width which can be different than the internal
     * image tile width on disk.
     */
-   virtual ossim_uint32 getImageTileHeight() const;
+   ossim_uint32 getImageTileHeight() const override;
 
    /** @return The width of the output tile. */
-   virtual ossim_uint32 getTileWidth() const;
+   ossim_uint32 getTileWidth() const override;
    
    /** @returns The height of the output tile. */
-   virtual ossim_uint32 getTileHeight() const;
+   ossim_uint32 getTileHeight() const override;
 
    /** @return The output pixel type of the tile source. */
-   ossimScalarType getOutputScalarType() const;
+   ossimScalarType getOutputScalarType() const override;
 
    /**
     * @brief Gets entry list.
@@ -146,51 +146,51 @@ public:
     * will be needed to rasterize that data channel as well.
     * @param entryList This is the list to initialize with entry indexes.
     */
-   virtual void getEntryList(std::vector<ossim_uint32>& entryList) const;
+   void getEntryList(std::vector<ossim_uint32>& entryList) const override;
 
-   virtual void getEntryNames(std::vector<ossimString>& entryNames) const;
+   void getEntryNames(std::vector<ossimString>& entryNames) const override;
 
    /** @return The current entry number. */
-   virtual ossim_uint32 getCurrentEntry() const;
+   ossim_uint32 getCurrentEntry() const override;
 
    /**
     * @param entryIdx Entry number to select.
     * @return true if it was able to set the current entry and false otherwise.
     */
-   virtual bool setCurrentEntry(ossim_uint32 entryIdx);
+   bool setCurrentEntry(ossim_uint32 entryIdx) override;
 
    /** @return "point-cloud" */
-   virtual ossimString getShortName() const;
+   ossimString getShortName() const override;
    
    /** @return "ossim point cloud to image renderer" */
-   virtual ossimString getLongName()  const;
+   ossimString getLongName()  const override;
 
    /**
     * Returns the image geometry object associated with this tile source or
     * NULL if non defined.  The geometry contains full-to-local image
     * transform as well as projection (image-to-world).
     */
-   virtual ossimRefPtr<ossimImageGeometry> getImageGeometry();
+   ossimRefPtr<ossimImageGeometry> getImageGeometry() override;
 
    /** @return Min pixel value. */
-   virtual double getMinPixelValue(ossim_uint32 band=0) const;
+   double getMinPixelValue(ossim_uint32 band) const override;
 
    /** @return Min pixel value. */
-   virtual double getMaxPixelValue(ossim_uint32 band=0) const;
+   double getMaxPixelValue(ossim_uint32 band) const override;
 
    /** @return Min pixel value. */
-   virtual double getNullPixelValue(ossim_uint32 band=0) const;
+   double getNullPixelValue(ossim_uint32 band) const override;
 
    /** @return The total number of decimation levels. */
-   virtual ossim_uint32 getNumberOfDecimationLevels() const;
+   ossim_uint32 getNumberOfDecimationLevels() const override;
 
-   virtual bool saveState(ossimKeywordlist& kwl, const char* prefix=0) const;
+   bool saveState(ossimKeywordlist& kwl, const char* prefix) const override;
 
-   virtual bool loadState(const ossimKeywordlist& kwl, const char* prefix=0);
+   bool loadState(const ossimKeywordlist& kwl, const char* prefix) override;
 
-   virtual void getValidImageVertices(std::vector<ossimIpt>& validVertices,
-                                      ossimVertexOrdering ordering=OSSIM_CLOCKWISE_ORDER,
-                                      ossim_uint32 resLevel=0) const;
+   void getValidImageVertices(std::vector<ossimIpt>& validVertices,
+                              ossimVertexOrdering ordering,
+                              ossim_uint32 resLevel) const override;
 
    /**
     * The reader properties are:
@@ -201,8 +201,8 @@ public:
     * -- the active component ("component") as string with possible values
     *    "intensity", "highest", "lowest", "returns", or "rgb", respectively (case insensitive)
     */
-   void setProperty(ossimRefPtr<ossimProperty> property);
-   ossimRefPtr<ossimProperty> getProperty(const ossimString& name) const;
+   void setProperty(ossimRefPtr<ossimProperty> property) override;
+   ossimRefPtr<ossimProperty> getProperty(const ossimString& name) const override;
 
    /**
     * Permits backdoor for setting the input point cloud handler object. Useful for debug
@@ -223,7 +223,9 @@ protected:
       PcrBucket() : m_bucket(0), m_numSamples(0) {}
       PcrBucket(const ossim_float32* init_value, ossim_uint32 numBands);
       PcrBucket(const ossim_float32& R, const ossim_float32& G, const ossim_float32& B);
-      PcrBucket(const ossim_float32& init_value);
+
+      explicit PcrBucket(const ossim_float32& init_value);
+
       ~PcrBucket();
       ossim_float32* m_bucket;
       int m_numSamples;
diff --git a/include/ossim/point_cloud/ossimPointCloudUtilityFilter.h b/include/ossim/point_cloud/ossimPointCloudUtilityFilter.h
index a5fc3ce..7016e5f 100644
--- a/include/ossim/point_cloud/ossimPointCloudUtilityFilter.h
+++ b/include/ossim/point_cloud/ossimPointCloudUtilityFilter.h
@@ -20,46 +20,24 @@
 #include <vector>
 
 class ossimImageData;
-class ossimPointCloudUtil;
+class ossimPointCloudTool;
 
 class OSSIMDLLEXPORT ossimPointCloudUtilityFilter : public ossimImageSourceFilter
 {
 public:
-   ossimPointCloudUtilityFilter( ossimPointCloudUtil* pc_util);
+   ossimPointCloudUtilityFilter( ossimPointCloudTool* pc_util);
    virtual ~ossimPointCloudUtilityFilter() {}
 
-   virtual bool getTile(ossimImageData* result, ossim_uint32 resLevel=0);
+   virtual bool getTile(ossimImageData* result, ossim_uint32 resLevel);
    
    ossimScalarType getOutputScalarType() const { return OSSIM_FLOAT32; }
-;
+
    virtual ossim_uint32 getNumberOfOutputBands() const { return 1; }
 
    virtual ossimRefPtr<ossimImageGeometry> getImageGeometry();
 
 protected:
-   class PcrBucket
-   {
-   public:
-      PcrBucket() : m_bucket(0), m_numSamples(0) {}
-      PcrBucket(const ossim_float32* init_value, ossim_uint32 numBands);
-      PcrBucket(const ossim_float32& R, const ossim_float32& G, const ossim_float32& B);
-      PcrBucket(const ossim_float32& init_value);
-      ~PcrBucket();
-      ossim_float32* m_bucket;
-      int m_numSamples;
-   };
-
-   void initTile();
-
-   void addSample(std::map<ossim_int32, PcrBucket*>& accumulator,
-                  ossim_int32 index,
-                  const ossimPointRecord* sample);
-
-   void normalize(std::map<ossim_int32, PcrBucket*>& accumulator);
-
-   ossim_uint32 componentToFieldCode() const;
-
-   ossimRefPtr<ossimPointCloudUtil> m_util;
+   ossimRefPtr<ossimPointCloudTool> m_util;
 
    TYPE_DATA
 };
diff --git a/include/ossim/projection/ossimRpcModel.h b/include/ossim/projection/ossimRpcModel.h
index 62ab664..e9850a9 100644
--- a/include/ossim/projection/ossimRpcModel.h
+++ b/include/ossim/projection/ossimRpcModel.h
@@ -226,7 +226,7 @@ public:
     * Serialize to WorldView-style .RPB file to the stream provided.
     * Returns TRUE on successful write.
     * */
-   bool toRPB(std::ostream& out) const;
+   bool toRPB(std::ostream &out) const;
 
 protected:
    enum AdjustParamIndex
diff --git a/include/ossim/projection/ossimRpcSolver.h b/include/ossim/projection/ossimRpcSolver.h
index b8456cd..4b55d4d 100644
--- a/include/ossim/projection/ossimRpcSolver.h
+++ b/include/ossim/projection/ossimRpcSolver.h
@@ -83,7 +83,8 @@ public:
    ossimRpcSolver(bool useElevation=false,
                   bool useHeightAboveMSLFlag=false);
 
-   
+   virtual ~ossimRpcSolver(){}
+
    /**
     * This will convert any projector to an RPC model
     */
@@ -113,6 +114,13 @@ public:
               const double& pixel_tolerance=0.5);
 
    /**
+    * Performs iterative solve using the other solve method, but uses an image filename to
+    * initialize, and computes RPC over entire image rect.
+    */
+   bool solve(const ossimFilename& imageFilename,
+              const double& pixel_tolerance=0.5);
+
+   /**
     * takes associated image points and ground points
     * and solves the coefficents for the rational polynomial for
     * line and sample calculations from world points.
@@ -145,8 +153,6 @@ public:
    void setValidImageRect(const ossimIrect& imageRect);
 
 protected:
-	virtual ~ossimRpcSolver(){}
-   
    virtual void solveInitialCoefficients(NEWMAT::ColumnVector& coeff,
                                          const std::vector<double>& f,
                                          const std::vector<double>& x,
@@ -189,7 +195,6 @@ protected:
    ossimRefPtr<ossimImageGeometry> theRefGeom;
    ossimRefPtr<ossimRpcModel> theRpcModel;
 
-
 };
 
 #endif
diff --git a/include/ossim/support_data/ossimSrcRecord.h b/include/ossim/support_data/ossimSrcRecord.h
index 442acbd..0953ae9 100644
--- a/include/ossim/support_data/ossimSrcRecord.h
+++ b/include/ossim/support_data/ossimSrcRecord.h
@@ -107,6 +107,7 @@ public:
    const ossimFilename& getOverviewPath()  const { return m_overviewPath; }
    const ossimFilename& getHistogramPath() const { return m_histogramPath; }
    const ossimFilename& getMaskPath() const { return m_maskPath; }
+   const ossimFilename& getGeomPath() const { return m_geomPath; }
    
    void setFilename(const ossimFilename& f);          
    void setEntryIndex(ossim_int32 i);                 
@@ -114,8 +115,9 @@ public:
    void setMask(const ossimFilename& f)              { m_maskPath = f; }
    void setHistogram(const ossimFilename& f)         { m_histogramPath = f; }
    void setHistogramOp(const ossimString& s)         { m_histogramOp = s; }
+   void setGeom(const ossimFilename& f);
    void setBands(const std::vector<ossim_uint32>& v) { m_bandList = v; }
-   void setWeight(const double& weight)              {m_weight = weight; }
+   void setWeight(const double& weight)              { m_weight = weight; }
    void setRgbDataBool(bool isRgbData)               { m_isRgbData = isRgbData; }
 
    //! Sets supplementary data files dir. If the OVR and/or hist dirs are undefined, they are also
@@ -152,6 +154,7 @@ private:
    ossimFilename m_overviewPath;
    ossimFilename m_histogramPath;
    ossimFilename m_maskPath;
+   ossimFilename m_geomPath;
 
    //! The following data members allow users to render vector data
    bool m_isVectorData;
diff --git a/include/ossim/util/ossimChipperUtil.h b/include/ossim/util/ossimChipperUtil.h
index cdda53e..859f5a9 100644
--- a/include/ossim/util/ossimChipperUtil.h
+++ b/include/ossim/util/ossimChipperUtil.h
@@ -489,7 +489,8 @@ private:
     * @param chain Chain to set up.
     * @return true on success, false on error.
     */
-   bool setupChainHistogram( ossimRefPtr<ossimSingleImageChain>& chain) const;
+   bool setupChainHistogram( ossimRefPtr<ossimSingleImageChain>& chain, 
+                             std::shared_ptr<ossimSrcRecord> srcRecordPtr=0) const;
 
    /**
     * @brief Sets entry for a chain.
diff --git a/include/ossim/util/ossimImageUtil.h b/include/ossim/util/ossimImageUtil.h
index 0740114..de7912b 100644
--- a/include/ossim/util/ossimImageUtil.h
+++ b/include/ossim/util/ossimImageUtil.h
@@ -141,7 +141,7 @@ public:
    /**
     * @brief Sets key OVERVIEW_TYPE_KW.
     *
-    * Available types depens on plugins.  Know types:
+    * Available types depends on plugins.  Known types:
     * ossim_tiff_box ( defualt )
     * ossim_tiff_nearest
     * ossim_kakadu_nitf_j2k ( kakadu plugin )
diff --git a/include/ossim/util/ossimInfo.h b/include/ossim/util/ossimInfo.h
index f17a907..cbd073e 100644
--- a/include/ossim/util/ossimInfo.h
+++ b/include/ossim/util/ossimInfo.h
@@ -469,6 +469,16 @@ public:
     */
    std::ostream& outputHeight(const ossimGpt& gpt, std::ostream& out) const;
 
+   /** @brief Prints supported image file extensions to stdout. */
+   void printExtensions() const;
+
+   /**
+    * @brief Prints supported image file extensions to stream.
+    * @param out Output to write to out.
+    * @return stream
+    */
+   std::ostream& printExtensions(std::ostream& out) const;
+
    /** @brief Prints loaded plugins to stdout. */
    void printPlugins() const;
 
diff --git a/include/ossim/util/ossimPointCloudUtil.h b/include/ossim/util/ossimPointCloudTool.h
similarity index 60%
rename from include/ossim/util/ossimPointCloudUtil.h
rename to include/ossim/util/ossimPointCloudTool.h
index c2570dc..13dc474 100644
--- a/include/ossim/util/ossimPointCloudUtil.h
+++ b/include/ossim/util/ossimPointCloudTool.h
@@ -10,10 +10,8 @@
 #ifndef ossimPointCloudUtil_HEADER
 #define ossimPointCloudUtil_HEADER
 
-#include <ossim/base/ossimObject.h>
+#include <ossim/util/ossimTool.h>
 #include <ossim/base/ossimRefPtr.h>
-#include <ossim/base/ossimProcessInterface.h>
-#include <ossim/base/ossimListenerManager.h>
 #include <ossim/base/ossimFilename.h>
 #include <ossim/base/ossimIrect.h>
 #include <ossim/base/ossimArgumentParser.h>
@@ -25,41 +23,22 @@
 /**
  * Utility class for generating point-cloud-derived image products
  */
-class OSSIMDLLEXPORT ossimPointCloudUtil : public ossimObject,
-                                           public ossimProcessInterface,
-                                           public ossimListenerManager
+class OSSIMDLLEXPORT ossimPointCloudTool : public ossimTool
 {
    friend class ossimPointCloudUtilityFilter;
 
 public:
-   ossimPointCloudUtil();
-   virtual ~ossimPointCloudUtil();
+   ossimPointCloudTool();
+   ~ossimPointCloudTool();
 
-   /**
-    * Initializes from command line arguments.
-    */
-   bool initialize(ossimArgumentParser& ap);
+   bool initialize(ossimArgumentParser& ap) override;
+   void loadJSON(const Json::Value& json_request) override;
+   void saveJSON(Json::Value& json) const override;
+   virtual bool execute() override;
 
-   /*
-    * Initializes after parameter set-methods have been called (in lieu of argument parser init)
-    */
+protected:
    bool initialize();
-
-   /**
-    * Returns true if successful
-    */
-   virtual bool execute();
-
-   /**
-    * Sets the nominal output resolution in meters
-    */
    void setGSD(const double& meters_per_pixel);
-
-   virtual ossimObject* getObject() { return this; }
-   virtual const ossimObject* getObject() const  { return this; }
-   virtual ossimListenerManager* getManager()  { return this; };
-
-protected:
    void usage(ossimArgumentParser& ap);
    void addArguments(ossimArgumentParser& ap);
    bool loadPC();
diff --git a/src/base/ossimRectanglePartitioner.cpp b/src/base/ossimRectanglePartitioner.cpp
index 6d168fe..e7f9e23 100644
--- a/src/base/ossimRectanglePartitioner.cpp
+++ b/src/base/ossimRectanglePartitioner.cpp
@@ -19,7 +19,7 @@
 #include <ossim/base/ossimTrace.h>
 using namespace std;
 
-static ossimTrace traceDebug("ossimRectanglePartitioner:degug");
+static ossimTrace traceDebug("ossimRectanglePartitioner:debug");
 
 ossimRectanglePartitioner::ossimRectanglePartitioner()
 {
diff --git a/src/imaging/ossimFilterResampler.cpp b/src/imaging/ossimFilterResampler.cpp
index 81ef61e..6afc152 100644
--- a/src/imaging/ossimFilterResampler.cpp
+++ b/src/imaging/ossimFilterResampler.cpp
@@ -915,18 +915,16 @@ bool ossimFilterResampler::loadState(const ossimKeywordlist& kwl,
       theScaleFactor.y = ossimString(lookup).toDouble();
    }
 
-   ossimString minify;
    lookup = kwl.find(prefix, "minify_type");
    if (lookup)
    {
-      minify = lookup;
+      setMinifyFilterType(lookup);
    }
 
-   ossimString magnify;
    lookup = kwl.find(prefix, "magnify_type");
    if (lookup)
    {
-      magnify = lookup;
+      setMagnifyFilterType(lookup);
    }
 
    if(fabs(theScaleFactor.x) <= FLT_EPSILON)
@@ -941,9 +939,6 @@ bool ossimFilterResampler::loadState(const ossimKeywordlist& kwl,
    theInverseScaleFactor.x = 1.0/theScaleFactor.x;
    theInverseScaleFactor.y = 1.0/theScaleFactor.y;
    
-   setFilterType(getFilterType(minify),
-                 getFilterType(magnify));
-
    return true;
 }
 
diff --git a/src/imaging/ossimImageHandler.cpp b/src/imaging/ossimImageHandler.cpp
index aed5b1c..535e322 100755
--- a/src/imaging/ossimImageHandler.cpp
+++ b/src/imaging/ossimImageHandler.cpp
@@ -303,12 +303,14 @@ bool ossimImageHandler::initVertices(const char* file)
       kwl->add("connection_string", file, true);
       if (!instream)
       {
-         if(m_state) m_state->setValidVertices(kwl);
+         //if(m_state)
+         //   m_state->setValidVertices(kwl);
          return false; 
       } 
 
       kwl->parseStream(*instream);
-      if(m_state) m_state->setValidVertices(kwl);
+      if(m_state && kwl->getSize())
+         m_state->setValidVertices(kwl);
    }
    
    if (kwl->getErrorStatus() != ossimErrorCodes::OSSIM_OK)
@@ -843,6 +845,11 @@ bool ossimImageHandler::hasOverviews() const
 bool ossimImageHandler::openOverview(const ossimFilename& overview_file)
 {
    bool result = false;
+   if (traceDebug())
+   {
+      ossimNotify(ossimNotifyLevel_DEBUG)
+         << "ossimImageHandler::openOverview(overview_file): ...entered!";
+   }
    closeOverview();
 
    if (overview_file != theImageFile) // Make sure we don't open ourselves.
@@ -907,14 +914,11 @@ bool ossimImageHandler::openOverview(const ossimFilename& overview_file)
          event.setObjectList(theOverview.get());
          fireEvent(event);
       }
-      else
-      {
-         if(m_state)
-         {
-            // create a null state to save the fact that we did not find any overviews
-            m_state->setOverviewState(std::make_shared<ossim::ImageHandlerState>());
-         }
-      }
+   }
+   if (traceDebug())
+   {
+      ossimNotify(ossimNotifyLevel_DEBUG)
+         << "ossimImageHandler::openOverview(overview_file): ...leaving!";
    }
    
    return result;
@@ -949,8 +953,6 @@ bool ossimImageHandler::openOverview()
          if(theOverview)
          {
             result = true;
-
-            
             //---
             // Set the owner in case the overview reader needs to get something
             // from the it like min/max/null.
@@ -1019,7 +1021,6 @@ bool ossimImageHandler::openOverview()
             << "\n";
       }
    }
-
    if ( !result )
    {
       if (overviewFilename.empty() || (overviewFilename.exists() == false) )
@@ -1045,6 +1046,7 @@ bool ossimImageHandler::openOverview()
             {
                overviewFilename = theSupplementaryDirectory;
                overviewFilename = overviewFilename.dirCat( getFilename().file() );
+   
             }
 
             if ( getNumberOfEntries() > 1 )
@@ -1560,7 +1562,6 @@ void ossimImageHandler::setSupplementaryDirectory(const ossimFilename& dir)
       theSupplementaryDirectory = dir;
    else
       theSupplementaryDirectory = dir.path();
-
    // A change in supplementary directory presents an opportunity to find the OVR that could not be
    // opened previously, as well as other support data items:
    if (!theOverview.valid())
diff --git a/src/imaging/ossimImageSourceFilter.cpp b/src/imaging/ossimImageSourceFilter.cpp
index b4ba37f..bdc527b 100644
--- a/src/imaging/ossimImageSourceFilter.cpp
+++ b/src/imaging/ossimImageSourceFilter.cpp
@@ -17,7 +17,7 @@
 #include <ossim/base/ossimTrace.h>
 #include <ossim/base/ossimProperty.h>
  
-static ossimTrace traceDebug("ossimImageSourceFilter:degug");
+static ossimTrace traceDebug("ossimImageSourceFilter:debug");
 
 RTTI_DEF2(ossimImageSourceFilter, "ossimImageSourceFilter", ossimImageSource, ossimConnectableObjectListener)
 
diff --git a/src/imaging/ossimJpegTileSource.cpp b/src/imaging/ossimJpegTileSource.cpp
index 07c928a..a68633d 100644
--- a/src/imaging/ossimJpegTileSource.cpp
+++ b/src/imaging/ossimJpegTileSource.cpp
@@ -53,7 +53,7 @@ extern "C"
 
 RTTI_DEF1_INST(ossimJpegTileSource, "ossimJpegTileSource", ossimImageHandler)
 
-static ossimTrace traceDebug("ossimJpegTileSource:degug");  
+static ossimTrace traceDebug("ossimJpegTileSource:debug");  
 
 class ossimJpegTileSource::PrivateData
 {
diff --git a/src/imaging/ossimMetadataFileWriter.cpp b/src/imaging/ossimMetadataFileWriter.cpp
index 6368020..9f13fb6 100644
--- a/src/imaging/ossimMetadataFileWriter.cpp
+++ b/src/imaging/ossimMetadataFileWriter.cpp
@@ -27,7 +27,7 @@ RTTI_DEF3(ossimMetadataFileWriter,
           ossimProcessInterface,
           ossimConnectableObjectListener);
 
-static ossimTrace traceDebug("ossimMetadataFileWriter:degug");
+static ossimTrace traceDebug("ossimMetadataFileWriter:debug");
 
 ossimMetadataFileWriter::ossimMetadataFileWriter()
    :ossimConnectableObject(0),
diff --git a/src/imaging/ossimResampler.cpp b/src/imaging/ossimResampler.cpp
index ab2f213..bcc9596 100644
--- a/src/imaging/ossimResampler.cpp
+++ b/src/imaging/ossimResampler.cpp
@@ -454,12 +454,12 @@ void ossimResampler::resamplePartialTile(T,// not used
    ossim_int32 kernelHorizontalShift = (ossim_int32)(-theKernelWidth/2.0+evenKernelW);
    ossim_int32 kernelVerticalShift   = (ossim_int32)(-theKernelHeight/2.0+evenKernelH);
    
-   for (k = 0; k < maxOutputSize; k++)
+   for (k = 0; k < maxOutputSize; ++k)
    {
       Lx[k] = (ossim_int32)(scaledOriginShift.x+((k+origin.x)/
                                            theOutputToInputRatio.x));
    }
-   for (k = 0; k < maxOutputSize; k++)
+   for (k = 0; k < maxOutputSize; ++k)
    {
       Ly[k] = (ossim_int32)(scaledOriginShift.y+((k+origin.y)/
                                            theOutputToInputRatio.y));
@@ -472,17 +472,17 @@ void ossimResampler::resamplePartialTile(T,// not used
       T        maxPix    = static_cast<T>(input->getMaxPix(band));
       T        np        = static_cast<T>(input->getNullPix(band));
       
-      for (k = 0; k < out_height; k++)
+      for (k = 0; k < out_height; ++k)
       {
          ossim_int32 indexMod = (ossim_int32)fmod((k+origin.y), theOutputToInputRatio.y);
          if(indexMod >= theTableWidthY) indexMod = theTableWidthY - 1;
          if(indexMod <0) indexMod = 0;
-         for (j = 0; j < in_width; j++)
+         for (j = 0; j < in_width; ++j)
          {
             h[j] = 0.0;
             ossim_int32 count = 0;
             double lastValue = ossim::nan();
-            for (l = 0; l < theKernelHeight; l++)
+            for (l = 0; l < theKernelHeight; ++l)
             {
                ossim_int32 index = Ly[k] + l + kernelVerticalShift;
                if ((index >= 0) && (index < in_height))
@@ -530,7 +530,7 @@ void ossimResampler::resamplePartialTile(T,// not used
                h[j] = ossim::nan();
             }
          }
-         for (ossim_int32 m = 0; m < out_width; m++)
+         for (ossim_int32 m = 0; m < out_width; ++m)
          {
             double x = 0.0;
             ossim_int32 indexMod = (ossim_int32)fmod((m+origin.x), theOutputToInputRatio.x);
@@ -543,7 +543,7 @@ void ossimResampler::resamplePartialTile(T,// not used
             }
             else
             {
-               for (l = 0; l < theKernelWidth; l++)
+               for (l = 0; l < theKernelWidth; ++l)
                {
                   ossim_int32 index = Lx[m] + l + kernelHorizontalShift;
                   if ((index >= 0) && (index < in_width))
@@ -623,12 +623,12 @@ void ossimResampler::resampleFullTile(T,// not used
    ossim_int32 kernelHorizontalShift = (ossim_int32)(-theKernelWidth/2.0+evenKernelW);
    ossim_int32 kernelVerticalShift   = (ossim_int32)(-theKernelHeight/2.0+evenKernelH);
    
-   for (k = 0; k < maxOutputSize; k++)
+   for (k = 0; k < maxOutputSize; ++k)
    {
       Lx[k] = (ossim_int32)(scaledOriginShift.x+((k+origin.x)/
                                            theOutputToInputRatio.x));
    }
-   for (k = 0; k < maxOutputSize; k++)
+   for (k = 0; k < maxOutputSize; ++k)
    {
       Ly[k] = (ossim_int32)(scaledOriginShift.y+((k+origin.y)/
                                            theOutputToInputRatio.y));
@@ -640,15 +640,15 @@ void ossimResampler::resampleFullTile(T,// not used
       double  minPix    = static_cast<T>(input->getMinPix()[band]);
       double  maxPix    = static_cast<T>(input->getMaxPix()[band]);
       
-      for (k = 0; k < out_height; k++)
+      for (k = 0; k < out_height; ++k)
       {
          int indexMod = (int)fmod((k+origin.y), theOutputToInputRatio.y);
          if(indexMod >= theTableWidthY) indexMod = theTableWidthY - 1;
          if(indexMod <0) indexMod = 0;
-         for (j = 0; j < in_width; j++)
+         for (j = 0; j < in_width; ++j)
          {
             h[j] = 0.0;
-            for (l = 0; l < theKernelHeight; l++)
+            for (l = 0; l < theKernelHeight; ++l)
             {
                ossim_int32 index = Ly[k] + l + kernelVerticalShift;
                if ((index >= 0) && (index < in_height))
@@ -658,14 +658,14 @@ void ossimResampler::resampleFullTile(T,// not used
                }
             }
          }
-         for (ossim_int32 m = 0; m < out_width; m++)
+         for (ossim_int32 m = 0; m < out_width; ++m)
          {
             double x = 0.0;
             int indexMod = (int)fmod((m+origin.x), theOutputToInputRatio.x);
             if(indexMod >= theTableWidthX) indexMod = theTableWidthX-1;
             if(indexMod <0) indexMod = 0;
             
-            for (l = 0; l < theKernelWidth; l++)
+            for (l = 0; l < theKernelWidth; ++l)
             {
                ossim_int32 index = Lx[m] + l + kernelHorizontalShift;
                if ((index >= 0) && (index < in_width))
@@ -769,7 +769,7 @@ void ossimResampler::resampleTile(T,// not used
    long outputRectW         = outputRect.width();
    long resultOffset = (subRectUl.y - outputRectUl.y)*outputRectW + (subRectUl.x - outputRectUl.x);
 
-   for(ossim_uint32 band = 0; band < input->getNumberOfBands(); band++)
+   for(ossim_uint32 band = 0; band < input->getNumberOfBands(); ++band)
    {
       T* resultBuf       = static_cast<T*>(output->getBuf(band))+resultOffset;
       const T *sourceBuf = static_cast<T*>(dupIn->getBuf(band));
@@ -777,13 +777,13 @@ void ossimResampler::resampleTile(T,// not used
       ossimDpt end   = endSave;
       T np = (T)output->getNullPix(band);
                         
-      for(long y = 0; y < subRectH; y++)
+      for(long y = 0; y < subRectH; ++y)
       {
          double deltaX = (end.x - start.x)*stepSizeWidth;
          double deltaY = (end.y - start.y)*stepSizeHeight;
          ossimDpt pointXY = start;
          
-         for(long x = 0; x < subRectW; x++)
+         for(long x = 0; x < subRectW; ++x)
          {
             int xPixel = pointXY.x<0?(int)floor(pointXY.x):(int)pointXY.x;
             int yPixel = pointXY.y<0?(int)floor(pointXY.y):(int)pointXY.y;
@@ -868,7 +868,7 @@ void ossimResampler::resampleTileNearestNeighbor(T, // dummy template variable
    long outputRectW         = outputRect.width();
 
    long resultOffset = (subRectUl.y - outputRectUl.y)*outputRectW + (subRectUl.x - outputRectUl.x);
-   for(ossim_uint32 band = 0; band < input->getNumberOfBands(); band++)
+   for(ossim_uint32 band = 0; band < input->getNumberOfBands(); ++band)
    {
       T* resultBuf       = static_cast<T*>(output->getBuf(band))+resultOffset;
       const T *sourceBuf = static_cast<T*>(input->getBuf(band));
@@ -877,13 +877,13 @@ void ossimResampler::resampleTileNearestNeighbor(T, // dummy template variable
       T inNp  = (T)input->getNullPix(band);
       T outNp = (T)output->getNullPix(band);
                         
-      for(long y = 0; y < subRectH; y++)
+      for(long y = 0; y < subRectH; ++y)
       {
          double deltaX = (end.x - start.x)*stepSizeWidth;
          double deltaY = (end.y - start.y)*stepSizeHeight;
          ossimDpt pointXY = start;
          
-         for(long x = 0; x < subRectW; x++)
+         for(long x = 0; x < subRectW; ++x)
          {
             int xPixel = pointXY.x<0?(int)floor(pointXY.x):(int)pointXY.x;
             int yPixel = pointXY.y<0?(int)floor(pointXY.y):(int)pointXY.y;
@@ -1025,11 +1025,11 @@ void ossimResampler::generateWeightTable()
    case ossimResampler_NONE:
      {
        theResamplerType = ossimResampler_NEAREST_NEIGHBOR;
-       for (i = 0; i < theTableWidthY; i++)
+       for (i = 0; i < theTableWidthY; ++i)
          {
 	   theWeightTableY[0][i] = 1;
          }
-       for (i = 0; i < theTableWidthX; i++)
+       for (i = 0; i < theTableWidthX; ++i)
          {
 	   theWeightTableX[0][i] = 1;
          }
@@ -1037,11 +1037,11 @@ void ossimResampler::generateWeightTable()
      }
       case ossimResampler_NEAREST_NEIGHBOR:
       {         
-         for (i = 0; i < theTableWidthY; i++)
+         for (i = 0; i < theTableWidthY; ++i)
          {
             theWeightTableY[0][i] = 1;
          }
-         for (i = 0; i < theTableWidthX; i++)
+         for (i = 0; i < theTableWidthX; ++i)
          {
             theWeightTableX[0][i] = 1;
          }
@@ -1049,13 +1049,13 @@ void ossimResampler::generateWeightTable()
       }
       case ossimResampler_BILINEAR:
       {
-         for (i = 0; i < theTableWidthX; i++)
+         for (i = 0; i < theTableWidthX; ++i)
          {
             x = (double)i/(double)(theTableWidthX);
             theWeightTableX[0][i] = x;
             theWeightTableX[1][i] = 1-x;
          }
-         for (i = 0; i < theTableWidthY; i++)
+         for (i = 0; i < theTableWidthY; ++i)
          {
             x = (double)i/(double)(theTableWidthY);
             theWeightTableY[0][i] = x;
@@ -1065,7 +1065,7 @@ void ossimResampler::generateWeightTable()
       }
       case ossimResampler_BICUBIC:
       {         
-         for (i = 0; i < theTableWidthX; i++)
+         for (i = 0; i < theTableWidthX; ++i)
          {
             x = (double)i/(double)(theTableWidthX);
             theWeightTableX[0][i] = getCubicC0(x);
@@ -1073,7 +1073,7 @@ void ossimResampler::generateWeightTable()
             theWeightTableX[2][i] = getCubicC2(x);
             theWeightTableX[3][i] = getCubicC3(x);               
          }
-         for (i = 0; i < theTableWidthY; i++)
+         for (i = 0; i < theTableWidthY; ++i)
          {
             x = (double)i/(double)(theTableWidthY);
             theWeightTableY[0][i] = getCubicC0(x);
diff --git a/src/imaging/ossimSingleImageChain.cpp b/src/imaging/ossimSingleImageChain.cpp
index 261ddff..1480140 100644
--- a/src/imaging/ossimSingleImageChain.cpp
+++ b/src/imaging/ossimSingleImageChain.cpp
@@ -431,7 +431,25 @@ bool ossimSingleImageChain::addImageHandler(const ossimFilename& file, bool open
 
 bool ossimSingleImageChain::addImageHandler(const ossimSrcRecord& src)
 {
-   bool result = addImageHandler( src.getFilename() );
+   bool result = false;
+
+   close();
+   
+   // m_handler = ossimImageHandlerRegistry::instance()->open(file, true, openOverview);
+   m_handler = ossimImageHandlerRegistry::instance()->open(src.getAttributesKwl());
+   
+   if ( m_handler.valid() )
+   {
+      // Add to the chain.  Note: last is really first.
+      addLast( m_handler.get() );
+      
+      result = true;
+   }
+
+   return result;
+
+//   bool result = addImageHandler( src.getFilename() );
+#if 0  
    if (result)
    {
       //---
@@ -500,6 +518,7 @@ bool ossimSingleImageChain::addImageHandler(const ossimSrcRecord& src)
          }
       }
    }
+   #endif
    return result;
 }
 
diff --git a/src/imaging/ossimTiffOverviewBuilder.cpp b/src/imaging/ossimTiffOverviewBuilder.cpp
index 30229d6..82d1890 100644
--- a/src/imaging/ossimTiffOverviewBuilder.cpp
+++ b/src/imaging/ossimTiffOverviewBuilder.cpp
@@ -45,7 +45,7 @@ RTTI_DEF1(ossimTiffOverviewBuilder,
           "ossimTiffOverviewBuilder",
           ossimOverviewBuilderBase)
 
-static ossimTrace traceDebug("ossimTiffOverviewBuilder:degug");
+static ossimTrace traceDebug("ossimTiffOverviewBuilder:debug");
 
 // Property keywords.
 static const char COPY_ALL_KW[]           = "copy_all_flag";
diff --git a/src/imaging/ossimVertexExtractor.cpp b/src/imaging/ossimVertexExtractor.cpp
index 190213e..f2f7fb0 100644
--- a/src/imaging/ossimVertexExtractor.cpp
+++ b/src/imaging/ossimVertexExtractor.cpp
@@ -17,7 +17,7 @@ using namespace std;
 #include <ossim/base/ossimTrace.h>
 #include <ossim/base/ossimNotifyContext.h>
 
-static ossimTrace traceDebug("ossimVertexExtractor:degug");
+static ossimTrace traceDebug("ossimVertexExtractor:debug");
 
 RTTI_DEF2(ossimVertexExtractor, "ossimVertexExtractor",
           ossimSource, ossimProcessInterface);
diff --git a/src/init/JsonConfig.cpp b/src/init/JsonConfig.cpp
index 841a465..ea689f3 100644
--- a/src/init/JsonConfig.cpp
+++ b/src/init/JsonConfig.cpp
@@ -38,7 +38,8 @@ JsonParam::JsonParam(const JsonParam& copy)
    _name (copy._name),
    _descr (copy._descr),
    _type (copy._type),
-   _value (0)
+   _value (0),
+   _allowedValues (copy._allowedValues)
 {
    setValue(copy._value);
 }
@@ -115,6 +116,7 @@ bool JsonParam::loadJSON(const Json::Value& paramNode)
       _label = paramNode["label"].asString();
       _descr = paramNode["descr"].asString();
       Json::Value value = paramNode["value"];
+      Json::Value allowedValues = paramNode["allowedValues"];
 
       ossimString ptype = paramNode["type"].asString();
       if (ptype.empty() || _name.empty())
@@ -170,6 +172,11 @@ bool JsonParam::loadJSON(const Json::Value& paramNode)
             _type = JsonParam::STRING;
             string v = value.asString();
             setValue(&v);
+            if (!allowedValues.empty() && allowedValues.isArray())
+            {
+               for (const auto &allowedValue : allowedValues)
+                  _allowedValues.emplace_back(allowedValue.asString());
+            }
          }
       }
    }
@@ -225,6 +232,13 @@ void JsonParam::saveJSON(Json::Value& paramNode) const
       paramNode["type"] = "string";
       s = *(string*)_value;
       paramNode["value"] = s;
+      if (!_allowedValues.empty())
+      {
+         Json::Value allowedValues(Json::arrayValue);
+         for (const auto &allowedValue : _allowedValues)
+            allowedValues.append(allowedValue.c_str());
+         paramNode["allowedValues"] = allowedValues;
+      }
       break;
 
    case JsonParam::VECTOR:
@@ -234,6 +248,7 @@ void JsonParam::saveJSON(Json::Value& paramNode) const
          paramNode["value"][j] = v[j];
       break;
 
+   case UNASSIGNED:
    default:
       break;
    }
@@ -379,7 +394,7 @@ void JsonConfig::setParameter(const JsonParam& p)
 
 bool JsonConfig::paramExists(const char* paramName) const
 {
-   map<string, JsonParam>::const_iterator i = m_paramsMap.find(string(paramName));
+   auto i = m_paramsMap.find(string(paramName));
    if (i != m_paramsMap.end())
       return true;
    return false;
@@ -387,17 +402,14 @@ bool JsonConfig::paramExists(const char* paramName) const
 
 void JsonConfig::loadJSON(const Json::Value& json_node)
 {
-   Json::Value paramNode;
-
    // Support two forms: long (with full param descriptions and types), or short (just name: value)
    if (json_node.isArray())
    {
       // Long form:
-      for (unsigned int i=0; i<json_node.size(); ++i)
+      for (const auto &i : json_node)
       {
-         paramNode = json_node[i];
          JsonParam p;
-         if (p.loadJSON(paramNode))
+         if (p.loadJSON(i))
             setParameter(p);
       }
    }
@@ -405,13 +417,13 @@ void JsonConfig::loadJSON(const Json::Value& json_node)
    {
       // Short form expects a prior entry in the params map whose value will be overriden here:
       Json::Value::Members members = json_node.getMemberNames();
-      for (size_t i=0; i<members.size(); ++i)
+      for (auto &member : members)
       {
-         JsonParam& p = getParameter(members[i].c_str());
+         JsonParam& p = getParameter(member.c_str());
          if (p.name().empty())
          {
             ossimNotify(ossimNotifyLevel_WARN)<<"JsonConfig::loadJSON():  Attempted to override "
-                  "nonexistent parameter <"<< members[i] << ">. Ignoring request."<<endl;
+                  "nonexistent parameter <"<< member << ">. Ignoring request."<<endl;
             continue;
          }
          if (p.descr().contains("DEPRECATED"))
@@ -423,6 +435,7 @@ void JsonConfig::loadJSON(const Json::Value& json_node)
 
          // Create a full JSON representation of the named parameter from the default list, replace
          // its value, and recreate the parameter from the updated full JSON:
+         Json::Value paramNode;
          p.saveJSON(paramNode);
          paramNode["value"] = json_node[p.name().string()];
          p.loadJSON(paramNode);
@@ -433,12 +446,12 @@ void JsonConfig::loadJSON(const Json::Value& json_node)
 
 void JsonConfig::saveJSON(Json::Value& json_node) const
 {
-   Json::Value paramNode;
 
    map<string, JsonParam>::const_iterator param = m_paramsMap.begin();
    int entry = 0;
    while (param != m_paramsMap.end())
    {
+      Json::Value paramNode;
       param->second.saveJSON(paramNode);
       json_node[entry++] = paramNode;
       ++param;
diff --git a/src/point_cloud/ossimPointCloudImageHandler.cpp b/src/point_cloud/ossimPointCloudImageHandler.cpp
index 885d239..aea01ab 100644
--- a/src/point_cloud/ossimPointCloudImageHandler.cpp
+++ b/src/point_cloud/ossimPointCloudImageHandler.cpp
@@ -94,11 +94,11 @@ ossimPointCloudImageHandler::ossimPointCloudImageHandler()
    //---
    m_gsd.makeNan();
 
-   m_componentNames.push_back(INTENSITY_KW);
-   m_componentNames.push_back(HIGHEST_KW);
-   m_componentNames.push_back(LOWEST_KW);
-   m_componentNames.push_back(RETURNS_KW);
-   m_componentNames.push_back(RGB_KW);
+   m_componentNames.emplace_back(INTENSITY_KW);
+   m_componentNames.emplace_back(HIGHEST_KW);
+   m_componentNames.emplace_back(LOWEST_KW);
+   m_componentNames.emplace_back(RETURNS_KW);
+   m_componentNames.emplace_back(RGB_KW);
 }
 
 ossimPointCloudImageHandler::~ossimPointCloudImageHandler()
@@ -167,8 +167,8 @@ ossimRefPtr<ossimImageGeometry> ossimPointCloudImageHandler::getImageGeometry()
 
    theGeometry = new ossimImageGeometry();
    ossimString epsgCode ("EPSG:4326");
-   ossimMapProjection* proj = dynamic_cast<ossimMapProjection*>(
-         ossimEpsgProjectionFactory::instance()->createProjection(epsgCode));
+   ossimMapProjection* proj = dynamic_cast<ossimMapProjection*>( // NOLINT
+           ossimEpsgProjectionFactory::instance()->createProjection(epsgCode));
    if (!proj)
       return 0;
    theGeometry->setProjection(proj);
@@ -208,7 +208,7 @@ ossimRefPtr<ossimImageData> ossimPointCloudImageHandler::getTile(const ossimIrec
 
    // Image rectangle must be set prior to calling getTile.
    m_tile->setImageRectangle(tile_rect);
-   if (getTile(m_tile.get(), resLevel) == false)
+   if (!getTile(m_tile.get(), resLevel))
    {
       if (m_tile->getDataObjectStatus() != OSSIM_NULL)
          m_tile->makeBlank();
@@ -315,7 +315,7 @@ bool ossimPointCloudImageHandler::getTile(ossimImageData* result, ossim_uint32 r
    // Finished accumulating, need to normalize and fill the tile.
    // We must always blank out the tile as we may not have a point for every pixel.
    normalize(accumulator);
-   ossim_float32** buf = new ossim_float32*[numBands];
+   auto buf = new ossim_float32*[numBands];
    std::map<ossim_int32, PcrBucket*>::iterator accum_iter;
    ossim_float32 null_pixel = OSSIM_DEFAULT_NULL_PIX_FLOAT;
    result->setNullPix(null_pixel);
@@ -340,7 +340,7 @@ bool ossimPointCloudImageHandler::getTile(ossimImageData* result, ossim_uint32 r
    delete [] buf;
    buf = 0;
 
-   std::map<ossim_int32, PcrBucket*>::iterator pcr_iter = accumulator.begin();
+   auto pcr_iter = accumulator.begin();
    while (pcr_iter != accumulator.end())
    {
       delete pcr_iter->second;
@@ -361,7 +361,7 @@ void ossimPointCloudImageHandler::addSample(std::map<ossim_int32, PcrBucket*>& a
    //cout << "sample: "<<*sample<<endl;//TODO: REMOVE DEBUG
 
    // Search map for exisiting point in that location:
-   std::map<ossim_int32, PcrBucket*>::iterator iter = accumulator.find(index);
+   auto iter = accumulator.find(index);
    if (iter == accumulator.end())
    {
       // First hit. Initialize location with current sample:
@@ -420,7 +420,7 @@ void ossimPointCloudImageHandler::normalize(std::map<ossim_int32, PcrBucket*>& a
    if (m_activeComponent == RGB)
       numBands = 3;
 
-   std::map<ossim_int32, PcrBucket*>::iterator iter = accumulator.begin();
+   auto iter = accumulator.begin();
    ossim_float32 avg;
    while (iter != accumulator.end())
    {
@@ -510,7 +510,7 @@ void ossimPointCloudImageHandler::getEntryList(std::vector<ossim_uint32>& entryL
    entryList.clear();
    for (ossim_uint32 i = 0; i < m_componentNames.size(); i++)
    {
-      entryList.push_back(i);
+      entryList.emplace_back(i);
    }
 }
 
@@ -716,18 +716,18 @@ void ossimPointCloudImageHandler::getValidImageVertices(std::vector<ossimIpt>& v
    ossimGrect bounds;
    m_pch->getBounds(bounds);
    theGeometry->worldToLocal(bounds.ul(), r0Pt);
-   validVertices.push_back(r0Pt);
+   validVertices.emplace_back(r0Pt);
    theGeometry->worldToLocal(bounds.ur(), r0Pt);
-   validVertices.push_back(r0Pt);
+   validVertices.emplace_back(r0Pt);
    theGeometry->worldToLocal(bounds.lr(), r0Pt);
-   validVertices.push_back(r0Pt);
+   validVertices.emplace_back(r0Pt);
    theGeometry->worldToLocal(bounds.ll(), r0Pt);
-   validVertices.push_back(r0Pt);
+   validVertices.emplace_back(r0Pt);
 
    if (ordering == OSSIM_COUNTERCLOCKWISE_ORDER)
    {
       for (int i=3; i>=0; i--)
-         validVertices.push_back(validVertices[i]/divisor);
+         validVertices.emplace_back(validVertices[i]/divisor);
       validVertices.erase(validVertices.begin(), validVertices.begin()+4);
    }
 }
diff --git a/src/point_cloud/ossimPointCloudUtilityFilter.cpp b/src/point_cloud/ossimPointCloudUtilityFilter.cpp
index 2cf6e88..dd75ef7 100644
--- a/src/point_cloud/ossimPointCloudUtilityFilter.cpp
+++ b/src/point_cloud/ossimPointCloudUtilityFilter.cpp
@@ -14,12 +14,12 @@
 #include <ossim/imaging/ossimImageData.h>
 #include <ossim/imaging/ossimImageGeometry.h>
 #include <ossim/elevation/ossimElevManager.h>
-#include <ossim/util/ossimPointCloudUtil.h>
+#include <ossim/util/ossimPointCloudTool.h>
 
-RTTI_DEF1(ossimPointCloudUtilityFilter, "ossimPointCloudUtilityFilter", ossimImageSourceFilter);
+RTTI_DEF1(ossimPointCloudUtilityFilter, "ossimPointCloudUtilityFilter", ossimImageSourceFilter); // NOLINT
 
 
-ossimPointCloudUtilityFilter::ossimPointCloudUtilityFilter( ossimPointCloudUtil* pc_util)
+ossimPointCloudUtilityFilter::ossimPointCloudUtilityFilter( ossimPointCloudTool* pc_util)
 :  m_util (pc_util)
 {
 }
@@ -38,14 +38,14 @@ bool ossimPointCloudUtilityFilter::getTile(ossimImageData* result, ossim_uint32
    ossimRefPtr<ossimImageData> lowest = 0;
 
    // Fetch tile from inputs as needed:
-   if ((m_util->m_operation == ossimPointCloudUtil::HIGHEST_DEM) ||
-         (m_util->m_operation == ossimPointCloudUtil::HIGHEST_LOWEST))
+   if ((m_util->m_operation == ossimPointCloudTool::HIGHEST_DEM) ||
+         (m_util->m_operation == ossimPointCloudTool::HIGHEST_LOWEST))
    {
       m_util->m_pciHandler->setCurrentEntry(ossimPointCloudImageHandler::HIGHEST);
       highest = m_util->m_pciHandler->getTile(irect, resLevel);
    }
-   if ((m_util->m_operation == ossimPointCloudUtil::LOWEST_DEM) ||
-         (m_util->m_operation == ossimPointCloudUtil::HIGHEST_LOWEST))
+   if ((m_util->m_operation == ossimPointCloudTool::LOWEST_DEM) ||
+         (m_util->m_operation == ossimPointCloudTool::HIGHEST_LOWEST))
    {
       m_util->m_pciHandler->setCurrentEntry(ossimPointCloudImageHandler::LOWEST);
       lowest = m_util->m_pciHandler->getTile(irect, resLevel);
@@ -60,13 +60,13 @@ bool ossimPointCloudUtilityFilter::getTile(ossimImageData* result, ossim_uint32
          pt_l0 = ipt * (resLevel + 1);
          switch (m_util->m_operation)
          {
-         case ossimPointCloudUtil::HIGHEST_DEM:
+         case ossimPointCloudTool::HIGHEST_DEM:
             m_util->m_prodGeom->localToWorld(pt_l0, gpt);
             h = elevation->getHeightAboveEllipsoid(gpt);
             dh = highest->getPix(ipt) - h;
             break;
 
-         case ossimPointCloudUtil::HIGHEST_LOWEST:
+         case ossimPointCloudTool::HIGHEST_LOWEST:
             dh = highest->getPix(ipt) - lowest->getPix(ipt);
             break;
 
diff --git a/src/projection/ossimRpcModel.cpp b/src/projection/ossimRpcModel.cpp
index 96ca04d..38b561c 100644
--- a/src/projection/ossimRpcModel.cpp
+++ b/src/projection/ossimRpcModel.cpp
@@ -103,7 +103,7 @@ ossimRpcModel::ossimRpcModel()
       theCrtrackOffset(0.0),
       theIntrackScale (0.0),
       theCrtrackScale (0.0),
-      theCosMapRot    (0.0),
+      theCosMapRot    (1.0),
       theSinMapRot    (0.0),
       theBiasError    (0.0),
       theRandError    (0.0)
@@ -1493,7 +1493,7 @@ bool ossimRpcModel::toJSON(std::ostream& jsonStream) const
 #endif
 }
 
-bool ossimRpcModel::toRPB(ostream& out) const
+bool ossimRpcModel::toRPB(ostream &out) const
 {
    out<<"satId = \"NOT_ASSIGNED\";\n";
    out<<"bandId = \"NOT_ASSIGNED\";\n";
@@ -1535,5 +1535,7 @@ bool ossimRpcModel::toRPB(ostream& out) const
 
    out<<"END_GROUP = IMAGE\n";
    out<<"END;";
+
+   return true;
 }
 
diff --git a/src/projection/ossimRpcSolver.cpp b/src/projection/ossimRpcSolver.cpp
index 1c0c7ca..54032dd 100644
--- a/src/projection/ossimRpcSolver.cpp
+++ b/src/projection/ossimRpcSolver.cpp
@@ -5,23 +5,15 @@
 //
 //**************************************************************************************************
 
-#include <cstdlib>
-#include <ctime>
-#include <iomanip>
-#include <iostream>
-#include <iterator>
-
 #include <ossim/projection/ossimRpcSolver.h>
-#include <ossim/projection/ossimRpcModel.h>
-#include <ossim/projection/ossimProjection.h>
-#include <ossim/matrix/newmatap.h>
-#include <ossim/matrix/newmatio.h>
 #include <ossim/matrix/newmatnl.h>
-#include <ossim/matrix/newmatio.h>
 #include <ossim/elevation/ossimElevManager.h>
 #include <ossim/support_data/ossimNitfRpcBTag.h>
-#include <ossim/imaging/ossimImageGeometry.h>
-#include <ossim/base/ossim2dTo2dIdentityTransform.h>
+#include <ossim/imaging/ossimImageHandler.h>
+#include <ossim/imaging/ossimImageHandlerRegistry.h>
+
+using namespace ossim;
+using namespace std;
 
 static const ossim_uint32 STARTING_GRID_SIZE = 8;
 static const ossim_uint32 ENDING_GRID_SIZE = 64;
@@ -55,7 +47,7 @@ void ossimRpcSolver::solveCoefficients(const ossimDrect& imageBounds,
 
    std::vector<ossimGpt> groundPoints;
    std::vector<ossimDpt> imagePoints;
-   ossim_uint32 x,y,img_x, img_y;
+   ossim_uint32 x,y;
    ossimGpt gpt;
    ossimGpt defaultGround;
    if (ySamples <= 1)
@@ -308,10 +300,6 @@ bool ossimRpcSolver::solve(const ossimDrect& imageBounds,
    ossimDpt ul = imageBounds.ul();
    ossim_float64 w = imageBounds.width();
    ossim_float64 h = imageBounds.height();
-   ossimDpt gsd (geom->getMetersPerPixel());
-
-   double dxRms = 0;
-   double dyRms = 0;
    ossimDpt ipt, irpc;
    ossimGpt gpt;
 
@@ -415,6 +403,21 @@ bool ossimRpcSolver::solve(const ossimDrect& imageBounds,
    return converged;
 }
 
+bool ossimRpcSolver::solve(const ossimFilename& imageFilename,
+                             const double& pixel_tolerance)
+{
+   // Establish input geometry:
+   ossimRefPtr<ossimImageHandler> h = ossimImageHandlerRegistry::instance()->open(imageFilename);
+   if(!h.valid())
+      return false;
+
+   ossimRefPtr<ossimImageGeometry> geom = h->getImageGeometry();
+   ossimDrect imageRect (h->getBoundingRect());
+
+   return solve(imageRect, geom.get(), pixel_tolerance);
+}
+
+
 double ossimRpcSolver::getRmsError()const
 {
    return theMeanResidual;
diff --git a/src/reg/Image.cpp b/src/reg/Image.cpp
index 6fa6ad1..9097138 100644
--- a/src/reg/Image.cpp
+++ b/src/reg/Image.cpp
@@ -30,7 +30,8 @@ Image::Image(const std::string& imageId,
 }
 
 Image::Image(const Json::Value& json_node)
-:  m_entryIndex (0)
+:  m_entryIndex (0),
+   m_activeBand (1)
 {
    loadJSON(json_node);
 }
diff --git a/src/reg/TiePoint.cpp b/src/reg/TiePoint.cpp
index 8b0a885..c76ea44 100644
--- a/src/reg/TiePoint.cpp
+++ b/src/reg/TiePoint.cpp
@@ -81,7 +81,8 @@ void TiePoint::getImagePoint(unsigned int index,
 
    imageId = m_images[index]->getImageId();
    imagePoint = m_imagePoints[index];
-   cov = m_covariances[index];
+   if (m_covariances.size() > index)
+      cov = m_covariances[index];
 }
 
 void TiePoint::setImagePoint(std::shared_ptr<Image> image,
@@ -164,7 +165,7 @@ void TiePoint::loadJSON(const Json::Value& json_node)
    for (int i=0; i<imagePoints.size(); ++i)
    {
       const Json::Value& p = imagePoints[i];
-      if (!p || !(p["imageId"].isString()) || !(p["x"]) || !(p["y"]) || (p["covariance"].size()!=3))
+      if (!p || !(p["imageId"].isString()) || !(p["x"]) || !(p["y"]))
       {
          xmsg<<"Tiepoint JSON field \"imagePoints\" entry is ill-formed or not complete:\n"
                <<p.toStyledString()<<endl;
@@ -180,11 +181,14 @@ void TiePoint::loadJSON(const Json::Value& json_node)
       m_imagePoints.push_back(xy);
 
       const Json::Value& covariance = p["covariance"];
-      NEWMAT::SymmetricMatrix c (2);
-      c(1,1) = covariance[0].asDouble();
-      c(2,2) = covariance[1].asDouble();
-      c(1,2) = covariance[2].asDouble();
-      m_covariances.push_back(c);
+      if (covariance.size() == 3)
+      {
+         NEWMAT::SymmetricMatrix c(2);
+         c(1, 1) = covariance[0].asDouble();
+         c(2, 2) = covariance[1].asDouble();
+         c(1, 2) = covariance[2].asDouble();
+         m_covariances.push_back(c);
+      }
    }
 }
 
diff --git a/src/support_data/ossimERS.cpp b/src/support_data/ossimERS.cpp
index 07e2184..5525596 100644
--- a/src/support_data/ossimERS.cpp
+++ b/src/support_data/ossimERS.cpp
@@ -23,7 +23,7 @@
 #include <ossim/base/ossimKeywordNames.h>
 #include <ossim/base/ossimNotifyContext.h>
 
-static ossimTrace traceDebug("ossimERS:degug");
+static ossimTrace traceDebug("ossimERS:debug");
 
 
 ossimERS::ossimERS()
diff --git a/src/support_data/ossimSrcRecord.cpp b/src/support_data/ossimSrcRecord.cpp
index b947463..097b752 100644
--- a/src/support_data/ossimSrcRecord.cpp
+++ b/src/support_data/ossimSrcRecord.cpp
@@ -120,13 +120,21 @@ bool ossimSrcRecord::loadState(const ossimKeywordlist& kwl, const char* prefix)
    lookup = kwl.find(prefix, "ovr");
    if (!lookup.empty()) 
    {
-      m_overviewPath = ossimFilename(lookup);
-      m_attributesKwl.add(ossimKeywordNames::OVERVIEW_FILE_KW, m_overviewPath.chars());
+      setOverview(ossimFilename(lookup));
    }
    else
    {
       m_overviewPath.clear();
    }
+   lookup = kwl.find(prefix, "geom");
+   if (!lookup.empty()) 
+   {
+      setGeom(ossimFilename(lookup));
+   }
+   else
+   {
+      m_geomPath.clear();
+   }
 
    lookup = kwl.find(prefix, "mask");
    if (!lookup.empty()) 
@@ -266,12 +274,15 @@ bool ossimSrcRecord::loadState(const ossimKeywordlist& kwl, const char* prefix)
 void ossimSrcRecord::setSupportDir(const ossimFilename& f)
 {
    m_supportDir = f;
-   if (m_overviewPath.empty()) 
-      setOverview(m_supportDir);
+   m_attributesKwl.add("supplementary_directory", f.c_str());
+   // if (m_overviewPath.empty()) 
+   //    setOverview(m_supportDir);
    if (m_histogramPath.empty())
       m_histogramPath = m_supportDir;
    if (m_maskPath.empty())
       m_maskPath = m_supportDir;
+   // if(m_geomPath.empty())
+   //    m_geomPath = m_supportDir;
 }
 
 //*************************************************************************************************
@@ -300,4 +311,12 @@ void ossimSrcRecord::setOverview(const ossimFilename& f)
    m_overviewPath = f; 
    m_attributesKwl.add(ossimKeywordNames::OVERVIEW_FILE_KW, m_overviewPath.chars());
 }
+//*************************************************************************************************
+// METHOD
+//*************************************************************************************************
+void ossimSrcRecord::setGeom(const ossimFilename& f)          
+{ 
+   m_geomPath = f; 
+   m_attributesKwl.add(ossimKeywordNames::GEOM_FILE_KW, m_overviewPath.chars());
+}
 
diff --git a/src/util/ossimChipperUtil.cpp b/src/util/ossimChipperUtil.cpp
index b38913d..6d6d346 100644
--- a/src/util/ossimChipperUtil.cpp
+++ b/src/util/ossimChipperUtil.cpp
@@ -1536,27 +1536,19 @@ void ossimChipperUtil::addDemSources()
       ossimNotify(ossimNotifyLevel_DEBUG) << MODULE << " entered...\n";
    }
 
-   // Add the images from the options keyword list.
-   ossim_uint32 demCount = m_kwl->numberOf( DEM_KW.c_str() );
-   ossim_uint32 maxIndex = demCount + 100; // Allow for skippage in numbering.
-   ossim_uint32 foundRecords = 0;
-   ossim_uint32 i = 0;
-   while ( foundRecords < demCount )
-   {
-      ossimString key = DEM_KW;
-      key += ossimString::toString(i);
-      key += ".";
-      key += FILE_KW;
-      ossimFilename f = m_kwl->findKey( key.string() );
+   std::vector<ossimString> sortedList;
+   m_kwl->getSortedList(sortedList, DEM_KW);
+   for(auto record:sortedList)
+   {
+      ossimString key   = record + ".";
+      ossimString file  = key + FILE_KW;
+      ossimString entry = key + ossimKeywordNames::ENTRY_KW;
+      ossimFilename f   = m_kwl->findKey( file.string() );
       if ( f.size() )
       {
          // Look for the entry key, e.g. dem0.entry: 10
          ossim_uint32 entryIndex = 0;
-         key = DEM_KW;
-         key += ossimString::toString(i);
-         key += ".";
-         key += ossimKeywordNames::ENTRY_KW;
-         std::string value = m_kwl->findKey( key.string() );
+         std::string value = m_kwl->findKey( entry.string() );
          if ( value.size() )
          {
             entryIndex = ossimString(value).toUInt32();
@@ -1566,34 +1558,26 @@ void ossimChipperUtil::addDemSources()
             // Get global entry.  Set by "-e" on command line apps.
             entryIndex = getEntryNumber();
          }
-
-         addDemSource( f, entryIndex );
-         ++foundRecords;
+         ossimSrcRecord srcRecord;
+         srcRecord.setFilename(f);
+         srcRecord.setEntryIndex(entryIndex);
+         // addDemSource( f, entryIndex );
+         addDemSource( srcRecord );
       }
-      ++i;
-      if ( i >= maxIndex ) break;
    }
-
+   sortedList.clear();
    if ( m_srcKwl.valid() )
    {
       // Add stuff from src keyword list.
-      demCount = m_srcKwl->numberOf( DEM_KW.c_str() );
-      maxIndex = demCount + 100;
-      foundRecords = 0;
-      i = 0;
-      while ( foundRecords < demCount )
-      {
-         ossimString prefix = DEM_KW;
-         prefix += ossimString::toString(i);
-         prefix += ".";
+      m_srcKwl->getSortedList(sortedList, DEM_KW);
+      for(auto record:sortedList)
+      {
+         ossimString prefix = record+".";
          ossimSrcRecord src;
          if ( src.loadState( *(m_srcKwl.get()), prefix ) )
          {
             addDemSource(src);
-            ++foundRecords;
          }
-         ++i;
-         if ( i >= maxIndex ) break;
       }
    }
 
@@ -1653,64 +1637,34 @@ void ossimChipperUtil::addImgSources()
    {
       ossimNotify(ossimNotifyLevel_DEBUG) << MODULE << " entered...\n";
    }
-
-   ossim_uint32 imgCount = m_kwl->numberOf( IMG_KW.c_str() );
-   ossim_uint32 maxIndex = imgCount + 100; // Allow for skippage in numbering.
-   ossim_uint32 foundRecords = 0;
-   ossim_uint32 i = 0;
-   while ( foundRecords < imgCount )
+   std::vector<ossimString> sortedList;
+   m_kwl->getSortedList(sortedList, IMG_KW);
+   for(auto record:sortedList)
    {
-      ossimString key = IMG_KW;
-      key += ossimString::toString(i);
-      key += ".";
-      key += FILE_KW;
-      ossimFilename f = m_kwl->findKey( key.string() );
-      if ( f.size() )
+      ossimString fileKey  = record + "." + FILE_KW;
+      ossimFilename f = m_kwl->findKey( fileKey.string() );
+      if ( !f.empty())
       {
-         // Look for the entry key, e.g. image0.entry: 10
-         ossim_uint32 entryIndex = 0;
-         key = IMG_KW;
-         key += ossimString::toString(i);
-         key += ".";
-         key += ossimKeywordNames::ENTRY_KW;
-         std::string value = m_kwl->findKey( key.string() );
-         if ( value.size() )
-         {
-            entryIndex = ossimString(value).toUInt32();
-         }
-         else
+         ossimString imagePrefix = record+".";
+         std::shared_ptr<ossimSrcRecord> srcRecord = std::make_shared<ossimSrcRecord>();
+         if(srcRecord->loadState(*m_kwl, imagePrefix.c_str()))
          {
-            // Get global entry.  Set by "-e" on command line apps.
-            entryIndex = getEntryNumber();
+            addImgSource(*srcRecord);
          }
-         // Add it:
-         addImgSource(f, entryIndex );
-         ++foundRecords;
       }
-      ++i;
-      if ( i >= maxIndex ) break;
    }
-
+   sortedList.clear();
    if ( m_srcKwl.valid() )
    {
-      // Add stuff from src keyword list.
-      imgCount = m_srcKwl->numberOf( IMG_KW.c_str() );
-      maxIndex = imgCount + 100;
-      foundRecords = 0;
-      i = 0;
-      while ( foundRecords < imgCount )
-      {
-         ossimString prefix = IMG_KW;
-         prefix += ossimString::toString(i);
-         prefix += ".";
-         ossimSrcRecord src;
-         if ( src.loadState( *(m_srcKwl.get()), prefix ) )
+      m_srcKwl->getSortedList(sortedList, IMG_KW);
+      for(auto record:sortedList)
+      {
+         ossimString prefix = record+".";
+         std::shared_ptr<ossimSrcRecord> src = std::make_shared<ossimSrcRecord>();
+         if ( src->loadState( *(m_srcKwl.get()), prefix ) )
          {
-            addImgSource(src);
-            ++foundRecords;
+            addImgSource(*src);
          }
-         ++i;
-         if ( i >= maxIndex ) break;
       }
    }
 
@@ -2081,7 +2035,7 @@ ossimRefPtr<ossimSingleImageChain> ossimChipperUtil::createChain(const ossimSrcR
       // Histogram setup.
       if ( hasHistogramOperation() )
       {
-         setupChainHistogram( ic );
+         setupChainHistogram( ic , std::make_shared<ossimSrcRecord>(rec));
       }
       
       // Brightness constrast setup:
@@ -4224,7 +4178,8 @@ void ossimChipperUtil::addCrossHairAnnotation(
 
 } // End: ossimChipperUtil::addCrossHairAnnotations( ... )
 
-bool ossimChipperUtil::setupChainHistogram( ossimRefPtr<ossimSingleImageChain>& chain) const
+bool ossimChipperUtil::setupChainHistogram( ossimRefPtr<ossimSingleImageChain>& chain, 
+                                            std::shared_ptr<ossimSrcRecord> srcRecordPtr) const
 {
    static const char MODULE[] = "ossimChipperUtil::setupChainHistogram(chain)";
    if ( traceDebug() )
@@ -4259,15 +4214,24 @@ bool ossimChipperUtil::setupChainHistogram( ossimRefPtr<ossimSingleImageChain>&
             bool openedHistogram = false;
             if ( remapper->getHistogramFile() == ossimFilename::NIL )
             {
+               ossimFilename f;
+              if(srcRecordPtr)
+               {
+                  f = srcRecordPtr->getHistogramPath();
+               }
                // Open histogram file.
-               ossimFilename f = ih->getFilenameWithThisExtension( ossimString("his") );
-               if ( f.empty() || (f.exists() == false) )
+               if(f.empty() || !f.exists())
                {
-                  // For backward compatibility check if single entry and _e0.his
-                  f = ih->getFilenameWithThisExtension( ossimString("his"), true );
+                 f = ih->getFilenameWithThisExtension( ossimString("his") );
+                 if ( f.empty() || (f.exists() == false) )
+                 {
+                     // For backward compatibility check if single entry and _e0.his
+                     f = ih->getFilenameWithThisExtension( ossimString("his"), true );
+                     if(!f.exists()) f.clear();
+                 }
                }
 
-               if ( f.exists() )
+               if ( !f.empty() )
                {
                   openedHistogram = remapper->openHistogram( f );
                   if ( !openedHistogram && traceDebug() )
diff --git a/src/util/ossimInfo.cpp b/src/util/ossimInfo.cpp
index 6ff097d..9e02bf4 100644
--- a/src/util/ossimInfo.cpp
+++ b/src/util/ossimInfo.cpp
@@ -64,6 +64,7 @@ static const char DATUMS_KW[]               = "datums";
 static const char DEG2RAD_KW[]              = "deg2rad";
 static const char DUMP_KW[]                 = "dump";
 static const char DUMP_NO_OVERVIEWS_KW[]    = "dump_no_overviews";
+static const char EXTENSIONS_KW[]           = "extensions";
 static const char FACTORIES_KW[]            = "factories";
 static const char FACTORY_KEYWORD_LIST_KW[] = "factory_keyword_list";
 static const char FONTS_KW[]                = "fonts";
@@ -162,7 +163,9 @@ void ossimInfo::setUsage(ossimArgumentParser& ap)
 
    au->addCommandLineOption("--ecef2llh", "<X> <Y> <Z> in ECEF coordinates and returns latitude longitude height position.");
 
-   au->addCommandLineOption("-f", "<format> Will output the information specified format [KWL | XML].  Default is KWL.");   
+   au->addCommandLineOption("--extensions", "Prints list of supported image extensions.");
+
+   au->addCommandLineOption("-f", "<format> Will output the information specified format [KWL | XML].  Default is KWL.");
 
    au->addCommandLineOption("--factories", "<keyword_list_flag> Prints factory list.  If keyword_list_flag is true, the result of a saveState will be output for each object.");
 
@@ -420,6 +423,13 @@ bool ossimInfo::initialize(ossimArgumentParser& ap)
          }
       }
 
+      if( ap.read("--extensions") )
+      {
+         m_kwl.add( EXTENSIONS_KW, TRUE_KW );
+         if ( ap.argc() < 2 )
+            break;
+      }
+
       if( ap.read("-f", sp1) )
       {
          m_kwl.add( FORMAT_KW, ts1.c_str());
@@ -882,6 +892,7 @@ bool ossimInfo::execute()
             value = lookup;
             deg2rad( value.toFloat64() );
          }
+
          lookup = m_kwl.find(ECEF2LLH_KW);
          if(lookup)
          {
@@ -892,6 +903,17 @@ bool ossimInfo::execute()
             ecef2llh(ecefPoint, ossimNotify(ossimNotifyLevel_INFO));
          }
 
+         lookup = m_kwl.find(EXTENSIONS_KW);
+         if ( lookup )
+         {
+            ++consumedKeys;
+            value = lookup;
+            if ( value.toBool() )
+            {
+               printExtensions();
+            }
+         }
+
          lookup = m_kwl.find(FACTORIES_KW);
          if ( lookup )
          {
@@ -3029,6 +3051,31 @@ std::ostream& ossimInfo::outputHeight(const ossimGpt& gpt, std::ostream& out) co
    return out;
 }
 
+void ossimInfo::printExtensions() const
+{
+   printExtensions(ossimNotify(ossimNotifyLevel_INFO));
+}
+
+std::ostream& ossimInfo::printExtensions(std::ostream& out) const
+{
+   ossimImageHandlerFactoryBase::UniqueStringList extList;
+   ossimImageHandlerRegistry::instance()->getSupportedExtensions(extList);
+   const vector<ossimString>& list = extList.getList();
+
+   if (list.empty())
+   {
+      out << "No image file extensions handled. This should never happen!" << std::endl;
+      return out;
+   }
+
+   out<<"\nImage Entensions Supported:"<< endl;
+   for (const auto& extension : list)
+      out<<"  "<<extension<<endl;
+
+   out<<endl;
+   return out;
+}
+
 void ossimInfo::printPlugins() const
 {
    printPlugins(ossimNotify(ossimNotifyLevel_INFO));
diff --git a/src/util/ossimPointCloudUtil.cpp b/src/util/ossimPointCloudTool.cpp
similarity index 88%
rename from src/util/ossimPointCloudUtil.cpp
rename to src/util/ossimPointCloudTool.cpp
index f13aa34..3ce4f89 100644
--- a/src/util/ossimPointCloudUtil.cpp
+++ b/src/util/ossimPointCloudTool.cpp
@@ -10,7 +10,7 @@
 //*******************************************************************
 //  $Id$
 
-#include <ossim/util/ossimPointCloudUtil.h>
+#include <ossim/util/ossimPointCloudTool.h>
 #include <ossim/init/ossimInit.h>
 #include <ossim/base/ossimApplicationUsage.h>
 #include <ossim/base/ossimCommon.h>
@@ -24,20 +24,20 @@
 
 using namespace std;
 
-ossimPointCloudUtil::ossimPointCloudUtil()
+ossimPointCloudTool::ossimPointCloudTool()
 :  m_operation (LOWEST_DEM),
    m_gsd (0)
 {
 }
 
-ossimPointCloudUtil::~ossimPointCloudUtil()
+ossimPointCloudTool::~ossimPointCloudTool()
 {
    m_pcHandler = 0;
    m_prodGeom = 0;
    m_pcuFilter = 0;
 }
 
-void ossimPointCloudUtil::addArguments(ossimArgumentParser& ap)
+void ossimPointCloudTool::addArguments(ossimArgumentParser& ap)
 {
    // Set the general usage:
    ossimApplicationUsage* au = ap.getApplicationUsage();
@@ -61,7 +61,7 @@ void ossimPointCloudUtil::addArguments(ossimArgumentParser& ap)
          "in the ossimIndexToRgbLutFilter format and must handle the three output "
          "viewshed values (see --values option).");
    au->addCommandLineOption(
-         "--op",
+         "--method",
          "Specify the desired operation. Possible values are:\n"
          "  \"highest-dem\", \"lowest-dem\" (default), or \"highest-lowest\". \n"
          "Alternatively can be specified in shorthand as \"h-d\", \"l-d\", or \"h-l\", "
@@ -76,7 +76,7 @@ void ossimPointCloudUtil::addArguments(ossimArgumentParser& ap)
          "For engineering/debug purposes ");
 }
 
-void ossimPointCloudUtil::usage(ossimArgumentParser& ap)
+void ossimPointCloudTool::usage(ossimArgumentParser& ap)
 {
    // Add global usage options.
    ossimInit::instance()->addOptions(ap);
@@ -92,7 +92,7 @@ void ossimPointCloudUtil::usage(ossimArgumentParser& ap)
    << std::endl;
 }
 
-bool ossimPointCloudUtil::initialize(ossimArgumentParser& ap)
+bool ossimPointCloudTool::initialize(ossimArgumentParser& ap)
 {
    if ( (ap.argc() == 1) || ap.read("-h") || ap.read("--help") )
    {
@@ -112,7 +112,7 @@ bool ossimPointCloudUtil::initialize(ossimArgumentParser& ap)
    if ( ap.read("--lut", sp1) )
       m_lutFile = ts1;
 
-   if ( ap.read("--op", sp1) )
+   if ( ap.read("--method", sp1) )
    {
       if (ts1.contains("highest-dem") || ts1.contains("h-d"))
          m_operation = HIGHEST_DEM;
@@ -151,12 +151,17 @@ bool ossimPointCloudUtil::initialize(ossimArgumentParser& ap)
    return initialize();
 }
 
-bool ossimPointCloudUtil::initialize()
+void ossimPointCloudTool::loadJSON(const Json::Value &json_request)
+{
+
+}
+
+bool ossimPointCloudTool::initialize()
 {
    if (loadPC())
    {
       ossimNotify(ossimNotifyLevel_WARN)
-              << "ossimPointCloudUtil::initialize ERR: Cannot open PC file at <"<<m_pcFile
+              << "ossimPointCloudTool::initialize ERR: Cannot open PC file at <"<<m_pcFile
               <<">\n"<< endl;
       return false;
    }
@@ -168,14 +173,14 @@ bool ossimPointCloudUtil::initialize()
    return true;
 }
 
-bool ossimPointCloudUtil::loadPC()
+bool ossimPointCloudTool::loadPC()
 {
    // DEM provided as file on command line, reset the elev manager to use only this:
    m_pcHandler = ossimPointCloudHandlerRegistry::instance()->open(m_pcFile);
    if(!m_pcHandler.valid())
    {
       ossimNotify(ossimNotifyLevel_WARN)
-            << "ossimPointCloudUtil::initialize ERR: Cannot open PC file at <"<<m_pcFile
+            << "ossimPointCloudTool::initialize ERR: Cannot open PC file at <"<<m_pcFile
             <<">\n" << std::endl;
       return false;
    }
@@ -193,7 +198,7 @@ bool ossimPointCloudUtil::loadPC()
    return true;
 }
 
-bool ossimPointCloudUtil::loadDem()
+bool ossimPointCloudTool::loadDem()
 {
    // DEM provided as file on command line, reset the elev manager to use only this:
    ossimElevManager* elevMgr = ossimElevManager::instance();
@@ -217,7 +222,7 @@ bool ossimPointCloudUtil::loadDem()
    return true;
 }
 
-void ossimPointCloudUtil::setGSD(const double& meters_per_pixel)
+void ossimPointCloudTool::setGSD(const double& meters_per_pixel)
 {
    if (m_prodGeom->getAsMapProjection() && (meters_per_pixel > 0))
    {
@@ -226,7 +231,7 @@ void ossimPointCloudUtil::setGSD(const double& meters_per_pixel)
    }
 }
 
-bool ossimPointCloudUtil::execute()
+bool ossimPointCloudTool::execute()
 {
    // See if an LUT is requested:
    ossimImageSource* last_source = m_pcuFilter.get();
@@ -238,7 +243,7 @@ bool ossimPointCloudUtil::execute()
       lutSource = new ossimIndexToRgbLutFilter;
       if (!lutSource->loadState(lut_kwl))
       {
-         ossimNotify(ossimNotifyLevel_WARN) << "ossimViewshedUtil::writeFile() ERROR: The LUT "
+         ossimNotify(ossimNotifyLevel_WARN) << "ossimPointCloudTool::writeFile() ERROR: The LUT "
                "file <"<<m_lutFile<<"> could not be read. Ignoring remap request.\n"<< std::endl;
          lutSource = 0;
       }
@@ -264,3 +269,8 @@ bool ossimPointCloudUtil::execute()
 }
 
 
+void ossimPointCloudTool::saveJSON(Json::Value &json_request) const
+{
+
+}
+
diff --git a/src/util/ossimToolFactory.cpp b/src/util/ossimToolFactory.cpp
index 5ab8980..c52667a 100644
--- a/src/util/ossimToolFactory.cpp
+++ b/src/util/ossimToolFactory.cpp
@@ -17,6 +17,7 @@
 #include <ossim/util/ossimVerticesFinderTool.h>
 #include <ossim/util/ossimViewshedTool.h>
 #include <ossim/util/ossimSubImageTool.h>
+#include <ossim/util/ossimPointCloudTool.h>
 #if OSSIM_HAS_HDF5
 #include <ossim/hdf5/ossimHdf5Tool.h>
 #endif
@@ -74,6 +75,9 @@ ossimTool* ossimToolFactory::createTool(const std::string& argName) const
    if ((utilName == "subimage") || (argName == "ossimSubImageTool"))
       return new ossimSubImageTool;
 
+   if ((utilName == "pointcloud") || (argName == "ossimPointCloudTool"))
+      return new ossimPointCloudTool;
+
 #if OSSIM_HAS_HDF5
    if ((utilName == "hdf5") || (argName == "ossimHdf5Tool"))
       return new ossimHdf5Tool;
diff --git a/src/util/ossimViewshedTool.cpp b/src/util/ossimViewshedTool.cpp
index e5ab9cd..f0eec0a 100644
--- a/src/util/ossimViewshedTool.cpp
+++ b/src/util/ossimViewshedTool.cpp
@@ -472,7 +472,7 @@ bool ossimViewshedTool::computeViewshed()
    // Allocate the output image buffer:
    m_outBuffer = ossimImageDataFactory::instance()->create(0, OSSIM_UINT8, 1, m_aoiViewRect.width(),
                                                            m_aoiViewRect.height());
-   cerr<<"ossimViewshedUtil:"<<__LINE__<<endl;//TODO:remove debug
+
    ostringstream xmsg;
    if (!m_outBuffer.valid() || !m_memSource.valid())
    {
@@ -543,8 +543,8 @@ bool ossimViewshedTool::computeViewshed()
          if (m_radials[sector] == 0)
             continue;
 
-         SectorProcessorJob spj (this, sector, m_halfWindow);
-         spj.start();
+         std::shared_ptr<SectorProcessorJob> spj = std::make_shared<SectorProcessorJob>(this, sector, m_halfWindow);
+         spj->start();
 
          if (needsAborting())
             return false;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/ossim.git



More information about the Pkg-grass-devel mailing list