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 <[email protected]> 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 _______________________________________________ Pkg-grass-devel mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-grass-devel

