[Git][debian-gis-team/ossim][upstream] New upstream version 2.9.0
Bas Couwenberg
gitlab at salsa.debian.org
Mon Aug 12 15:27:12 BST 2019
Bas Couwenberg pushed to branch upstream at Debian GIS Project / ossim
Commits:
37826c36 by Bas Couwenberg at 2019-08-12T13:59:17Z
New upstream version 2.9.0
- - - - -
19 changed files:
- Jenkinsfile
- README.md
- + include/ossim/base/ossim2dTo2dCompositeTransform.h
- include/ossim/point_cloud/ossimPointCloudImageHandler.h
- include/ossim/projection/ossimQuickbirdRpcModel.h
- include/ossim/util/ossimPointCloudTool.h
- + include/ossim/util/ossimRemapTool.h
- + src/base/ossim2dTo2dCompositeTransform.cpp
- src/base/ossim2dTo2dTransformFactory.cpp
- src/point_cloud/ossimPointCloudImageHandler.cpp
- src/projection/ossimQuickbirdRpcModel.cpp
- src/util/ossimPointCloudTool.cpp
- + src/util/ossimRemapTool.cpp
- src/util/ossimTool.cpp
- src/util/ossimToolFactory.cpp
- src/vec/ossimVpfLibraryAttributeTableValidator.cpp
- src/vpfutil/vpfread.c
- test/src/util/CMakeLists.txt
- + test/src/util/ossim-remap-tool-test.cpp
Changes:
=====================================
Jenkinsfile
=====================================
@@ -144,8 +144,17 @@ node ("${BUILD_NODE}"){
sh """
export PATH=${ PATH }:/opt/HPE_Security/Fortify_SCA_and_Apps_17.20/bin
sourceanalyzer -64 -b ossimlabs -scan -f fortifyResults-ossim.fpr
- fortifyclient -url ${ HP_FORTIFY_URL } -authtoken ${ HP_FORTIFY_TOKEN } uploadFPR -file fortifyResults-ossim.fpr -project ossim -version 1.0
"""
+ archiveArtifacts "fortifyResults-ossim.fpr"
+ withCredentials([[$class: 'UsernamePasswordMultiBinding',
+ credentialsId: 'fortifyCredentials',
+ usernameVariable: 'HP_FORTIFY_USERNAME',
+ passwordVariable: 'HP_FORTIFY_PASSWORD']]) {
+ sh """
+ export PATH=${ PATH }:/opt/HPE_Security/Fortify_SCA_and_Apps_17.20/bin
+ fortifyclient -url ${ HP_FORTIFY_URL } -user "${ HP_FORTIFY_USERNAME }" -password "${ HP_FORTIFY_PASSWORD }" uploadFPR -file fortifyResults-ossim.fpr -project ossim -version 1.0
+ """
+ }
}
}
}
=====================================
README.md
=====================================
@@ -53,6 +53,8 @@ The following 3rd-party SDKs are needed in order to build the core ossim library
OpenThreads-devel
libjpeg-devel
libgeos-devel (on later Debian / Ubuntu versions, libgeos++-dev)
+
+(Mac users: use [MacPorts](https://github.com/macports/macports-base) to install dependencies)
Plugins will require additional 3rd-party packages.
=====================================
include/ossim/base/ossim2dTo2dCompositeTransform.h
=====================================
@@ -0,0 +1,100 @@
+//*******************************************************************
+//
+// License: MIT
+//
+// See LICENSE.txt file in the top level directory for more details.
+//
+// Description: Contains class definition for ossim2dTo2dCompositeTransform.
+//
+//*******************************************************************
+// $Id$
+#ifndef ossim2dTo2dCompositeTransform_HEADER
+#define ossim2dTo2dCompositeTransform_HEADER
+#include <ossim/base/ossim2dTo2dTransform.h>
+#include <ossim/base/ossimRefPtr.h>
+#include <vector>
+
+/**
+ * This is the identity transform and just passes the input to the output.
+ */
+class OSSIM_DLL ossim2dTo2dCompositeTransform : public ossim2dTo2dTransform
+{
+public:
+ typedef std::vector<ossimRefPtr<ossim2dTo2dTransform> > CompositeTransformList;
+
+ ossim2dTo2dCompositeTransform(const CompositeTransformList& compositeTransformList = CompositeTransformList());
+ ossim2dTo2dCompositeTransform(const ossim2dTo2dCompositeTransform& rhs);
+ virtual ~ossim2dTo2dCompositeTransform();
+ virtual ossimObject* dup()const;
+
+
+ void add(ossimRefPtr<ossim2dTo2dTransform> transform);
+ void clear();
+
+ const CompositeTransformList& getCompositeTransformList()const;
+
+ /**
+ * Will iterate through the list of transforms from index 0 ... n -1 calling
+ * the forward transform. The output of the previous is used as the input to the next
+ * transform.
+ */
+ virtual void forward(const ossimDpt& input,
+ ossimDpt& output) const;
+
+
+ /**
+ * will call the forward method with 2 arguments
+ */
+ virtual void forward(ossimDpt& /* modify_this */) const;
+
+ /**
+ * Will iterate through the transformation list in reverse order from
+ * n-1 ... 0 calling the inverse for each one. The output is passed in as input
+ * to the next transform.
+ */
+ virtual void inverse(const ossimDpt& input,
+ ossimDpt& output) const;
+
+ /**
+ * will call the inverse method with 2 arguments
+ */
+ virtual void inverse(ossimDpt& /* modify_this */) const;
+
+ /**
+ * Pass equality to the parent
+ */
+ virtual const ossim2dTo2dCompositeTransform& operator=(
+ const ossim2dTo2dCompositeTransform& rhs)
+ {
+ ossim2dTo2dTransform::operator =(rhs);
+
+ return *this;
+ }
+
+ /**
+ * Saves the state of the composite by iterating through all transformas and saving
+ * them to the keyword list with it's own prefix.
+ *
+ * values will be:
+ * <prefix>.object0
+ * <prefix>.object1
+ * <prefix>.object<n-1>
+ *
+ */
+ virtual bool saveState(ossimKeywordlist& kwl, const char* prefix=0)const;
+
+ /**
+ * Will laod the state of the object. Note, it will clear the list and then add
+ * all prefix found from the save state.
+ */
+ virtual bool loadState(const ossimKeywordlist& kwl, const char* prefix=0);
+
+protected:
+ /**
+ * Holds the list of transforms.
+ */
+ CompositeTransformList m_compositeTransforms;
+
+ TYPE_DATA
+};
+#endif
=====================================
include/ossim/point_cloud/ossimPointCloudImageHandler.h
=====================================
@@ -49,20 +49,20 @@ public:
* method or use the ossimImageHandler::open that takes a file name and an
* entry index.
*/
- virtual bool open();
+ virtual bool open() override;
/**
* @brief is open method.
* Satisfies ossimImageHandler::isOpen pure virtual.
* @return true if open, false if not.
*/
- virtual bool isOpen() const { return m_pch.valid(); }
+ virtual bool isOpen() const override { return m_pch.valid(); }
/**
* @brief Close method.
*/
- virtual void close();
+ virtual void close() override;
/**
* Returns a pointer to a tile given an origin representing the upper left
@@ -250,8 +250,6 @@ protected:
std::mutex m_mutex;
Components m_activeComponent;
std::vector<ossimString> m_componentNames;
-
- TYPE_DATA
};
#endif /* ossimPointCloudRenderer_HEADER */
=====================================
include/ossim/projection/ossimQuickbirdRpcModel.h
=====================================
@@ -34,7 +34,7 @@ class ossimQbTileFilesHandler;
*****************************************************************************/
class ossimQuickbirdRpcModel : public ossimRpcModel
{
- public:
+public:
ossimQuickbirdRpcModel();
ossimQuickbirdRpcModel(const ossimQuickbirdRpcModel &rhs);
@@ -64,9 +64,13 @@ class ossimQuickbirdRpcModel : public ossimRpcModel
return theSupportData.get();
}
+ /** Initializes this with contents of RPC file. IMPORTANT: This is not enough to fully initialize
+ * the model. The image size and reference (mid) point need to be set before calling this method
+ * so that the GSD is properly computed. A guesstimate of image size is made based
+ * on line/samp offset params, but this will probably be wrong. Returns TRUE if successful. */
bool parseRpcData(const ossimFilename &file);
- protected:
+protected:
bool parseNitfFile(const ossimFilename &file);
bool parseTiffFile(const ossimFilename &file);
bool parseMetaData(const ossimFilename &file);
@@ -84,7 +88,7 @@ class ossimQuickbirdRpcModel : public ossimRpcModel
ossimRefPtr<ossimQuickbirdMetaData> theSupportData;
std::shared_ptr<ossimQuickbirdRpcHeader> m_qbRpcHeader;
- TYPE_DATA
+TYPE_DATA
};
#endif
=====================================
include/ossim/util/ossimPointCloudTool.h
=====================================
@@ -36,6 +36,9 @@ public:
void saveJSON(Json::Value& json) const override;
virtual bool execute() override;
+ /** Used by ossimUtilityFactory */
+ static const char* DESCRIPTION;
+
protected:
bool initialize();
void setGSD(const double& meters_per_pixel);
=====================================
include/ossim/util/ossimRemapTool.h
=====================================
@@ -0,0 +1,59 @@
+//**************************************************************************************************
+//
+// OSSIM Open Source Geospatial Data Processing Library
+// See top level LICENSE.txt file for license information
+//
+//**************************************************************************************************
+
+#ifndef ossimRemapTool_HEADER
+#define ossimRemapTool_HEADER
+
+#include <ossim/base/ossimFilename.h>
+#include <ossim/base/ossimKeywordlist.h>
+#include <ossim/util/ossimChipProcTool.h>
+#include <ossim/base/ossimRefPtr.h>
+#include <ossim/imaging/ossimSingleImageChain.h>
+
+/*!
+ * ossimTool class for performing histo ans scalar-based remapping.
+ */
+class OSSIMDLLEXPORT ossimRemapTool : public ossimChipProcTool
+{
+public:
+ ossimRemapTool();
+
+ /** This constructor packages up all the remap functionality into one "call". There is no need to
+ * call execute() if this constructor is invoked. The remapped file will be accompanied by an
+ * OSSIM geom file that echoes the original input image geometry.
+ * @param inputFile The image file to be remapped.
+ * @param entry_index For multi-entry input files, specifies the entry to be remapped
+ * @param skipHistoStretch Set to true to bypass histogram stretch
+ * @param outputFile If left blank, the output will be "<inputFile>-remap.<ext>"
+ * @throws ossimException on error. Use ossimException::what() to get error description.
+ */
+ ossimRemapTool(const ossimFilename& inputFile,
+ int entryIndex=0,
+ bool doHistoStretch=true,
+ ossimFilename outputFile="");
+
+ ~ossimRemapTool();
+
+ virtual bool initialize(ossimArgumentParser& ap);
+
+ virtual ossimString getClassName() const { return "ossimRemapTool"; }
+
+ virtual bool execute();
+
+ /** Used by ossimUtilityFactory */
+ static const char* DESCRIPTION;
+
+protected:
+ virtual void setUsage(ossimArgumentParser& ap);
+ virtual void initProcessingChain();
+
+ bool m_doHistoStretch;
+ ossimFilename m_inputFilename;
+ uint32_t m_entry;
+};
+
+#endif
=====================================
src/base/ossim2dTo2dCompositeTransform.cpp
=====================================
@@ -0,0 +1,132 @@
+#include <ossim/base/ossim2dTo2dCompositeTransform.h>
+#include <ossim/base/ossimKeywordlist.h>
+#include <ossim/base/ossim2dTo2dTransformRegistry.h>
+
+RTTI_DEF1_INST(ossim2dTo2dCompositeTransform, "ossim2dTo2dCompositeTransform", ossim2dTo2dTransform);
+
+ossim2dTo2dCompositeTransform::ossim2dTo2dCompositeTransform(const CompositeTransformList& compositeTransformList )
+: m_compositeTransforms(compositeTransformList)
+{
+
+}
+
+ossim2dTo2dCompositeTransform::ossim2dTo2dCompositeTransform(const ossim2dTo2dCompositeTransform& rhs)
+:m_compositeTransforms(rhs.m_compositeTransforms)
+{
+
+}
+
+ossim2dTo2dCompositeTransform::~ossim2dTo2dCompositeTransform()
+{
+ clear();
+}
+
+ossimObject* ossim2dTo2dCompositeTransform::dup()const
+{
+ return new ossim2dTo2dCompositeTransform(*this);
+}
+
+
+void ossim2dTo2dCompositeTransform::add(ossimRefPtr<ossim2dTo2dTransform> transform)
+{
+ if(transform)
+ {
+ m_compositeTransforms.push_back(transform);
+ }
+}
+
+void ossim2dTo2dCompositeTransform::clear()
+{
+ m_compositeTransforms.clear();
+}
+
+const ossim2dTo2dCompositeTransform::CompositeTransformList& ossim2dTo2dCompositeTransform::getCompositeTransformList()const
+{
+ return m_compositeTransforms;
+}
+
+void ossim2dTo2dCompositeTransform::forward(const ossimDpt& input,
+ ossimDpt& output) const
+{
+ ossimDpt tempInput = input;
+ output = input;
+
+ for(auto transform:m_compositeTransforms)
+ {
+ transform->forward(tempInput, output);
+ tempInput=output;
+ }
+}
+
+/**
+ *
+ */
+void ossim2dTo2dCompositeTransform::forward(ossimDpt& modify_this) const
+{
+ forward(ossimDpt(modify_this), modify_this);
+}
+
+/**
+ * inverse transform just passes the point to the output.
+ */
+void ossim2dTo2dCompositeTransform::inverse(const ossimDpt& input,
+ ossimDpt& output) const
+{
+ ossimDpt tempInput = input;
+ output = input;
+
+ for(CompositeTransformList::const_reverse_iterator iter = m_compositeTransforms.rbegin();
+ iter != m_compositeTransforms.rend();
+ ++iter
+ )
+ {
+ (*iter)->inverse(tempInput, output);
+ tempInput = output;
+ }
+}
+
+/**
+ * inverse transform nothing is modified on the input point.
+ */
+void ossim2dTo2dCompositeTransform::inverse(ossimDpt& modify_this) const
+{
+ inverse(ossimDpt(modify_this), modify_this);
+}
+
+bool ossim2dTo2dCompositeTransform::saveState(ossimKeywordlist& kwl, const char* prefix)const
+{
+ bool result = ossim2dTo2dTransform::saveState(kwl, prefix);
+ ossim_uint64 idx = 0;
+
+ for(; idx < m_compositeTransforms.size();++idx)
+ {
+ ossimString newPrefix(prefix);
+
+ newPrefix += ossimString("object") +
+ ossimString::toString(idx) +
+ ossimString(".");
+ result &= m_compositeTransforms[idx]->saveState(kwl, newPrefix.c_str());
+ }
+
+ return result;
+}
+
+bool ossim2dTo2dCompositeTransform::loadState(const ossimKeywordlist& kwl, const char* prefix)
+{
+ bool result = ossim2dTo2dTransform::loadState(kwl, prefix);
+
+ std::vector<ossimString> prefixValues;
+ clear();
+ kwl.getSubstringKeyList(prefixValues, ossimString("^(")+ossimString(prefix)+"object[0-9]+.)");
+
+ for(auto newPrefix:prefixValues)
+ {
+ ossimRefPtr<ossim2dTo2dTransform> trans = ossim2dTo2dTransformRegistry::instance()->createTransform(kwl, newPrefix.c_str());
+ if(trans)
+ {
+ add(trans);
+ }
+ }
+
+ return result;
+}
=====================================
src/base/ossim2dTo2dTransformFactory.cpp
=====================================
@@ -12,6 +12,7 @@
#include <ossim/base/ossim2dBilinearTransform.h>
#include <ossim/base/ossim2dTo2dShiftTransform.h>
#include <ossim/base/ossim2dTo2dIdentityTransform.h>
+#include <ossim/base/ossim2dTo2dCompositeTransform.h>
#include <ossim/base/ossimKeywordNames.h>
#include <ossim/base/ossimKeywordlist.h>
#include <ossim/base/ossimRefPtr.h>
@@ -41,6 +42,10 @@ ossim2dTo2dTransform* ossim2dTo2dTransformFactory::createTransform(const ossimSt
{
result = new ossim2dTo2dIdentityTransform();
}
+ else if(name == STATIC_TYPE_NAME(ossim2dTo2dCompositeTransform))
+ {
+ result = new ossim2dTo2dCompositeTransform();
+ }
return result;
}
@@ -63,4 +68,6 @@ void ossim2dTo2dTransformFactory::getTypeNameList(std::vector<ossimString>& type
typeList.push_back(STATIC_TYPE_NAME(ossim2dBilinearTransform));
typeList.push_back(STATIC_TYPE_NAME(ossim2dTo2dShiftTransform));
typeList.push_back(STATIC_TYPE_NAME(ossim2dTo2dIdentityTransform));
+ typeList.push_back(STATIC_TYPE_NAME(ossim2dTo2dCompositeTransform));
+
}
=====================================
src/point_cloud/ossimPointCloudImageHandler.cpp
=====================================
@@ -27,8 +27,6 @@
#include <ossim/imaging/ossimImageDataFactory.h>
#include <ossim/projection/ossimEpsgProjectionFactory.h>
-RTTI_DEF1(ossimPointCloudImageHandler, "ossimPointCloudImageHandler", ossimImageHandler);
-
static ossimTrace traceDebug("ossimPointCloudImageHandler:debug");
static const char* GSD_FACTOR_KW = "gsd_factor";
static const char* COMPONENT_KW = "component";
=====================================
src/projection/ossimQuickbirdRpcModel.cpp
=====================================
@@ -297,6 +297,9 @@ bool ossimQuickbirdRpcModel::parseRpcData(const ossimFilename &base_name)
{
ossimFilename rpcFile(base_name);
+ // Make the gsd nan so it gets computed.
+ theGSD.makeNan();
+
// There are three possibilities for RPC data files: either each image file has its own RPC data
// file, or a single RPC file is provided for a multi-tile scene.
while (1)
@@ -348,6 +351,15 @@ bool ossimQuickbirdRpcModel::parseRpcData(const ossimFilename &base_name)
theRandError = m_qbRpcHeader->theErrRand;
theImageID = rpcFile.fileNoExtension();
+ if (theImageSize.length() == 0)
+ {
+ theImageSize.x = 2 * (int) theSampOffset;
+ theImageSize.y = 2 * (int) theLineOffset;
+ theRefImgPt = ossimDpt(theSampOffset, theLineOffset);
+ }
+
+ finishConstruction();
+
return true;
}
=====================================
src/util/ossimPointCloudTool.cpp
=====================================
@@ -24,6 +24,9 @@
using namespace std;
+const char* ossimPointCloudTool::DESCRIPTION =
+ "Utility class for generating point-cloud-derived image products.";
+
ossimPointCloudTool::ossimPointCloudTool()
: m_operation (LOWEST_DEM),
m_gsd (0)
=====================================
src/util/ossimRemapTool.cpp
=====================================
@@ -0,0 +1,210 @@
+//**************************************************************************************************
+//
+// OSSIM Open Source Geospatial Data Processing Library
+// See top level LICENSE.txt file for license information
+//
+// Author: oscar.kramer at maxar.com
+//
+//**************************************************************************************************
+
+#include <ossim/util/ossimRemapTool.h>
+#include <ossim/init/ossimInit.h>
+#include <ossim/base/ossimApplicationUsage.h>
+#include <ossim/base/ossimApplicationUsage.h>
+#include <ossim/base/ossimNotify.h>
+#include <ossim/base/ossimKeywordNames.h>
+#include <ossim/base/ossimException.h>
+#include <ossim/imaging/ossimBandMergeSource.h>
+#include <ossim/imaging/ossimHistogramRemapper.h>
+#include <ossim/base/ossimMultiResLevelHistogram.h>
+#include <ossim/base/ossimMultiBandHistogram.h>
+#include <ossim/imaging/ossimImageHistogramSource.h>
+#include <iostream>
+#include <ossim/imaging/ossimHistogramWriter.h>
+#include <ossim/base/ossimStdOutProgress.h>
+#include <ossim/imaging/ossimImageHandlerRegistry.h>
+
+using namespace std;
+
+const char* ossimRemapTool::DESCRIPTION =
+ "Performs remap to 8-bit including optional histogram stretch and saves the corresponding external geometry file.";
+
+ossimRemapTool::ossimRemapTool()
+ : m_doHistoStretch(true),
+ m_entry(0)
+{
+ theStdOutProgress.setFlushStreamFlag(true);
+}
+
+ossimRemapTool::ossimRemapTool(const ossimFilename& inputFile,
+ int entryIndex,
+ bool doHistoStretch,
+ ossimFilename outputFile)
+ : m_inputFilename (inputFile),
+ m_entry (entryIndex),
+ m_doHistoStretch(doHistoStretch)
+{
+ m_productFilename = outputFile;
+ theStdOutProgress.setFlushStreamFlag(true);
+
+ initProcessingChain();
+
+ if (!execute())
+ throw ossimException("Error encountered writing remap image.");
+}
+
+ossimRemapTool::~ossimRemapTool()
+{
+}
+
+void ossimRemapTool::setUsage(ossimArgumentParser& ap)
+{
+ // Add options.
+ ossimApplicationUsage* au = ap.getApplicationUsage();
+ ossimString usageString = ap.getApplicationName();
+ usageString += " remap [options] <input-image> [<remap-out-image>]";
+ au->setCommandLineUsage(usageString);
+
+ // Set the command line options:
+ au->setDescription(DESCRIPTION);
+
+ // Base class has its own:
+ ossimTool::setUsage(ap);
+
+ au->addCommandLineOption("-e, --entry", "<entry> For multi image handlers which entry do you wish to extract. For list of entries use: \"ossim-info -i <your_image>\" ");
+ au->addCommandLineOption("-n, --no-histo", "Optionally bypass histogram-stretch. ");
+}
+
+bool ossimRemapTool::initialize(ossimArgumentParser& ap)
+{
+ if (!ossimTool::initialize(ap))
+ return false;
+ if (m_helpRequested)
+ return true;
+
+ ossimString ts1;
+ ossimArgumentParser::ossimParameter sp1 (ts1);
+
+ if ( ap.read("-e", sp1) || ap.read("--entry", sp1) )
+ m_entry = ts1.toUInt32();
+
+ if ( ap.read("--no-histo") || ap.read("-n"))
+ m_doHistoStretch = false;
+
+ // Determine input filename:
+ if ( ap.argc() > 1 )
+ m_inputFilename = ap[1];
+
+ if (!m_inputFilename.isReadable())
+ {
+ ossimNotify(ossimNotifyLevel_FATAL)<<"ossimRemapTool::initialize() Input filename <"
+ <<m_inputFilename<<"> was not specified or is not "
+ <<"readable. Try again.\n"<<endl;
+ return false;
+ }
+
+ // Establish output filename:
+ if ( ap.argc() > 2 )
+ {
+ m_productFilename = ap[2];
+ cout<<m_inputFilename<<endl;
+ }
+ try
+ {
+ initProcessingChain();
+ }
+ catch (ossimException& xe)
+ {
+ ossimNotify(ossimNotifyLevel_FATAL)<<xe.what()<<endl;
+ return false;
+ }
+
+ return true;
+}
+
+void ossimRemapTool::initProcessingChain()
+{
+ ostringstream errMsg ("ossimRemapTool::initProcessingChain() ERROR: ");
+
+ ossimRefPtr<ossimImageHandler> handler =
+ ossimImageHandlerRegistry::instance()->open(m_inputFilename);
+ if (!handler)
+ {
+ errMsg<<"Could not open input image file at <"<<m_inputFilename<<">.";
+ throw ossimException(errMsg.str());
+ }
+ if (m_entry)
+ handler->setCurrentEntry(m_entry);
+ m_procChain->add(handler.get());
+ m_geom = handler->getImageGeometry();
+
+ // Add histogram remapper if requested:
+ if (m_doHistoStretch)
+ {
+ ossimRefPtr<ossimMultiResLevelHistogram> histogram = handler->getImageHistogram();
+ if (!histogram)
+ {
+ // Need to create a histogram:
+ ossimRefPtr<ossimImageHistogramSource> histoSource = new ossimImageHistogramSource;
+ ossimRefPtr<ossimHistogramWriter> writer = new ossimHistogramWriter;
+ histoSource->connectMyInputTo(0, handler.get());
+ histoSource->enableSource();
+ writer->connectMyInputTo(0, histoSource.get());
+ ossimFilename histoFile;
+ histoFile = handler->getFilenameWithThisExtension(ossimString("his"));
+ writer->setFilename(histoFile);
+ writer->addListener(&theStdOutProgress);
+ writer->execute();
+ histogram = handler->getImageHistogram();
+ if (!histogram)
+ {
+ errMsg<<"Could not create histogram from <"<<histoFile<<">.";
+ throw ossimException(errMsg.str());
+ }
+ }
+
+ // Ready the histogram object in the processing chain:
+ ossimRefPtr<ossimHistogramRemapper> histogramRemapper = new ossimHistogramRemapper();
+ histogramRemapper->setEnableFlag(true);
+ histogramRemapper->setStretchMode( ossimHistogramRemapper::LINEAR_AUTO_MIN_MAX );
+ histogramRemapper->setHistogram(histogram);
+ m_procChain->add(histogramRemapper.get());
+ }
+
+ // Add scalar remapper:
+ ossimRefPtr<ossimScalarRemapper> scalarRemapper = new ossimScalarRemapper();
+ scalarRemapper->setOutputScalarType(OSSIM_UINT8);
+ m_procChain->add(scalarRemapper.get());
+
+ m_procChain->initialize();
+}
+
+bool ossimRemapTool::execute()
+{
+ if (m_productFilename.empty())
+ {
+ m_productFilename = m_inputFilename.fileNoExtension() + "-remap";
+ m_productFilename.setExtension(m_inputFilename.ext());
+ }
+
+ m_geom->getBoundingRect(m_aoiViewRect);
+
+ // Parent class has service to create writer:
+ m_writer = newWriter();
+ m_writer->connectMyInputTo(0, m_procChain.get());
+
+ // Add a listener to get percent complete.
+ m_writer->addListener(&theStdOutProgress);
+
+ // Write the file and external geometry:
+ if(!m_writer->execute())
+ return false;
+
+ if (!m_writer->writeExternalGeometryFile())
+ return false;
+
+ ossimNotify(ossimNotifyLevel_INFO)<<"Wrote product image to <"<<m_productFilename<<">"<<endl;
+
+ return true;
+}
+
=====================================
src/util/ossimTool.cpp
=====================================
@@ -58,10 +58,10 @@ void ossimTool::setUsage(ossimArgumentParser& ap)
bool ossimTool::initialize(ossimArgumentParser& ap)
{
m_helpRequested = false;
+ setUsage(ap);
if (ap.read("-h") || ap.read("--help") )
{
// Write usage.
- setUsage(ap);
ap.getApplicationUsage()->write(ossimNotify(ossimNotifyLevel_INFO));
m_helpRequested = true;
return true;
=====================================
src/util/ossimToolFactory.cpp
=====================================
@@ -18,6 +18,7 @@
#include <ossim/util/ossimViewshedTool.h>
#include <ossim/util/ossimSubImageTool.h>
#include <ossim/util/ossimPointCloudTool.h>
+#include <ossim/util/ossimRemapTool.h>
#if OSSIM_HAS_HDF5
#include <ossim/hdf5/ossimHdf5Tool.h>
#endif
@@ -78,6 +79,9 @@ ossimTool* ossimToolFactory::createTool(const std::string& argName) const
if ((utilName == "pointcloud") || (argName == "ossimPointCloudTool"))
return new ossimPointCloudTool;
+ if ((utilName == "remap") || (argName == "ossimRemapTool"))
+ return new ossimRemapTool;
+
#if OSSIM_HAS_HDF5
if ((utilName == "hdf5") || (argName == "ossimHdf5Tool"))
return new ossimHdf5Tool;
@@ -98,6 +102,8 @@ void ossimToolFactory::getCapabilities(std::map<std::string, std::string>& capab
capabilities.insert(pair<string, string>("vertices", ossimVerticesFinderTool::DESCRIPTION));
capabilities.insert(pair<string, string>("bandmerge", ossimBandMergeTool::DESCRIPTION));
capabilities.insert(pair<string, string>("subimage", ossimSubImageTool::DESCRIPTION));
+ capabilities.insert(pair<string, string>("pointcloud", ossimPointCloudTool::DESCRIPTION));
+ capabilities.insert(pair<string, string>("remap", ossimRemapTool::DESCRIPTION));
#if OSSIM_HAS_HDF5
capabilities.insert(pair<string, string>("hdf5", ossimHdf5Tool::DESCRIPTION));
#endif
@@ -122,6 +128,8 @@ void ossimToolFactory::getTypeNameList(vector<ossimString>& typeList) const
typeList.push_back("ossimVerticesFinderUtil");
typeList.push_back("ossimBandMergeUtil");
typeList.push_back("ossimSubImageTool");
+ typeList.push_back("ossimPointCloudTool");
+ typeList.push_back("ossimRemapTool");
#if OSSIM_HAS_HDF5
typeList.push_back("ossimHdf5Tool");
#endif
=====================================
src/vec/ossimVpfLibraryAttributeTableValidator.cpp
=====================================
@@ -3,12 +3,6 @@
bool ossimVpfLibraryAttributeTableValidator::isValid(ossimVpfTable& aTable)const
{
- // make sure the table is not null
- if(&aTable == NULL)
- {
- return false;
- }
-
// and make sure that the table is not closed
if(aTable.isClosed())
{
=====================================
src/vpfutil/vpfread.c
=====================================
@@ -124,7 +124,7 @@ static char * get_line (FILE *fp)
return (char *) NULL ;
}
}
- if ( ( CurrentChar == (ossim_int32) LINE_CONTINUE ) ) {
+ if ( CurrentChar == (ossim_int32) LINE_CONTINUE ) {
CurrentChar = fgetc(fp ) ; /* read character after backslash */
/* A newline will be ignored and thus skipped over */
if ( CurrentChar == (ossim_int32) SPACE ) /* Assume line continue error */
=====================================
test/src/util/CMakeLists.txt
=====================================
@@ -4,4 +4,5 @@ OSSIM_SETUP_APPLICATION(ossim-chipper-test INSTALL COMMAND_LINE COMPONENT_NAME o
OSSIM_SETUP_APPLICATION(ossim-info-test INSTALL COMMAND_LINE COMPONENT_NAME ossim SOURCE_FILES ossim-info-test.cpp)
OSSIM_SETUP_APPLICATION(ossim-viewshed-test INSTALL COMMAND_LINE COMPONENT_NAME ossim SOURCE_FILES ossim-viewshed-test.cpp)
OSSIM_SETUP_APPLICATION(ossim-tools-test INSTALL COMMAND_LINE COMPONENT_NAME ossim SOURCE_FILES ossim-tools-test.cpp)
+OSSIM_SETUP_APPLICATION(ossim-remap-tool-test INSTALL COMMAND_LINE COMPONENT_NAME ossim SOURCE_FILES ossim-remap-tool-test.cpp)
=====================================
test/src/util/ossim-remap-tool-test.cpp
=====================================
@@ -0,0 +1,88 @@
+//**************************************************************************************************
+//
+// OSSIM Open Source Geospatial Data Processing Library
+// See top level LICENSE.txt file for license information
+//
+// Author: oscar.kramer at maxar.com
+//
+//**************************************************************************************************
+
+#include <ossim/base/ossimArgumentParser.h>
+#include <ossim/base/ossimException.h>
+#include <ossim/util/ossimRemapTool.h>
+#include <ossim/init/ossimInit.h>
+#include <getopt.h>
+#include <iostream>
+
+void usage(char* argv0, int exitCode, std::string errMsg="")
+{
+ if (!errMsg.empty())
+ std::cout<<"\n"<<errMsg<<std::endl;
+ std::cout<<
+ "\nPerforms remap to 8-bit including optional histogram stretch and saves the corresponding"
+ "\nexternal geometry file. If output filename is omitted, the output will be <input-image>-remap.ext"
+ "\n"
+ "\nUsage: "<<argv0<<" [options] <input-image.ext> [<output-image>] "
+ "\n"
+ "\nOptions:"
+ "\n -e <N> Entry index for multi-entry input files."
+ "\n -h Dump this help."
+ "\n -n Skip histogram stretch."
+ "\n"<<std::endl;
+ exit(exitCode);
+}
+
+
+int main(int argc, char *argv[])
+{
+ ossimArgumentParser ap(&argc, argv);
+ ossimInit::instance()->initialize(ap);
+ ostringstream msg;
+ int entryIndex=0, c=0;
+ bool doHistoStretch=true;
+
+ // Parse command line:
+ while ((c = getopt(argc, argv, "e:hn")) != -1)
+ {
+ switch (c)
+ {
+ case 'e':
+ entryIndex = atoi(optarg);
+ break;
+ case 'h':
+ usage(argv[0], 0);
+ break;
+ case 'n':
+ doHistoStretch = false;
+ break;
+ case '?':
+ msg << "Unknown option '" << (char) optopt << "' specified.";
+ usage(argv[0], 1, msg.str());
+ break;
+ default:
+ abort();
+ }
+ }
+
+ int numArgs = argc - optind;
+ if (numArgs < 1)
+ usage(argv[0], 1, "Input filename required.");
+
+ ossimFilename inputFilename (argv[optind++]);
+ ossimFilename outputFilename;
+ if (numArgs > 1)
+ outputFilename = argv[optind];
+
+ try
+ {
+ // Constructor does everything or throws exception:
+ ossimRemapTool ort (inputFilename, entryIndex, doHistoStretch, outputFilename);
+ }
+ catch (const ossimException& e)
+ {
+ std::cerr << e.what() << std::endl;
+ return 1;
+ }
+
+ return 0;
+}
View it on GitLab: https://salsa.debian.org/debian-gis-team/ossim/commit/37826c3655012cce52b0028cbdc968d5271d9c65
--
View it on GitLab: https://salsa.debian.org/debian-gis-team/ossim/commit/37826c3655012cce52b0028cbdc968d5271d9c65
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-grass-devel/attachments/20190812/34171816/attachment-0001.html>
More information about the Pkg-grass-devel
mailing list