std::string sosicon::ConverterSosi2psql:: getSrid( ISosiElement* sosiTree ) { // Path: .HODE/..TRANSPAR/...KOORDSYS ISosiElement* head = 0, * transpar = 0, * coordsys = 0; sosi::SosiElementSearch srcHead( sosi::sosi_element_head ); sosi::SosiElementSearch srcTranspar( sosi::sosi_element_transpar ); sosi::SosiElementSearch srcCoordsys( sosi::sosi_element_coordsys ); if( sosiTree->getChild( srcHead ) ) { head = srcHead.element(); } if( head && head->getChild( srcTranspar ) ) { transpar = srcTranspar.element(); } if( transpar && transpar->getChild( srcCoordsys ) ) { coordsys = srcCoordsys.element(); } std::string srid; if( coordsys ) { std::stringstream ss; ss << coordsys->getData(); int sysCode; ss >> sysCode; sosi::SosiTranslationTable tt; sosi::CoordSys cs = tt.sysCodeToCoordSys( sysCode ); srid = cs.srid(); std::cout << "Coordinate system: " << cs.displayString() << "\n"; } else {
void sosicon::ConverterSosiStat:: run() { for( std::vector<std::string>::iterator f = mCmd->mSourceFiles.begin(); f != mCmd->mSourceFiles.end(); f++ ) { std::cout << "\nGenerating statistics for " << *f << "\n"; Parser p; char ln[ 1024 ]; std::ifstream ifs( ( *f ).c_str() ); int c = 0; while( !ifs.eof() ) { c++; if( mCmd->mIsTtyOut && ( c % 100 ) == 0 ) { std::cout << "\rParsing " << c << " lines..."; } memset( ln, 0x00, sizeof ln ); ifs.getline( ln, sizeof ln ); p.ragelParseSosiLine( ln ); } std::cout << "\n" << c << " lines in file \n\n"; p.complete(); ifs.close(); ISosiElement* root = p.getRootElement(); makeStat( root ); sosi::SosiElementSearch srcHead( sosi::sosi_element_head ); if( root->getChild( srcHead ) ) { sosi::SosiElementSearch srcHeadItem; printTableHeader( "SOSI HEADER", "VALUE", 22 ); printElementData( srcHead.element(), sosi::SosiElementSearch(), 22 ); std::cout << "\n\n"; sosi::SosiElementSearch srcTranspar( sosi::sosi_element_transpar ); if( srcHead.element()->getChild( srcTranspar ) ) { sosi::SosiElementSearch srcTransparItem; printTableHeader( "SOSI HEADER/TRANSPAR", "VALUE", 22 ); printElementData( srcTranspar.element(), sosi::SosiElementSearch(), 22 ); std::cout << "\n\n"; } } printTableHeader( "SOSI ELEMENT", "COUNT", 30 ); printListContent( mGeoTypes, 30 ); std::cout << "\n\n"; printTableHeader( "OBJTYPE", "COUNT", 30 ); printListContent( mObjTypes, 30 ); std::cout << "\n\n"; } }
void sosicon::shape::Shapefile:: writePrj( std::ostream &os ) { sosi::SosiTranslationTable ttbl; sosi::SosiElementSearch srcHeader( sosi::sosi_element_head ); sosi::SosiElementSearch srcTranspar( sosi::sosi_element_transpar ); sosi::SosiElementSearch srcKoordsys( sosi::sosi_element_coordsys ); if( mSosiTree && mSosiTree->getChild( srcHeader ) && srcHeader.element()->getChild( srcTranspar ) && srcTranspar.element()->getChild( srcKoordsys ) ) { std::stringstream ss; int coordSys; ss << srcKoordsys.element()->getData(); ss >> coordSys; if( coordSys > 0 && coordSys <= sosi::MAX_COORDSYS_TABLE ) { os << ttbl.sysCodeToCoordSys( coordSys ).prjString(); } }