ntf_estlayers.cpp

来自「支持各种栅格图像和矢量图像读取的库」· C++ 代码 · 共 1,819 行 · 第 1/5 页

CPP
1,819
字号
                                    "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 ){    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( 0, atoi(papoGroup[0]->GetField( 3, 8 )) );    // FEAT_CODE    poFeature->SetField( 1, papoGroup[0]->GetField( 17, 20 ) );    // Geometry    poFeature->SetGeometryDirectly(poReader->ProcessGeometry(papoGroup[1]));    // Attributes     poReader->ApplyAttributeValues( poFeature, papoGroup,                                    "HT", 2,                                    NULL );    // Set HEIGHT/elevation    OGRPoint    *poPoint = (OGRPoint *) poFeature->GetGeometryRef();        if( poPoint != NULL && poPoint->getCoordinateDimension() == 3 )    {        poFeature->SetField( 2, poPoint->getZ() );    }    else if( poPoint != NULL )    {        poFeature->SetField( 2, poFeature->GetFieldAsDouble(2) * 0.01 );        poPoint->setZ( poFeature->GetFieldAsDouble(2) );    }        return poFeature;}/************************************************************************//*                      TranslateProfileLine()                          *//************************************************************************/static OGRFeature *TranslateProfileLine( NTFFileReader *poReader,                                         OGRNTFLayer *poLayer,                                         NTFRecord **papoGroup ){    if( CSLCount((char **) papoGroup) < 2

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?