OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
Functions
ossimOgrInfo.cpp File Reference
#include <ossimOgrInfo.h>
#include <ossim/base/ossimTrace.h>
#include <ossim/base/ossimKeywordlist.h>
#include <ogr_api.h>
#include <fstream>
#include <iostream>
#include <iomanip>
#include <sstream>

Go to the source code of this file.

Functions

ossimString getKeyValue (ossimString metaPrefix, ossimString prefix, ossimString metaNameValue, ossimKeywordlist &kwl)
 

Function Documentation

◆ getKeyValue()

ossimString getKeyValue ( ossimString  metaPrefix,
ossimString  prefix,
ossimString  metaNameValue,
ossimKeywordlist kwl 
)

Definition at line 29 of file ossimOgrInfo.cpp.

References ossimKeywordlist::add(), ossimString::after(), ossimString::contains(), ossimString::empty(), ossimKeywordlist::find(), ossimKeywordlist::findAllKeysThatMatch(), max, ossimString::push_back(), ossimKeywordlist::remove(), ossimString::split(), ossimString::toInt(), and ossimString::toString().

Referenced by ossimOgrInfo::parseMetadata().

33 {
34  if (!metaNameValue.contains("{") && !metaNameValue.contains("}"))
35  {
36  std::vector<int> indexVector;
37  ossimString name = metaNameValue.split(":")[0].downcase().trim().substitute(" ", "_", true);
38  ossimString keyValue = ossimString(metaPrefix + prefix + name);
39  std::vector<ossimString> allMatchKeys;
40  kwl.findAllKeysThatMatch(allMatchKeys, keyValue);
41 
42  if (allMatchKeys.size() == 0)
43  {
44  return name;
45  }
46  else
47  {
48  for (ossim_uint32 i = 0; i < allMatchKeys.size(); i++)
49  {
50  ossimString keyMatchValue = allMatchKeys[i];
51  ossimString intValue = keyMatchValue.after(keyValue);
52  if (!intValue.empty())
53  {
54  indexVector.push_back(intValue.toInt());
55  }
56  }
57  if (indexVector.size() == 0) //only found one entry, e.g vpf.cat.Coverage_name
58  {
59  const char* tmpValue = kwl.find(keyValue);
60  ossimString metaValue = tmpValue;
61  kwl.remove(keyValue);
62  ossimString newPrefix = ossimString(prefix + name + ossimString::toString(0));
63  kwl.add(metaPrefix,
64  newPrefix,
65  metaValue,
66  true);
67  return ossimString(name + ossimString::toString(1));
68  }
69  else // e.g vpf.cat.Coverage_name0 found
70  {
71  double max = 0;
72  for (ossim_uint32 i = 0; i < indexVector.size(); i++)
73  {
74  if (max < indexVector.at(i))
75  {
76  max = indexVector.at(i);
77  }
78  }
79  return ossimString(name + ossimString::toString(max+1));
80  }
81  }
82  }
83  return ossimString("");
84 }
const char * find(const char *key) const
bool contains(char aChar) const
Definition: ossimString.h:58
static ossimString toString(bool aValue)
Numeric to string methods.
void split(std::vector< ossimString > &result, const ossimString &separatorList, bool skipBlankFields=false) const
Splits this string into a vector of strings (fields) using the delimiter list specified.
void findAllKeysThatMatch(std::vector< ossimString > &result, const ossimString &regularExpression) const
Finds keys that match regular expression.
void push_back(char c)
Equivalent to insert(end(), c).
Definition: ossimString.h:905
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
unsigned int ossim_uint32
#define max(a, b)
Definition: auxiliary.h:76
bool empty() const
Definition: ossimString.h:411
ossimString after(const ossimString &str, std::string::size_type pos=0) const
METHOD: after(str, pos) Returns string immediately after the token str.
void remove(const char *key)
int toInt() const