Skip to content
Commits on Source (4)
FILE(GLOB SOURCE_FILES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp")
OSSIM_SETUP_APPLICATION(ossim-envi-cg INSTALL COMMAND_LINE COMPONENT_NAME ossim SOURCE_FILES ${SOURCE_FILES})
//---
//
// License: MIT
//
//---
// System includes:
#include <cmath>
#include <memory>
#include <sstream>
#include <iostream>
// ossim includes: These are here just to save time/typing...
#include <ossim/base/ossimApplicationUsage.h>
#include <ossim/base/ossimArgumentParser.h>
#include <ossim/base/ossimConnectableObject.h>
#include <ossim/base/ossimException.h>
#include <ossim/base/ossimNotify.h>
#include <ossim/base/ossimObjectFactoryRegistry.h>
#include <ossim/init/ossimInit.h>
#include <ossim/base/Thread.h>
#include <ossim/projection/ossimEnviCgModel.h>
#include <ossim/imaging/ossimImageGeometry.h>
// Put your includes here:
int main(int argc, char *argv[])
{
int returnCode = 0;
if (argc < 2)
{
cout<<"\nUsage: "<<argv[0]<<" <filename.geoc>\n"<<endl;
return 1;
}
ossimArgumentParser ap(&argc, argv);
ossimInit::instance()->addOptions(ap);
ossimInit::instance()->initialize(ap);
ossimFilename fname (argv[1]);
try
{
ossimRefPtr<ossimEnviCgModel> model = new ossimEnviCgModel;
if (model->loadEnviGeocFile(fname))
{
ossimFilename geomFname(fname);
geomFname.setExtension("geom");
model->saveCoarseGrid(geomFname);
ossimKeywordlist kwl;
ossimImageGeometry geom;
geom.setProjection(model.get());
geom.saveState(kwl);
kwl.write(geomFname);
}
}
catch(const ossimException& e)
{
ossimNotify(ossimNotifyLevel_WARN) << e.what() << std::endl;
returnCode = 1;
}
catch( ... )
{
ossimNotify(ossimNotifyLevel_WARN)
<< "ossim-foo caught unhandled exception!" << std::endl;
returnCode = 1;
}
return returnCode;
}
ossim (2.4.1-1) unstable; urgency=medium
* Team upload.
* New upstream release.
-- Bas Couwenberg <sebastic@debian.org> Fri, 29 Jun 2018 07:24:22 +0200
ossim (2.4.0-1) unstable; urgency=medium
* Team upload.
......
//*******************************************************************
//
// License: See top level LICENSE.txt file.
//
//*******************************************************************
#ifndef ossimEnviCgModel_HEADER
#define ossimEnviCgModel_HEADER
#include <ossim/projection/ossimCoarseGridModel.h>
#include <ossim/base/ossimFilename.h>
class OSSIMDLLEXPORT ossimEnviCgModel : public ossimCoarseGridModel
{
public:
ossimEnviCgModel();
ossimEnviCgModel(const ossimFilename& geoc_file);
bool loadEnviGeocFile(const ossimFilename& geoc_file);
bool saveState(ossimKeywordlist& kwl, const char* prefix=0) const;
private:
double readValue(ifstream& s, bool bigEndian) const;
TYPE_DATA
};
#endif
# must be unique in a given SonarQube instance
sonar.projectKey=ossim
sonar.projectVersion=1.0
# source-code location folder
sonar.sources=src
# source-code language
sonar.language=c++
# Verbose output
sonar.verbose=true
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8
//*****************************************************************************
// FILE: ossimCoarseGridModel.cc
//
// License: See LICENSE.txt file in the top level directory.
//
// AUTHOR: Oscar Kramer
//
// DESCRIPTION:
// Contains implementation of class ossimCoarseGridModel. This is an
// implementation of an interpolation sensor model.
//
// IMPORTANT: The lat/lon grid is for ground points on the ellipsoid.
// The dLat/dHgt and dLon/dHgt partials therefore are used against
// elevations relative to the ellipsoid.
//
//*****************************************************************************
// $Id: ossimCoarseGridModel.cpp 22825 2014-07-07 23:14:52Z dburken $
#include <ossim/projection/ossimEnviCgModel.h>
RTTI_DEF1(ossimEnviCgModel, "ossimEnviCgModel", ossimCoarseGridModel);
#include <ossim/elevation/ossimElevManager.h>
#include <ossim/imaging/ossimImageGeometry.h>
#include <ossim/support_data/ossimSupportFilesList.h>
#include <ossim/projection/ossimProjectionFactoryRegistry.h>
#include <ossim/base/ossimKeywordlist.h>
static const char* MODEL_TYPE = "ossimEnviCgModel";
//*****************************************************************************
ossimEnviCgModel::ossimEnviCgModel()
: ossimCoarseGridModel()
{}
//*****************************************************************************
ossimEnviCgModel::ossimEnviCgModel(const ossimFilename& geoc_file)
: ossimCoarseGridModel()
{
loadEnviGeocFile(geoc_file);
}
//*****************************************************************************
bool ossimEnviCgModel::loadEnviGeocFile(const ossimFilename& geoc_file)
{
theHeightEnabledFlag = false;
setErrorStatus();
ossimFilename geoc_hdr (geoc_file + ".hdr");
ifstream geocHdrStream (geoc_hdr.c_str());
if (geocHdrStream.fail())
{
cout << "ossimEnviCgModel:loadEnviGeocFile() Error encountered opening GEOC header file <"<<geoc_hdr<<">"<<endl;
return false;
}
char line[1024];
ossimIpt imageSize;
geocHdrStream.getline(line, 1024);
ossimString oline(line);
int bigEndian=0;
if (!oline.contains("ENVI"))
{
cout << "ossimEnviCgModel:loadEnviGeocFile() Error: GEOC header file <"<<geoc_hdr
<<"> missing \"ENVI\" magic number."<<endl;
return false;
}
while (!geocHdrStream.eof())
{
geocHdrStream.getline(line, 1024);
oline = line;
vector<ossimString> strSplit;
if (oline.contains("samples"))
imageSize.x = oline.after("=").trim().toInt();
else if (oline.contains("lines"))
imageSize.y = oline.after("=").trim().toInt();
else if (oline.contains("byte order"))
bigEndian = oline.after("=").trim().toInt();
}
ossimDpt gridOrigin(0,0);
ifstream geocStream (geoc_file.c_str(), ios_base::binary|ios_base::in);
if (geocStream.fail())
{
cout << "ossimEnviCgModel:Ctor Error encountered opening GEOC file <"<<geoc_file<<">"<<endl;
return false;
}
ossimDpt spacing (1,1);
theLatGrid.initialize(imageSize, gridOrigin, spacing);
theLonGrid.initialize(imageSize, gridOrigin, spacing);
theDlatDhGrid.initialize(imageSize, gridOrigin, spacing);
theDlonDhGrid.initialize(imageSize, gridOrigin, spacing);
double value;
for (int y=0; (y<imageSize.y) && !geocStream.eof() ; ++y)
{
for (int x=0; (x<imageSize.x) && !geocStream.eof() ; ++x)
{
value = readValue(geocStream, (bool) bigEndian);
theLonGrid.setNode(x, y, value);
}
}
for (int y=0; (y<imageSize.y) && !geocStream.eof() ; ++y)
{
for (int x=0; (x<imageSize.x) && !geocStream.eof() ; ++x)
{
value = readValue(geocStream, (bool) bigEndian);
theLatGrid.setNode(x, y, value);
}
}
theDlatDhGrid.fill(0.0);
theDlonDhGrid.fill(0.0);
theLatGrid.setDomainType(ossimDblGrid::SAWTOOTH_90);
theLonGrid.setDomainType(ossimDblGrid::WRAP_180);
ossimIrect imageBounds(0, 0, imageSize.x-1, imageSize.y-1);
initializeModelParams(imageBounds);
return true;
}
bool ossimEnviCgModel::saveState(ossimKeywordlist& kwl, const char* prefix) const
{
bool status = ossimCoarseGridModel::saveState(kwl, prefix);
if (status)
kwl.add(prefix, "type", "ossimCoarseGridModel");
return status;
}
double ossimEnviCgModel::readValue(ifstream& s, bool bigEndian) const
{
double value;
s.read( reinterpret_cast<char*>(&value) , sizeof(double) );
if (bigEndian)
{
char * pc = reinterpret_cast<char *>(&value);
std::swap(pc[0], pc[7]);
std::swap(pc[1], pc[6]);
std::swap(pc[2], pc[5]);
std::swap(pc[3], pc[4]);
cout<<endl;
}
return value;
}