26 #include "ossim/projection/ossimMapProjection.h"
27 #include "ossim/projection/ossimMapProjectionFactory.h"
28 #include "ossim/base/ossimGpt.h"
29 #include "ossim/base/ossimDpt.h"
30 #include "ossim/projection/ossimProjection.h"
31 #include "ossim/base/ossimEllipsoid.h"
32 #include "ossim/base/ossimEllipsoidFactory.h"
33 #include "ossim/base/ossimString.h"
34 #include "gdal/ossimOgcWktTranslator.h"
36 #include "ossim/projection/ossimUtmProjection.h"
37 #include "ossim/projection/ossimLambertConformalConicProjection.h"
38 #include "ossim/projection/ossimTransMercatorProjection.h"
39 #include "ossim/projection/ossimEckert4Projection.h"
40 #include "ossim/projection/ossimMollweidProjection.h"
41 #include "ossim/projection/ossimSinusoidalProjection.h"
43 #include "ossim/support_data/ossimSpaceImagingGeom.h"
44 #include "ossim/base/ossimKeywordNames.h"
51 m_MapProjection(
NULL), m_ProjectionRefWkt(
""), m_ReinstanciateProjection(true)
65 itkDebugMacro(
"returning MapProjection address " << this->
m_MapProjection);
76 itkDebugMacro(
"returning MapProjection address " << this->
m_MapProjection);
79 itkExceptionMacro(<<
"m_MapProjection not up-to-date, call InstanciateProjection() first");
94 ossimOgcWktTranslator wktTranslator;
96 wkt = wktTranslator.fromOssimKwl(kwl).chars();
121 std::string projectionName = this->
GetMapProjection()->getClassName().string();
124 const ossimMapProjection* projection =
dynamic_cast<const ossimMapProjection*
>(this->
GetMapProjection());
125 if (key.compare(
"Origin") == 0)
129 if (key.compare(
"FalseNorthing") == 0)
133 if (key.compare(
"FalseEasting") == 0)
137 if (key.compare(
"StandardParallel1") == 0)
141 if (key.compare(
"StandardParallel2") == 0)
145 if (key.compare(
"A") == 0)
149 if (key.compare(
"B") == 0)
153 if (key.compare(
"F") == 0)
157 if (key.compare(
"MetersPerPixel") == 0)
161 if (key.compare(
"DecimalDegreesPerPixel") == 0)
167 if (projectionName.compare(
"ossimTransMercatorProjection") == 0)
169 const ossimTransMercatorProjection* projection =
dynamic_cast<const ossimTransMercatorProjection*
>(this->
GetMapProjection());
170 if (key.compare(
"ScaleFactor") == 0)
177 if (projectionName.compare(
"ossimUtmProjection") == 0)
179 const ossimUtmProjection* projection =
dynamic_cast<const ossimUtmProjection*
>(this->
GetMapProjection());
180 if (key.compare(
"Zone") == 0)
184 if (key.compare(
"Hemisphere") == 0)
197 ossimKeywordlist kwl;
198 ossimOgcWktTranslator wktTranslator;
200 bool projectionInformationAvailable = wktTranslator.toOssimKwl(
m_ProjectionRefWkt, kwl);
202 if (projectionInformationAvailable)
207 std::string projectionString(kwl.find(
"type"));
208 if (projectionString.find(
"ossimEquDistCylProjection") != string::npos)
210 otbMsgDevMacro(<<
"WARNING: Not instanciating a ossimEquDistCylProjection: " << projectionString);
216 m_MapProjection = ossimMapProjectionFactory::instance()->createProjection(kwl);
221 otbMsgDevMacro(<<
"Trying with string as a string (ossimUtmProjection or Utm would qualify");
225 m_MapProjection = ossimMapProjectionFactory::instance()->createProjection(name);
230 ossimString extendedName(
"ossim");
232 extendedName +=
"Projection";
233 m_MapProjection = ossimMapProjectionFactory::instance()->createProjection(extendedName);
248 double& lon,
double& lat,
double& h)
259 ossimDpt ossimDPoint(x, y);
262 ossimGpt ossimGPoint;
264 ossimGPoint.changeDatum(ossimDatumFactory::instance()->wgs84());
266 lon = ossimGPoint.lon;
267 lat = ossimGPoint.lat;
272 double& x,
double& y,
double& z)
283 ossimGpt ossimGPoint(lat, lon, h);
286 ossimDpt ossimDPoint;
298 std::string projectionName = this->
GetMapProjection()->getClassName().string();
300 StoreType::const_iterator it;
303 ossimMapProjection* projection =
dynamic_cast<ossimMapProjection*
>(this->
GetMapProjection());
306 const ossimDatum* datum = ossimDatumFactory::instance()->wgs84();
310 datum = ossimDatumFactory::instance()->create((*it).second);
311 projection->setDatum(datum);
320 double originX = atof((*itX).second.c_str());
321 double originY = atof((*itY).second.c_str());
325 originZ = atof((*itZ).second.c_str());
327 ossimGpt origin(originY, originX, originZ, datum);
328 projection->setOrigin(origin);
332 StoreType::const_iterator itResMeterX =
m_ParameterStore.find(
"MetersPerPixelX");
333 StoreType::const_iterator itResMeterY =
m_ParameterStore.find(
"MetersPerPixelY");
336 double resMeterX = atof((*itResMeterX).second.c_str());
337 double resMeterY = atof((*itResMeterY).second.c_str());
338 ossimDpt resMeter(resMeterX, resMeterY);
339 projection->setMetersPerPixel(resMeter);
343 if (projectionName.compare(
"ossimLambertConformalConicProjection") == 0)
345 ossimLambertConformalConicProjection* projection =
dynamic_cast<ossimLambertConformalConicProjection*
>(this->
GetMapProjection());
350 double value = atof((*it).second.c_str());
352 projection->setFalseNorthing(value);
357 double value = atof((*it).second.c_str());
359 projection->setFalseEasting(value);
364 double value = atof((*it).second.c_str());
365 projection->setStandardParallel1(value);
370 double value = atof((*it).second.c_str());
371 projection->setStandardParallel2(value);
376 if (projectionName.compare(
"ossimEckert4Projection") == 0)
378 ossimEckert4Projection* projection =
dynamic_cast<ossimEckert4Projection*
>(this->
GetMapProjection());
383 double value = atof((*it).second.c_str());
384 projection->setFalseNorthing(value);
389 double value = atof((*it).second.c_str());
390 projection->setFalseEasting(value);
395 if (projectionName.compare(
"ossimMollweidProjection") == 0)
397 ossimMollweidProjection* projection =
dynamic_cast<ossimMollweidProjection*
>(this->
GetMapProjection());
402 double value = atof((*it).second.c_str());
403 projection->setFalseNorthing(value);
408 double value = atof((*it).second.c_str());
409 projection->setFalseEasting(value);
414 if (projectionName.compare(
"ossimSinusoidalProjection") == 0)
416 ossimSinusoidalProjection* projection =
dynamic_cast<ossimSinusoidalProjection*
>(this->
GetMapProjection());
421 double value = atof((*it).second.c_str());
422 projection->setFalseNorthing(value);
427 double value = atof((*it).second.c_str());
428 projection->setFalseEasting(value);
433 if (projectionName.compare(
"ossimTransMercatorProjection") == 0)
435 ossimTransMercatorProjection* projection =
dynamic_cast<ossimTransMercatorProjection*
> (this->
GetMapProjection());
439 double scale = atof((*it).second.c_str());
440 projection->setScaleFactor(scale);
445 double value = atof((*it).second.c_str());
446 projection->setFalseNorthing(value);
451 double value = atof((*it).second.c_str());
452 projection->setFalseEasting(value);
457 if (projectionName.compare(
"ossimUtmProjection") == 0)
459 ossimUtmProjection* projection =
dynamic_cast<ossimUtmProjection*
>(this->
GetMapProjection());
463 int zone = atoi((*it).second.c_str());
464 projection->setZone(zone);
469 projection->setHemisphere((*it).second[0]);
477 std::cout <<
"Parameter store:\n";
482 std::cout <<
" " << (*it).first <<
": " << (*it).second <<
"\n";
493 ossimGpt point(lat, lon);
494 ossimUtmProjection projection;
495 int zone = projection.computeZone(point);