?? ntf_generic.cpp
字號:
/* Yes, so perform processing similar to ApplyAttributeValue(), *//* and append to list value. *//* -------------------------------------------------------------------- */ if( iListField != -1 ) { char *pszAttLongName, *pszAttValue, *pszCodeDesc; poReader->ProcessAttValue( papszTypes[iAtt], papszValues[iAtt], &pszAttLongName, &pszAttValue, &pszCodeDesc ); if( poFeature->IsFieldSet( iListField ) ) { poFeature->SetField( iListField, CPLSPrintf( "%s,%s", poFeature->GetFieldAsString( iListField ), pszAttValue ) ); } else { poFeature->SetField( iListField, pszAttValue ); } } } CSLDestroy( papszTypes ); CSLDestroy( papszValues );}/************************************************************************//* TranslateGenericNode() *//************************************************************************/static OGRFeature *TranslateGenericNode( NTFFileReader *poReader, OGRNTFLayer *poLayer, NTFRecord **papoGroup ){ if( CSLCount((char **) papoGroup) < 2 || papoGroup[0]->GetType() != NRT_NODEREC || (papoGroup[1]->GetType() != NRT_GEOMETRY && papoGroup[1]->GetType() != NRT_GEOMETRY3D) ) { return NULL; } OGRFeature *poFeature = new OGRFeature( poLayer->GetLayerDefn() ); // NODE_ID poFeature->SetField( "NODE_ID", atoi(papoGroup[0]->GetField( 3, 8 )) ); // Geometry poFeature->SetGeometryDirectly(poReader->ProcessGeometry(papoGroup[1])); poFeature->SetField( "GEOM_ID", papoGroup[1]->GetField(3,8) ); // NUM_LINKS int nLinkCount=0; int *panLinks = NULL; if( papoGroup[0]->GetLength() > 18 ) { nLinkCount = atoi(papoGroup[0]->GetField(15,18)); panLinks = (int *) CPLCalloc(sizeof(int),nLinkCount); } poFeature->SetField( "NUM_LINKS", nLinkCount ); // GEOM_ID_OF_LINK int iLink; for( iLink = 0; iLink < nLinkCount; iLink++ ) panLinks[iLink] = atoi(papoGroup[0]->GetField(20+iLink*12, 25+iLink*12)); poFeature->SetField( "GEOM_ID_OF_LINK", nLinkCount, panLinks ); // DIR for( iLink = 0; iLink < nLinkCount; iLink++ ) panLinks[iLink] = atoi(papoGroup[0]->GetField(19+iLink*12, 19+iLink*12)); poFeature->SetField( "DIR", nLinkCount, panLinks ); // should we add LEVEL and/or ORIENT? CPLFree( panLinks ); return poFeature;}/************************************************************************//* TranslateGenericCollection() *//************************************************************************/static OGRFeature *TranslateGenericCollection( NTFFileReader *poReader, OGRNTFLayer *poLayer, NTFRecord **papoGroup ){ if( CSLCount((char **) papoGroup) < 1 || papoGroup[0]->GetType() != NRT_COLLECT ) return NULL; OGRFeature *poFeature = new OGRFeature( poLayer->GetLayerDefn() ); // COLL_ID poFeature->SetField( "COLL_ID", atoi(papoGroup[0]->GetField( 3, 8 )) ); // NUM_PARTS int nPartCount=0; int *panParts = NULL; if( papoGroup[0]->GetLength() > 18 ) { nPartCount = atoi(papoGroup[0]->GetField(9,12)); panParts = (int *) CPLCalloc(sizeof(int),nPartCount); } poFeature->SetField( "NUM_PARTS", nPartCount ); // TYPE int iPart; for( iPart = 0; iPart < nPartCount; iPart++ ) panParts[iPart] = atoi(papoGroup[0]->GetField(13+iPart*8, 14+iPart*8)); poFeature->SetField( "TYPE", nPartCount, panParts ); // ID for( iPart = 0; iPart < nPartCount; iPart++ ) panParts[iPart] = atoi(papoGroup[0]->GetField(15+iPart*8, 20+iPart*8)); poFeature->SetField( "ID", nPartCount, panParts ); CPLFree( panParts ); // ATTREC Attributes AddGenericAttributes( poReader, papoGroup, poFeature ); return poFeature;}/************************************************************************//* TranslateGenericText() *//************************************************************************/static OGRFeature *TranslateGenericText( NTFFileReader *poReader, OGRNTFLayer *poLayer, NTFRecord **papoGroup ){ int iRec; if( CSLCount((char **) papoGroup) < 2 || papoGroup[0]->GetType() != NRT_TEXTREC ) return NULL; OGRFeature *poFeature = new OGRFeature( poLayer->GetLayerDefn() ); // TEXT_ID poFeature->SetField( "TEXT_ID", atoi(papoGroup[0]->GetField( 3, 8 )) ); // Geometry for( iRec = 0; papoGroup[iRec] != NULL; iRec++ ) { if( papoGroup[iRec]->GetType() == NRT_GEOMETRY || papoGroup[iRec]->GetType() == NRT_GEOMETRY3D ) { poFeature->SetGeometryDirectly( poReader->ProcessGeometry(papoGroup[iRec])); poFeature->SetField( "GEOM_ID", papoGroup[iRec]->GetField(3,8) ); break; } } // ATTREC Attributes AddGenericAttributes( poReader, papoGroup, poFeature ); // TEXTREP information for( iRec = 0; papoGroup[iRec] != NULL; iRec++ ) { NTFRecord *poRecord = papoGroup[iRec]; if( poRecord->GetType() == NRT_TEXTREP ) { poFeature->SetField( "FONT", atoi(poRecord->GetField(9,12)) ); poFeature->SetField( "TEXT_HT", atoi(poRecord->GetField(13,15)) * 0.1 ); poFeature->SetField( "TEXT_HT_GROUND", atoi(poRecord->GetField(13,15)) * 0.1 * poReader->GetPaperToGround() ); poFeature->SetField( "DIG_POSTN", atoi(poRecord->GetField(16,16)) ); poFeature->SetField( "ORIENT", atoi(poRecord->GetField(17,20)) * 0.1 ); break; } } return poFeature;}/************************************************************************//* TranslateGenericName() *//************************************************************************/static OGRFeature *TranslateGenericName( NTFFileReader *poReader, OGRNTFLayer *poLayer, NTFRecord **papoGroup ){ int iRec; if( CSLCount((char **) papoGroup) < 2 || papoGroup[0]->GetType() != NRT_NAMEREC ) return NULL; OGRFeature *poFeature = new OGRFeature( poLayer->GetLayerDefn() ); // NAME_ID poFeature->SetField( "NAME_ID", atoi(papoGroup[0]->GetField( 3, 8 )) ); // TEXT_CODE poFeature->SetField( "TEXT_CODE", papoGroup[0]->GetField( 8, 12 ) ); // TEXT int nNumChar = atoi(papoGroup[0]->GetField(13,14)); poFeature->SetField( "TEXT", papoGroup[0]->GetField( 15, 15+nNumChar-1)); // Geometry for( iRec = 0; papoGroup[iRec] != NULL; iRec++ ) { if( papoGroup[iRec]->GetType() == NRT_GEOMETRY || papoGroup[iRec]->GetType() == NRT_GEOMETRY3D ) { poFeature->SetGeometryDirectly( poReader->ProcessGeometry(papoGroup[iRec])); poFeature->SetField( "GEOM_ID", papoGroup[iRec]->GetField(3,8) ); break; } } // ATTREC Attributes AddGenericAttributes( poReader, papoGroup, poFeature ); // NAMEPOSTN information for( iRec = 0; papoGroup[iRec] != NULL; iRec++ ) { NTFRecord *poRecord = papoGroup[iRec]; if( poRecord->GetType() == NRT_NAMEPOSTN ) { poFeature->SetField( "FONT", atoi(poRecord->GetField(3,6)) ); poFeature->SetField( "TEXT_HT", atoi(poRecord->GetField(7,9)) * 0.1 ); poFeature->SetField( "TEXT_HT_GROUND", atoi(poRecord->GetField(7,9)) * 0.1 * poReader->GetPaperToGround() ); poFeature->SetField( "DIG_POSTN", atoi(poRecord->GetField(10,10)) ); poFeature->SetField( "ORIENT", atoi(poRecord->GetField(11,14)) * 0.1 ); break; } } return poFeature;}/************************************************************************//* TranslateGenericPoint() *//************************************************************************/static OGRFeature *TranslateGenericPoint( NTFFileReader *poReader, OGRNTFLayer *poLayer, NTFRecord **papoGroup ){ if( CSLCount((char **) papoGroup) < 2 || papoGroup[0]->GetType() != NRT_POINTREC || (papoGroup[1]->GetType() != NRT_GEOMETRY && papoGroup[1]->GetType() != NRT_GEOMETRY3D) ) { return NULL; } OGRFeature *poFeature = new OGRFeature( poLayer->GetLayerDefn() ); // POINT_ID poFeature->SetField( "POINT_ID", atoi(papoGroup[0]->GetField( 3, 8 )) ); // Geometry poFeature->SetGeometryDirectly(poReader->ProcessGeometry(papoGroup[1])); poFeature->SetField( "GEOM_ID", papoGroup[1]->GetField(3,8) ); // ATTREC Attributes AddGenericAttributes( poReader, papoGroup, poFeature ); // Handle singular attribute in pre-level 3 POINTREC. if( poReader->GetNTFLevel() < 3 ) { char szValType[3]; strcpy( szValType, papoGroup[0]->GetField(9,10) ); if( !EQUAL(szValType," ") ) { char *pszProcessedValue; if( poReader->ProcessAttValue(szValType, papoGroup[0]->GetField(11,16), NULL, &pszProcessedValue, NULL ) ) poFeature->SetField(szValType, pszProcessedValue); } if( !EQUAL(papoGroup[0]->GetField(17,20)," ") ) { poFeature->SetField("FEAT_CODE",papoGroup[0]->GetField(17,20)); } } return poFeature;}/************************************************************************//* TranslateGenericLine() *//************************************************************************/static OGRFeature *TranslateGenericLine( NTFFileReader *poReader, OGRNTFLayer *poLayer, NTFRecord **papoGroup )
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -