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

📄 ntf_estlayers.cpp

📁 GIS系统支持库Geospatial Data Abstraction Library代码.GDAL is a translator library for raster geospatial dat
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    poFeature->SetField( 6, nNumLink, anGeomList );    // RingStart    poFeature->SetField( 7, nRings, anRingStart );    /* -------------------------------------------------------------------- *//*      collect information for whole complex polygon.                  *//* -------------------------------------------------------------------- */    // POLY_ID    poFeature->SetField( 0, atoi(papoGroup[iRec]->GetField( 3, 8 )) );    // Attributes    poReader->ApplyAttributeValues( poFeature, papoGroup,                                    "FC", 1, "PI", 2, "HA", 3,                                    NULL );    // point geometry for seed.    poFeature->SetGeometryDirectly(        poReader->ProcessGeometry(papoGroup[iRec+2]));    // Try to assemble polygon geometry.    poReader->FormPolygonFromCache( poFeature );    return poFeature;}/************************************************************************//*                     TranslateBoundarylineLink()                      *//************************************************************************/static OGRFeature *TranslateBoundarylineLink( NTFFileReader *poReader,                                              OGRNTFLayer *poLayer,                                              NTFRecord **papoGroup ){    if( CSLCount((char **) papoGroup) != 2         || papoGroup[0]->GetType() != NRT_GEOMETRY        || papoGroup[1]->GetType() != NRT_ATTREC )        return NULL;            OGRFeature  *poFeature = new OGRFeature( poLayer->GetLayerDefn() );    // Geometry    int         nGeomId;        poFeature->SetGeometryDirectly(poReader->ProcessGeometry(papoGroup[0],                                                             &nGeomId));    // GEOM_ID    poFeature->SetField( 0, nGeomId );    // Attributes    poReader->ApplyAttributeValues( poFeature, papoGroup,                                    "FC", 1, "LK", 2, "HW", 3,                                    NULL );    return poFeature;}/************************************************************************//*                        TranslateBL2000Poly()                         *//************************************************************************/static OGRFeature *TranslateBL2000Poly( NTFFileReader *poReader,                                        OGRNTFLayer *poLayer,                                        NTFRecord **papoGroup ){/* ==================================================================== *//*      Traditional POLYGON record groups.                              *//* ==================================================================== */    if( CSLCount((char **) papoGroup) == 3         && papoGroup[0]->GetType() == NRT_POLYGON        && papoGroup[1]->GetType() == NRT_ATTREC         && papoGroup[2]->GetType() == NRT_CHAIN  )    {                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( 3, 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( 4, 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( 5, nNumLinks, anList );        // RingStart        int     nRingList = 0;        poFeature->SetField( 6, 1, &nRingList );        // Attributes        poReader->ApplyAttributeValues( poFeature, papoGroup,                                        "PI", 1, "HA", 2,                                        NULL );        // 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 + 2 )        return NULL;    if( papoGroup[iRec]->GetType() != NRT_CPOLY        || papoGroup[iRec+1]->GetType() != NRT_ATTREC )        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( 3, nNumLink );    // DIR    poFeature->SetField( 4, nNumLink, anDirList );    // GEOM_ID_OF_LINK    poFeature->SetField( 5, nNumLink, anGeomList );    // RingStart    poFeature->SetField( 6, nRings, anRingStart );    /* -------------------------------------------------------------------- *//*      collect information for whole complex polygon.                  *//* -------------------------------------------------------------------- */    // POLY_ID    poFeature->SetField( 0, atoi(papoGroup[iRec]->GetField( 3, 8 )) );    // Attributes    poReader->ApplyAttributeValues( poFeature, papoGroup,                                    "PI", 1, "HA", 2,                                    NULL );    // Try to assemble polygon geometry.    poReader->FormPolygonFromCache( poFeature );    return poFeature;}/************************************************************************//*                        TranslateBL2000Link()                         *//************************************************************************/static OGRFeature *TranslateBL2000Link( NTFFileReader *poReader,                                        OGRNTFLayer *poLayer,                                        NTFRecord **papoGroup ){    if( CSLCount((char **) papoGroup) != 3        || papoGroup[0]->GetType() != NRT_LINEREC        || papoGroup[1]->GetType() != NRT_GEOMETRY        || papoGroup[2]->GetType() != NRT_ATTREC )        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( 1, nGeomId );    // Attributes    poReader->ApplyAttributeValues( poFeature, papoGroup,                                    "FC", 2, "LK", 3,                                     NULL );    return poFeature;}/************************************************************************//*                     TranslateBL2000Collection()                      *//************************************************************************/static OGRFeature *TranslateBL2000Collection( 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 / COLL_ID_REFS    int         i, anList[MAX_LINK], anCollList[MAX_LINK];    int         nPolys=0, nCollections=0;    for( i = 0; i < nNumLinks; i++ )    {        if( atoi(papoGroup[0]->GetField( 13+i*8, 14+i*8 )) == 34 )            anCollList[nCollections++] =                 atoi(papoGroup[0]->GetField( 15+i*8, 20+i*8 ));        else            anList[nPolys++] =                 atoi(papoGroup[0]->GetField( 15+i*8, 20+i*8 ));    }    poFeature->SetField( 2, nPolys, anList );    poFeature->SetField( 10, nCollections, anCollList );    // Attributes    // Node that _CODE_DESC values are automatically applied if    // the target fields exist.     poReader->ApplyAttributeValues( poFeature, papoGroup,                                    "AI", 3, "OP", 4, "NM", 5, "TY", 6,                                     "AC", 7, "NB", 8, "NA", 9,                                    NULL );    return poFeature;}/************************************************************************//*                      TranslateMeridianPoint()                        *//************************************************************************/static OGRFeature *TranslateMeridianPoint( 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, "OS", 4, "JN", 5,                                    "RT", 6, "SI", 7, "PI", 8, "NM", 9,                                    "DA", 10,                                     NULL );    return poFeature;}/************************************************************************//*                       TranslateMeridianLine()                        *//************************************************************************/static OGRFeature *TranslateMeridianLine( NTFFileReader *poReader,                                          OGRNTFLayer *poLayer,                                          NTFRecord **papoGroup ){    if( CSLCount((char **) papoGroup) < 2        || papoGroup[0]->GetType() != NRT_LINEREC        || papoGroup[1]->GetType() != NRT_GEOMETRY )        return NULL;        

⌨️ 快捷键说明

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