コード例 #1
0
//*************************************************************************************************
//! Loads all SRS CSV files specified in the ossim prefs
//*************************************************************************************************
void ossimWktProjectionFactory::loadRecords() const
{
   // Fetch filename of WKT projection DB file specified in ossim_preferences:
   ossimFilename db_name = ossimPreferences::instance()->preferencesKWL().find("wkt_database_file");
   if (!db_name.isReadable())
      return;

   // Create only once outside the loop:
   ossimString format_id;
   ossimString line;

   // Open the DB file:
   std::ifstream db_stream(db_name.chars());
   bool good_file = false;
   if (db_stream.good())
   {
      // Format specification implied in file's magic number:
      std::getline(db_stream, format_id.string());
      format_id.trim();
      if (format_id == WKT_MAGIC)
         good_file = true;
   }
   if (!good_file)
   {
      ossimNotify(ossimNotifyLevel_WARN)
            << "ossimWktProjectionDatabase::loadRecords() -- Encountered bad WKT database file <"
            << db_name << ">. Skipping this file." << endl;
      db_stream.close();
      return;
   }

   // The file is good. Skip over the column descriptor line:
   std::getline(db_stream, line.string());

   // Loop to read all data records:
   while (!db_stream.eof())
   {
      std::getline(db_stream, line.string());
      std::vector<ossimString> csvRecord = line.explode(","); // ONLY CSV FILES CONSIDERED HERE
      if (csvRecord.size())
      {
         std::pair<std::string, ossim_uint32> projRecord;
         projRecord.first = csvRecord[1].string();
         projRecord.second = csvRecord[0].toUInt32();
         m_wktProjRecords.insert(projRecord);
      }
   }

//   for ( std::map<ossimString, ossim_uint32>::const_iterator it = m_wktProjRecords.begin();
//         it != m_wktProjRecords.end(); it++)
//     cout << "[" << it->first << ", " << it->second << "]"<<endl;

   db_stream.close();
}
コード例 #2
0
//*************************************************************************************************
//! Constructor loads all SRS CSV files specified in the ossim prefs
//*************************************************************************************************
ossimWktProjectionFactory::ossimWktProjectionFactory()
{
    // Fetch filename of WKT projection DB file specified in ossim_preferences:
    ossimFilename db_name =
        ossimPreferences::instance()->preferencesKWL().find("wkt_database_file");
    if (!db_name.isReadable())
        return;

    // Create only once outside the loop:
    ossimString format_id;
    ossimString line;

    // Open the DB file:
    std::ifstream db_stream (db_name.chars());
    bool good_file = false;
    if (db_stream.good())
    {
        // Format specification implied in file's magic number:
        std::getline(db_stream, format_id.string());
        format_id.trim();
        if (format_id == WKT_MAGIC)
            good_file = true;
    }
    if (!good_file)
    {
        ossimNotify(ossimNotifyLevel_WARN)<<"ossimWktProjectionDatabase Constructor -- "
                                          "Encountered bad WKT database file <"<<db_name<<">. Skipping this file."<<endl;
        db_stream.close();
        return;
    }

    // The file is good. Skip over the column descriptor line:
    std::getline(db_stream, line.string());

    // Loop to read all data records:
    while (!db_stream.eof())
    {
        ossimRefPtr<WktProjRecord> db_record = new WktProjRecord;
        std::getline(db_stream, line.string());
        std::vector<ossimString> csvRecord = line.explode(","); // ONLY CSV FILES CONSIDERED HERE
        if (csvRecord.size())
        {
            db_record->epsgCode  = csvRecord[0].toUInt32();
            db_record->wktString = csvRecord[1];
            m_wktProjRecords.push_back(db_record);
        }
    }

    db_stream.close();

}
コード例 #3
0
//*************************************************************************************************
//! Populates the database with contents of DB files as specified in ossim_preferences.
//*************************************************************************************************
void ossimEpsgProjectionDatabase::initialize()
{
   // Fetch filenames of all projection DB files specified in ossim_preferences:
   ossimString regEx =  ossimString("^epsg_database_file[0-9]+");
   vector<ossimString> keys = 
      ossimPreferences::instance()->preferencesKWL().getSubstringKeyList(regEx);
   vector<ossimString>::const_iterator i = keys.begin();

   // Create only once outside the loop:
   ossimFilename db_name;
   ossimString group_id;
   ossimString format_id;
   ossimString line;

   // Loop over each file and read contents into memory:
   while ( i != keys.end() )
   {
      db_name = ossimPreferences::instance()->preferencesKWL().find( (*i).c_str() );
      ++i;
      if (!db_name.isReadable())
         continue;

      // Open the DB file:
      std::ifstream db_stream (db_name.chars());
      bool good_file = false;
      if (db_stream.good())
      {
         // Format specification implied in file's magic number:
         getline(db_stream, format_id.string());
         format_id.trim();
         if ((format_id == EPSG_DB_FORMAT_A) || 
             (format_id == STATE_PLANE_FORMAT_B) ||
             (format_id == SPCS_EPSG_MAP_FORMAT_C) ||
             (format_id == WKT_PCS_FORMAT_D))
            good_file = true;
      }
      if (!good_file)
      {
         ossimNotify(ossimNotifyLevel_WARN)<<"ossimEpsgProjectionDatabase::initialize() -- "
            "Encountered bad database file <"<<db_name<<">. Skipping this file."<<endl;
         db_stream.close();
         continue;
      }

      // The file is good. Skip over the column descriptor line:
      getline(db_stream, line.string());

      // Loop to read all data records:
      while (!db_stream.eof())
      {
         ossimRefPtr<ProjDbRecord> db_record = new ProjDbRecord;
         std::getline(db_stream, line.string());
         db_record->csvRecord = line.explode(","); // ONLY CSV FILES CONSIDERED HERE
         if (db_record->csvRecord.size())
         {
            ossimRefPtr<ossimMapProjection> proj;

            // Check if primary EPSG database format A:
            if (format_id == EPSG_DB_FORMAT_A)
            {
               db_record->code = db_record->csvRecord[A_CODE].toUInt32();
               db_record->name = db_record->csvRecord[A_NAME];
               db_record->csvFormat = FORMAT_A;
            }

            // Check if State Plane (subset of EPSG but handled differently until projection 
            // geotrans-EPSG disconnect is resolved. 
            else if (format_id == STATE_PLANE_FORMAT_B)
            {
               db_record->code = db_record->csvRecord[B_CODE].toUInt32();
               db_record->name = db_record->csvRecord[B_NAME];
               db_record->csvFormat = FORMAT_B;
            }

            // This format is for Ming-special State Plane Coordinate System coded format.
            // This format is simply a mapping from SPCS spec name (OSSIM-specific) to EPSG code.
            // Note that no proj is instantiated and no KWL is populated. Only name and EPSG mapped
            // code is saved.
            else if (format_id == SPCS_EPSG_MAP_FORMAT_C)
            {
               db_record->code = db_record->csvRecord[C_CODE].toUInt32();
               db_record->name = db_record->csvRecord[C_NAME];
               db_record->csvFormat = FORMAT_C;
            }

            // This format is for alternate projection naming scheme database CSV file format.
            // WKT_PCS coding is an alternate naming scheme that maps to EPSG.
            // Note that no proj is instantiated and no KWL is populated. Only name and EPSG mapped
            // code is saved.
            else if (format_id == WKT_PCS_FORMAT_D)
            {
               db_record->code = db_record->csvRecord[D_CODE].toUInt32();
               db_record->name = db_record->csvRecord[D_NAME];
               db_record->csvFormat = FORMAT_D;
            }

            m_projDatabase.insert(make_pair(db_record->code, db_record));
         }
      }

      db_stream.close();
   } // end of while loop over all DB files
}