⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ntf_estlayers.cpp

📁 GIS系统支持库Geospatial Data Abstraction Library代码.GDAL is a translator library for raster geospatial dat
💻 CPP
📖 第 1 页 / 共 5 页
字号:
        CSLDestroy( papszOSODRList );        CSLDestroy( papszTypes );        CSLDestroy( papszValues );    }    return poFeature;}/************************************************************************//*                       TranslateOscarComment()                        *//************************************************************************/static OGRFeature *TranslateOscarComment( NTFFileReader *poReader,                                          OGRNTFLayer *poLayer,                                          NTFRecord **papoGroup ){    if( CSLCount((char **) papoGroup) != 1         || papoGroup[0]->GetType() != NRT_COMMENT )        return NULL;            OGRFeature  *poFeature = new OGRFeature( poLayer->GetLayerDefn() );    // RECORD_TYPE    poFeature->SetField( 0, atoi(papoGroup[0]->GetField( 3, 4 )) );    // RECORD_ID    poFeature->SetField( 1, papoGroup[0]->GetField( 5, 17 ) );    // CHANGE_TYPE    poFeature->SetField( 2, papoGroup[0]->GetField( 18, 18 ) );    return poFeature;}/************************************************************************//*                     TranslateOscarNetworkPoint()                     *//************************************************************************/static OGRFeature *TranslateOscarNetworkPoint( 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));    poFeature->SetField( 1, nGeomId );    // Attributes    poReader->ApplyAttributeValues( poFeature, papoGroup,                                    "FC", 2, "OD", 3, "JN", 4, "SN", 5,                                    "RT", 6,                                    NULL );    return poFeature;}/************************************************************************//*                      TranslateOscarNetworkLine()                     *//************************************************************************/static OGRFeature *TranslateOscarNetworkLine( 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));    poFeature->SetField( 1, nGeomId );    // Attributes    poReader->ApplyAttributeValues( poFeature, papoGroup,                                    "FC", 2, "OD", 3, "PN", 4, "LL", 5,                                    "RN", 6,                                     NULL );    return poFeature;}/************************************************************************//*                       TranslateBasedataPoint()                       *//************************************************************************/static OGRFeature *TranslateBasedataPoint( 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, "NU", 4, "CM", 5,                                    "UN", 6, "OR", 7,                                    NULL );    return poFeature;}/************************************************************************//*                       TranslateBasedataLine()                        *//************************************************************************/static OGRFeature *TranslateBasedataLine( 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, "PN", 3, "NU", 4, "RB", 5,                                    NULL );    return poFeature;}/************************************************************************//*                  TranslateBoundarylineCollection()                   *//************************************************************************/static OGRFeature *TranslateBoundarylineCollection( NTFFileReader *poReader,                                                    OGRNTFLayer *poLayer,                                                    NTFRecord **papoGroup ){    if( CSLCount((char **) papoGroup) != 2         || papoGroup[0]->GetType() != NRT_COLLECT        || papoGroup[1]->GetType() != NRT_ATTREC )        return NULL;            OGRFeature  *poFeature = new OGRFeature( poLayer->GetLayerDefn() );    // COLL_ID    poFeature->SetField( 0, atoi(papoGroup[0]->GetField( 3, 8 )) );    // NUM_PARTS    int         nNumLinks = atoi(papoGroup[0]->GetField( 9, 12 ));        if( nNumLinks > MAX_LINK )    {        CPLError( CE_Failure, CPLE_AppDefined,                   "MAX_LINK exceeded in ntf_estlayers.cpp." );        return poFeature;    }        poFeature->SetField( 1, nNumLinks );    // POLY_ID    int         i, anList[MAX_LINK];    for( i = 0; i < nNumLinks; i++ )        anList[i] = atoi(papoGroup[0]->GetField( 15+i*8, 20+i*8 ));    poFeature->SetField( 2, nNumLinks, anList );    // Attributes    poReader->ApplyAttributeValues( poFeature, papoGroup,                                    "AI", 3, "OP", 4, "NM", 5,                                    NULL );    return poFeature;}/************************************************************************//*                     TranslateBoundarylinePoly()                      *//************************************************************************/static OGRFeature *TranslateBoundarylinePoly( NTFFileReader *poReader,                                              OGRNTFLayer *poLayer,                                              NTFRecord **papoGroup ){/* ==================================================================== *//*      Traditional POLYGON record groups.                              *//* ==================================================================== */    if( CSLCount((char **) papoGroup) == 4         && papoGroup[0]->GetType() == NRT_POLYGON        && papoGroup[1]->GetType() == NRT_ATTREC         && papoGroup[2]->GetType() == NRT_CHAIN         && papoGroup[3]->GetType() == NRT_GEOMETRY )    {                OGRFeature      *poFeature = new OGRFeature( poLayer->GetLayerDefn() );        // POLY_ID        poFeature->SetField( 0, atoi(papoGroup[0]->GetField( 3, 8 )) );        // NUM_PARTS        int             nNumLinks = atoi(papoGroup[2]->GetField( 9, 12 ));            if( nNumLinks > MAX_LINK )        {            CPLError( CE_Failure, CPLE_AppDefined,                       "MAX_LINK exceeded in ntf_estlayers.cpp." );            return poFeature;        }            poFeature->SetField( 4, nNumLinks );        // DIR        int             i, anList[MAX_LINK];        for( i = 0; i < nNumLinks; i++ )            anList[i] = atoi(papoGroup[2]->GetField( 19+i*7, 19+i*7 ));        poFeature->SetField( 5, nNumLinks, anList );        // GEOM_ID_OF_LINK        for( i = 0; i < nNumLinks; i++ )            anList[i] = atoi(papoGroup[2]->GetField( 13+i*7, 18+i*7 ));        poFeature->SetField( 6, nNumLinks, anList );        // RingStart        int     nRingList = 0;        poFeature->SetField( 7, 1, &nRingList );        // Attributes        poReader->ApplyAttributeValues( poFeature, papoGroup,                                        "FC", 1, "PI", 2, "HA", 3,                                        NULL );        // Read point geometry        poFeature->SetGeometryDirectly(            poReader->ProcessGeometry(papoGroup[3]));        // Try to assemble polygon geometry.        poReader->FormPolygonFromCache( poFeature );        return poFeature;    }/* ==================================================================== *//*      CPOLYGON Group                                                  *//* ==================================================================== *//* -------------------------------------------------------------------- *//*      First we do validation of the grouping.                         *//* -------------------------------------------------------------------- */    int         iRec;        for( iRec = 0;         papoGroup[iRec] != NULL && papoGroup[iRec+1] != NULL             && papoGroup[iRec]->GetType() == NRT_POLYGON             && papoGroup[iRec+1]->GetType() == NRT_CHAIN;         iRec += 2 ) {}    if( CSLCount((char **) papoGroup) != iRec + 3 )        return NULL;    if( papoGroup[iRec]->GetType() != NRT_CPOLY        || papoGroup[iRec+1]->GetType() != NRT_ATTREC        || papoGroup[iRec+2]->GetType() != NRT_GEOMETRY )        return NULL;/* -------------------------------------------------------------------- *//*      Collect the chains for each of the rings, and just aggregate    *//*      these into the master list without any concept of where the     *//*      boundaries are.  The boundary information will be emmitted      *//*      in the RingStart field.                                         *//* -------------------------------------------------------------------- */    OGRFeature  *poFeature = new OGRFeature( poLayer->GetLayerDefn() );    int         nNumLink = 0;    int         anDirList[MAX_LINK*2], anGeomList[MAX_LINK*2];    int         anRingStart[MAX_LINK], nRings = 0;    for( iRec = 0;         papoGroup[iRec] != NULL && papoGroup[iRec+1] != NULL             && papoGroup[iRec]->GetType() == NRT_POLYGON             && papoGroup[iRec+1]->GetType() == NRT_CHAIN;         iRec += 2 )    {        int             i, nLineCount;        nLineCount = atoi(papoGroup[iRec+1]->GetField(9,12));        anRingStart[nRings++] = nNumLink;                for( i = 0; i < nLineCount && nNumLink < MAX_LINK*2; i++ )        {            anDirList[nNumLink] =                atoi(papoGroup[iRec+1]->GetField( 19+i*7, 19+i*7 ));            anGeomList[nNumLink] =                atoi(papoGroup[iRec+1]->GetField( 13+i*7, 18+i*7 ));            nNumLink++;        }        if( nNumLink == MAX_LINK*2 )        {            CPLError( CE_Failure, CPLE_AppDefined,                       "MAX_LINK exceeded in ntf_estlayers.cpp." );            delete poFeature;            return NULL;        }    }    // NUM_PART    poFeature->SetField( 4, nNumLink );    // DIR    poFeature->SetField( 5, nNumLink, anDirList );    // GEOM_ID_OF_LINK

⌨️ 快捷键说明

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