OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimMapProjectionFactory.cpp
Go to the documentation of this file.
1 //*****************************************************************************
2 // FILE: ossimMapProjectionFactory.cc
3 //
4 // License: See top level LICENSE.txt file.
5 //
6 // DESCRIPTION:
7 // Contains implementation of class ossimMapProjectionFactory
8 //
9 // SOFTWARE HISTORY:
10 //>
11 // 15Jun2001 Garrett Potts
12 // Initial coding.
13 //<
14 //*****************************************************************************
15 // $Id: ossimMapProjectionFactory.cpp 22602 2014-01-31 18:39:11Z gpotts $
16 
22 
23 //***
24 // Note to programmer: To add a new projection, search this file for
25 // "ADD_PROJECTION" to locate places requiring editing. Functional example
26 // below...
27 //
28 // ADD_PROJECTION: Include all map projection headers here:
29 //***
30 
62 //***
63 // ADD_PROJECTION: List names of all map projections produced by this factory:
64 //***
65 
67 
68 //*****************************************************************************
69 // STATIC METHOD: ossimMapProjectionFactory::instance()
70 //
71 //*****************************************************************************
73 {
74  if(!theInstance)
75  {
77  }
78 
80 }
81 
84  ossim_uint32 entryIdx)const
85 {
86  if(!filename.exists())
87  {
88  return NULL;
89  }
90 
91  // Check for external geometry file.
93  entryIdx);
94  if (proj)
95  {
96  return proj;
97  }
98 
99  ossimFilename geomFile = filename;
100  geomFile = geomFile.setExtension("geom");
101  if(!geomFile.exists())
102  {
103  return NULL;
104  }
105  ossimKeywordlist kwl;
106  if(kwl.addFile(geomFile))
107  {
108  return createProjection(kwl);
109  }
110 
111  return NULL;
112 }
113 
114 //*****************************************************************************
115 // METHOD: ossimMapProjectionFactory::create(kwl, prefix)
116 //
117 //*****************************************************************************
119  const char *prefix) const
120 {
121  ossimProjection *result=NULL;
122 
123  const char *lookup = keywordList.find(prefix, ossimKeywordNames::TYPE_KW);
124  const char *lookupSpaceImaging = keywordList.find(prefix, ossimSpaceImagingGeom::SIG_PRODUCER_KW);
125  if(lookup)
126  {
127  result = createProjection(ossimString(lookup).trim());
128  if(result)
129  {
130  result->loadState(keywordList, prefix);
131  }
132  }
133  else
134  {
135  if(lookupSpaceImaging)
136  {
137  ossimKeywordlist kwl;
138  ossimKeywordlist kwl2;
139  kwl.add(keywordList,
140  prefix,
141  true);
142 
143  ossimSpaceImagingGeom spaceImaging;
144 
145  spaceImaging.setGeometry(kwl);
146 
147  spaceImaging.exportToOssim(kwl2);
148 
150  if(result)
151  {
152  return result;
153  }
154  }
155  // look for the geom_file keyword.
156  //
157  lookup = keywordList.find(prefix, ossimKeywordNames::GEOM_FILE_KW);
158  if(lookup)
159  {
160  ossimKeywordlist kwl;
161 
162  kwl.addFile(lookup);
163 
164  result = createProjection(kwl);
165 
166  if(!result)
167  {
168  // maybe they prepend projection. in the geom
169  // file.
170  result = createProjection(kwl, "projection.");
171  }
172 
173  }
174  }
175  return result;
176 }
177 
178 //*****************************************************************************
179 // METHOD: ossimMapProjectionFactory::create(projection_name)
180 //*****************************************************************************
182 {
183  //***
184  // ADD_PROJECTION: Test for each map projection here:
185  //***
187  return new ossimAlbersProjection;
189  return new ossimAzimEquDistProjection;
191  return new ossimBonneProjection;
193  return new ossimBngProjection;
195  return new ossimCassiniProjection;
197  return new ossimCylEquAreaProjection;
199  return new ossimEquDistCylProjection;
201  return new ossimEckert4Projection;
203  return new ossimEckert6Projection;
205  return new ossimGnomonicProjection;
209  return new ossimLlxyProjection;
211  return new ossimMercatorProjection;
213  return new ossimMillerProjection;
215  return new ossimMollweidProjection;
221  return new ossimOrthoGraphicProjection;
223  return new ossimPolarStereoProjection;
225  return new ossimPolyconicProjection;
227  return new ossimSinusoidalProjection;
229  return new ossimStereographicProjection;
233  return new ossimTransMercatorProjection;
235  return new ossimUpsProjection;
237  return new ossimUtmProjection;
239  return new ossimVanDerGrintenProjection;
243  return new ossimGoogleProjection;
245  return new ossimAdjMapModel;
246  return NULL;
247 }
248 
250 {
251  return createProjection(typeName);
252 }
253 
255  const char* prefix)const
256 {
257  return createProjection(kwl, prefix);
258 }
259 
260 void ossimMapProjectionFactory::getTypeNameList(std::vector<ossimString>& typeList)const
261 {
262 
263  typeList.push_back(ossimString(STATIC_TYPE_NAME(ossimAlbersProjection)));
265  typeList.push_back(ossimString(STATIC_TYPE_NAME(ossimBonneProjection)));
266  typeList.push_back(ossimString(STATIC_TYPE_NAME(ossimBngProjection)));
274  typeList.push_back(ossimString(STATIC_TYPE_NAME(ossimLlxyProjection)));
276  typeList.push_back(ossimString(STATIC_TYPE_NAME(ossimMillerProjection)));
287  typeList.push_back(ossimString(STATIC_TYPE_NAME(ossimUpsProjection)));
288  typeList.push_back(ossimString(STATIC_TYPE_NAME(ossimUtmProjection)));
291  typeList.push_back(ossimString(STATIC_TYPE_NAME(ossimGoogleProjection)));
292  typeList.push_back(ossimString(STATIC_TYPE_NAME(ossimAdjMapModel)));
293 
294 }
virtual ossimProjection * createProjection(const ossimFilename &filename, ossim_uint32 entryIdx) const
takes a filename.
virtual void getTypeNameList(std::vector< ossimString > &typeList) const
ossimProjection * createProjectionFromGeometryFile(const ossimFilename &imageFile, ossim_uint32 entryIdx) const
This method takes the filename and tries to find an external ".geom" file.
Represents serializable keyword/value map.
bool addFile(const char *file)
void setGeometry(const ossimFilename &file)
const char * find(const char *key) const
static ossimMapProjectionFactory * instance()
virtual ossimObject * createObject(const ossimString &typeName) const
static const char * SIG_PRODUCER_KW
static const char * TYPE_KW
#define STATIC_TYPE_NAME(T)
Definition: ossimRtti.h:325
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
ossimProjection * createProjection(const ossimFilename &filename, ossim_uint32 entryIdx) const
Albers Equal Area Conic Projection.
bool exists() const
unsigned int ossim_uint32
static const char * GEOM_FILE_KW
static ossimMapProjectionFactory * theInstance
static ossimProjectionFactoryRegistry * instance()
void exportToOssim(ossimKeywordlist &kwl, const char *prefix=0) const
Special "sensor model" that provides a conventional map projection but with.
ossimFilename & setExtension(const ossimString &e)
Sets the extension of a file name.