📄 ntf_estlayers.cpp
字号:
OGRFeature *poFeature = new OGRFeature( poLayer->GetLayerDefn() ); // LINE_ID poFeature->SetField( 0, atoi(papoGroup[0]->GetField( 3, 8 )) ); // Geometry int nGeomId; poFeature->SetGeometryDirectly(poReader->ProcessGeometry(papoGroup[1], &nGeomId)); // GEOM_ID poFeature->SetField( 2, nGeomId ); // Attributes poReader->ApplyAttributeValues( poFeature, papoGroup, "FC", 1, "OM", 3, "RN", 4, "TR", 5, "RI", 6, "LC", 7, "RC", 8, "LD", 9, "RD", 10, NULL ); return poFeature;}/************************************************************************//* TranslateMeridian2Point() *//************************************************************************/static OGRFeature *TranslateMeridian2Point( NTFFileReader *poReader, OGRNTFLayer *poLayer, NTFRecord **papoGroup ){ if( CSLCount((char **) papoGroup) < 2 || papoGroup[0]->GetType() != NRT_POINTREC || papoGroup[1]->GetType() != NRT_GEOMETRY ) return NULL; OGRFeature *poFeature = new OGRFeature( poLayer->GetLayerDefn() ); // POINT_ID poFeature->SetField( 0, atoi(papoGroup[0]->GetField( 3, 8 )) ); // Geometry int nGeomId; poFeature->SetGeometryDirectly(poReader->ProcessGeometry(papoGroup[1], &nGeomId)); // GEOM_ID poFeature->SetField( 1, nGeomId ); // Attributes poReader->ApplyAttributeValues( poFeature, papoGroup, "FC", 2, "PN", 3, "OD", 4, "PO", 5, "JN", 6, "RT", 7, "SN", 7, "SI", 8, "PN", 9, "PI", 10, "NM", 11, "DA", 12, "WA", 13, "HT", 14, NULL ); return poFeature;}/************************************************************************//* TranslateMeridian2Line() *//************************************************************************/static OGRFeature *TranslateMeridian2Line( NTFFileReader *poReader, OGRNTFLayer *poLayer, NTFRecord **papoGroup ){ if( CSLCount((char **) papoGroup) < 2 || papoGroup[0]->GetType() != NRT_LINEREC || papoGroup[1]->GetType() != NRT_GEOMETRY ) return NULL; OGRFeature *poFeature = new OGRFeature( poLayer->GetLayerDefn() ); // LINE_ID poFeature->SetField( 0, atoi(papoGroup[0]->GetField( 3, 8 )) ); // Geometry int nGeomId; poFeature->SetGeometryDirectly(poReader->ProcessGeometry(papoGroup[1], &nGeomId)); // GEOM_ID poFeature->SetField( 2, nGeomId ); // Attributes poReader->ApplyAttributeValues( poFeature, papoGroup, "FC", 1, "OD", 3, "PO", 4, "RN", 5, "TR", 6, "PN", 7, "RI", 8, "LC", 9, "RC", 10, "LD", 11, "RD", 12, "WI", 14, NULL ); return poFeature;}/************************************************************************//* TranslateStrategiNode() *//* *//* Also used for Meridian, Oscar and BaseData.GB nodes. *//************************************************************************/static OGRFeature *TranslateStrategiNode( NTFFileReader *poReader, OGRNTFLayer *poLayer, NTFRecord **papoGroup ){ if( CSLCount((char **) papoGroup) != 1 || papoGroup[0]->GetType() != NRT_NODEREC ) return NULL; OGRFeature *poFeature = new OGRFeature( poLayer->GetLayerDefn() ); // NODE_ID poFeature->SetField( 0, atoi(papoGroup[0]->GetField( 3, 8 )) ); // GEOM_ID_OF_POINT poFeature->SetField( 1, atoi(papoGroup[0]->GetField( 9, 14 )) ); // NUM_LINKS int nNumLinks = atoi(papoGroup[0]->GetField( 15, 18 )); if( nNumLinks > MAX_LINK ) { CPLError( CE_Failure, CPLE_AppDefined, "MAX_LINK exceeded in ntf_estlayers.cpp." ); return poFeature; } poFeature->SetField( 2, nNumLinks ); // DIR int i, anList[MAX_LINK]; for( i = 0; i < nNumLinks; i++ ) anList[i] = atoi(papoGroup[0]->GetField( 19+i*12, 19+i*12 )); poFeature->SetField( 3, nNumLinks, anList ); // GEOM_ID_OF_POINT for( i = 0; i < nNumLinks; i++ ) anList[i] = atoi(papoGroup[0]->GetField( 19+i*12+1, 19+i*12+6 )); poFeature->SetField( 4, nNumLinks, anList ); // LEVEL for( i = 0; i < nNumLinks; i++ ) anList[i] = atoi(papoGroup[0]->GetField( 19+i*12+11, 19+i*12+11 )); poFeature->SetField( 5, nNumLinks, anList ); // ORIENT (optional) if( EQUAL(poFeature->GetDefnRef()->GetFieldDefn(6)->GetNameRef(), "ORIENT") ) { double adfList[MAX_LINK]; for( i = 0; i < nNumLinks; i++ ) adfList[i] = atoi(papoGroup[0]->GetField( 19+i*12+7, 19+i*12+10 )) * 0.1; poFeature->SetField( 6, nNumLinks, adfList ); } return poFeature;}/************************************************************************//* TranslateStrategiText() *//* *//* Also used for Meridian, BaseData and Generic text. *//************************************************************************/static OGRFeature *TranslateStrategiText( NTFFileReader *poReader, OGRNTFLayer *poLayer, NTFRecord **papoGroup ){ if( CSLCount((char **) papoGroup) < 4 || papoGroup[0]->GetType() != NRT_TEXTREC || papoGroup[1]->GetType() != NRT_TEXTPOS || papoGroup[2]->GetType() != NRT_TEXTREP || papoGroup[3]->GetType() != NRT_GEOMETRY ) return NULL; OGRFeature *poFeature = new OGRFeature( poLayer->GetLayerDefn() ); // POINT_ID poFeature->SetField( 0, atoi(papoGroup[0]->GetField( 3, 8 )) ); // FONT poFeature->SetField( 2, atoi(papoGroup[2]->GetField( 9, 12 )) ); // TEXT_HT poFeature->SetField( 3, atoi(papoGroup[2]->GetField( 13, 15 )) * 0.1 ); // DIG_POSTN poFeature->SetField( 4, atoi(papoGroup[2]->GetField( 16, 16 )) ); // ORIENT poFeature->SetField( 5, atoi(papoGroup[2]->GetField( 17, 20 )) * 0.1 ); // TEXT_HT_GROUND poFeature->SetField( 7, poFeature->GetFieldAsDouble(3) * poReader->GetPaperToGround() ); // Geometry poFeature->SetGeometryDirectly(poReader->ProcessGeometry(papoGroup[3])); // Attributes poReader->ApplyAttributeValues( poFeature, papoGroup, "FC", 1, "TX", 6, NULL ); return poFeature;}/************************************************************************//* TranslateStrategiPoint() *//************************************************************************/static OGRFeature *TranslateStrategiPoint( NTFFileReader *poReader, OGRNTFLayer *poLayer, NTFRecord **papoGroup ){ if( CSLCount((char **) papoGroup) < 2 || papoGroup[0]->GetType() != NRT_POINTREC || papoGroup[1]->GetType() != NRT_GEOMETRY ) return NULL; OGRFeature *poFeature = new OGRFeature( poLayer->GetLayerDefn() ); // POINT_ID poFeature->SetField( 0, atoi(papoGroup[0]->GetField( 3, 8 )) ); // Geometry int nGeomId; poFeature->SetGeometryDirectly(poReader->ProcessGeometry(papoGroup[1], &nGeomId)); // GEOM_ID poFeature->SetField( 10, nGeomId ); // Attributes poReader->ApplyAttributeValues( poFeature, papoGroup, "FC", 1, "PN", 2, "NU", 3, "RB", 4, "RU", 5, "AN", 6, "AO", 7, "CM", 8, "UN", 9, NULL ); return poFeature;}/************************************************************************//* TranslateStrategiLine() *//************************************************************************/static OGRFeature *TranslateStrategiLine( NTFFileReader *poReader, OGRNTFLayer *poLayer, NTFRecord **papoGroup ){ if( CSLCount((char **) papoGroup) < 2 || papoGroup[0]->GetType() != NRT_LINEREC || papoGroup[1]->GetType() != NRT_GEOMETRY ) return NULL; OGRFeature *poFeature = new OGRFeature( poLayer->GetLayerDefn() ); // LINE_ID poFeature->SetField( 0, atoi(papoGroup[0]->GetField( 3, 8 )) ); // Geometry int nGeomId; poFeature->SetGeometryDirectly(poReader->ProcessGeometry(papoGroup[1], &nGeomId)); // GEOM_ID poFeature->SetField( 3, nGeomId ); // Attributes poReader->ApplyAttributeValues( poFeature, papoGroup, "FC", 1, "PN", 2, NULL ); return poFeature;}/************************************************************************//* TranslateLandrangerPoint() *//************************************************************************/static OGRFeature *TranslateLandrangerPoint( NTFFileReader *poReader, OGRNTFLayer *poLayer, NTFRecord **papoGroup ){ if( CSLCount((char **) papoGroup) != 2 || papoGroup[0]->GetType() != NRT_POINTREC || papoGroup[1]->GetType() != NRT_GEOMETRY ) return NULL; OGRFeature *poFeature = new OGRFeature( poLayer->GetLayerDefn() ); // POINT_ID poFeature->SetField( 0, atoi(papoGroup[0]->GetField( 3, 8 )) ); // FEAT_CODE poFeature->SetField( 1, papoGroup[0]->GetField( 17, 20 ) ); // HEIGHT poFeature->SetField( 2, atoi(papoGroup[0]->GetField( 11, 16 )) ); // Geometry poFeature->SetGeometryDirectly(poReader->ProcessGeometry(papoGroup[1])); return poFeature;}/************************************************************************//* TranslateLandrangerLine() *//************************************************************************/static OGRFeature *TranslateLandrangerLine( NTFFileReader *poReader, OGRNTFLayer *poLayer, NTFRecord **papoGroup ){ if( CSLCount((char **) papoGroup) != 2 || papoGroup[0]->GetType() != NRT_LINEREC || papoGroup[1]->GetType() != NRT_GEOMETRY ) return NULL; OGRFeature *poFeature = new OGRFeature( poLayer->GetLayerDefn() ); // LINE_ID poFeature->SetField( 0, atoi(papoGroup[0]->GetField( 3, 8 )) ); // FEAT_CODE poFeature->SetField( 1, papoGroup[0]->GetField( 17, 20 ) ); // HEIGHT poFeature->SetField( 2, atoi(papoGroup[0]->GetField( 11, 16 )) ); // Geometry poFeature->SetGeometryDirectly(poReader->ProcessGeometry(papoGroup[1])); return poFeature;}/************************************************************************//* TranslateProfilePoint() *//************************************************************************/static OGRFeature *TranslateProfilePoint( NTFFileReader *poReader, OGRNTFLayer *poLayer, NTFRecord **papoGroup )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -