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

📄 ogravclayer.cpp

📁 GIS系统支持库Geospatial Data Abstraction Library代码.GDAL is a translator library for raster geospatial dat
💻 CPP
📖 第 1 页 / 共 2 页
字号:
          poOGRFeature->SetField( 0, psCNT->numLabels, psCNT->panLabelIds );          return poOGRFeature;      }/* ==================================================================== *//*      LAB (Label)                                                     *//* ==================================================================== */      case AVCFileLAB:      {          AVCLab *psLAB = (AVCLab *) pAVCFeature;/* -------------------------------------------------------------------- *//*      Create feature.                                                 *//* -------------------------------------------------------------------- */          OGRFeature *poOGRFeature = new OGRFeature( GetLayerDefn() );          poOGRFeature->SetFID( psLAB->nValue );/* -------------------------------------------------------------------- *//*      Apply Geometry                                                  *//* -------------------------------------------------------------------- */          poOGRFeature->SetGeometryDirectly(               new OGRPoint( psLAB->sCoord1.x, psLAB->sCoord1.y ) );/* -------------------------------------------------------------------- *//*      Apply attributes.                                               *//* -------------------------------------------------------------------- */          poOGRFeature->SetField( 0, psLAB->nValue );          poOGRFeature->SetField( 1, psLAB->nPolyId );          return poOGRFeature;      }/* ==================================================================== *//*      TXT/TX6 (Text)							*//* ==================================================================== */      case AVCFileTXT:      case AVCFileTX6:      {          AVCTxt *psTXT = (AVCTxt *) pAVCFeature;/* -------------------------------------------------------------------- *//*      Create feature.                                                 *//* -------------------------------------------------------------------- */          OGRFeature *poOGRFeature = new OGRFeature( GetLayerDefn() );          poOGRFeature->SetFID( psTXT->nTxtId );/* -------------------------------------------------------------------- *//*      Apply Geometry                                                  *//* -------------------------------------------------------------------- */          if( psTXT->numVerticesLine > 0 )              poOGRFeature->SetGeometryDirectly(                   new OGRPoint( psTXT->pasVertices[0].x,                                 psTXT->pasVertices[0].y ) );/* -------------------------------------------------------------------- *//*      Apply attributes.                                               *//* -------------------------------------------------------------------- */          poOGRFeature->SetField( 0, psTXT->nUserId );          poOGRFeature->SetField( 1, psTXT->pszText );          poOGRFeature->SetField( 2, psTXT->dHeight );          poOGRFeature->SetField( 3, psTXT->nLevel );          return poOGRFeature;      }      default:        return NULL;    }}/************************************************************************//*                        MatchesSpatialFilter()                        *//************************************************************************/int OGRAVCLayer::MatchesSpatialFilter( void *pFeature ){    if( m_poFilterGeom == NULL )        return TRUE;    switch( eSectionType )    {/* ==================================================================== *//*      ARC                                                             *//*                                                                      *//*      Check each line segment for possible intersection.              *//* ==================================================================== */      case AVCFileARC:      {          AVCArc *psArc = (AVCArc *) pFeature;          for( int iVert = 0; iVert < psArc->numVertices-1; iVert++ )          {              AVCVertex *psV1 = psArc->pasVertices + iVert;              AVCVertex *psV2 = psArc->pasVertices + iVert + 1;              if( (psV1->x < m_sFilterEnvelope.MinX                   && psV2->x < m_sFilterEnvelope.MinX)                  || (psV1->x > m_sFilterEnvelope.MaxX                      && psV2->x > m_sFilterEnvelope.MaxX)                  || (psV1->y < m_sFilterEnvelope.MinY                      && psV2->y < m_sFilterEnvelope.MinY)                  || (psV1->y > m_sFilterEnvelope.MaxY                      && psV2->y > m_sFilterEnvelope.MaxY) )                  /* This segment is completely outside extents */;              else                  return TRUE;          }          return FALSE;      }/* ==================================================================== *//*      PAL (Polygon)                                                   *//*      RPL (Region)                                                    *//*                                                                      *//*      Check against the polygon bounds stored in the PAL.             *//* ==================================================================== */      case AVCFilePAL:      case AVCFileRPL:      {          AVCPal *psPAL = (AVCPal *) pFeature;          if( psPAL->sMin.x > m_sFilterEnvelope.MaxX              || psPAL->sMax.x < m_sFilterEnvelope.MinX              || psPAL->sMin.y > m_sFilterEnvelope.MaxY              || psPAL->sMax.y < m_sFilterEnvelope.MinY )              return FALSE;          else              return TRUE;      }/* ==================================================================== *//*      CNT (Centroid)                                                  *//* ==================================================================== */      case AVCFileCNT:      {          AVCCnt *psCNT = (AVCCnt *) pFeature;                    if( psCNT->sCoord.x < m_sFilterEnvelope.MinX              || psCNT->sCoord.x > m_sFilterEnvelope.MaxX              || psCNT->sCoord.y < m_sFilterEnvelope.MinY              || psCNT->sCoord.y > m_sFilterEnvelope.MaxY )              return FALSE;          else              return TRUE;      }/* ==================================================================== *//*      LAB (Label)                                                     *//* ==================================================================== */      case AVCFileLAB:      {          AVCLab *psLAB = (AVCLab *) pFeature;          if( psLAB->sCoord1.x < m_sFilterEnvelope.MinX              || psLAB->sCoord1.x > m_sFilterEnvelope.MaxX              || psLAB->sCoord1.y < m_sFilterEnvelope.MinY              || psLAB->sCoord1.y > m_sFilterEnvelope.MaxY )              return FALSE;          else              return TRUE;      }/* ==================================================================== *//*      TXT/TX6 (Text)							*//* ==================================================================== */      case AVCFileTXT:      case AVCFileTX6:      {          AVCTxt *psTXT = (AVCTxt *) pFeature;          if( psTXT->numVerticesLine == 0 )              return TRUE;          if( psTXT->pasVertices[0].x < m_sFilterEnvelope.MinX              || psTXT->pasVertices[0].x > m_sFilterEnvelope.MaxX              || psTXT->pasVertices[0].y < m_sFilterEnvelope.MinY              || psTXT->pasVertices[0].y > m_sFilterEnvelope.MaxY )              return FALSE;          else              return TRUE;      }      default:        return TRUE;    }}/************************************************************************//*                       AppendTableDefinition()                        *//*                                                                      *//*      Add fields to this layers feature definition based on the       *//*      definition from the coverage.                                   *//************************************************************************/int OGRAVCLayer::AppendTableDefinition( AVCTableDef *psTableDef ){    for( int iField = 0; iField < psTableDef->numFields; iField++ )    {        AVCFieldInfo *psFInfo = psTableDef->pasFieldDef + iField;        char	szFieldName[128];        /* Strip off white space */        strcpy( szFieldName, psFInfo->szName );        if( strstr(szFieldName," ") != NULL )            *(strstr(szFieldName," ")) = '\0';                OGRFieldDefn  oFDefn( szFieldName, OFTInteger );        if( psFInfo->nIndex < 0 )            continue;        // Skip FNODE#, TNODE#, LPOLY# and RPOLY# from AAT table.        if( eSectionType == AVCFileARC && iField < 4 )            continue;        oFDefn.SetWidth( psFInfo->nFmtWidth );        if( psFInfo->nType1 * 10 == AVC_FT_DATE             || psFInfo->nType1 * 10 == AVC_FT_CHAR )            oFDefn.SetType( OFTString );        else if( psFInfo->nType1 * 10 == AVC_FT_FIXINT                  || psFInfo->nType1 * 10 == AVC_FT_BININT )            oFDefn.SetType( OFTInteger );        else if( psFInfo->nType1 * 10 == AVC_FT_FIXNUM                  || psFInfo->nType1 * 10 == AVC_FT_BINFLOAT )        {            oFDefn.SetType( OFTReal );            if( psFInfo->nFmtPrec > 0 )                oFDefn.SetPrecision( psFInfo->nFmtPrec );        }        poFeatureDefn->AddFieldDefn( &oFDefn );    }    return TRUE;}/************************************************************************//*                        TranslateTableFields()                        *//************************************************************************/int OGRAVCLayer::TranslateTableFields( OGRFeature *poFeature,                                        int nFieldBase,                                        AVCTableDef *psTableDef,                                       AVCField *pasFields ){    int	iOutField = nFieldBase;    for( int iField=0; iField < psTableDef->numFields; iField++ )    {        AVCFieldInfo *psFInfo = psTableDef->pasFieldDef + iField;        int           nType = psFInfo->nType1 * 10;        if( psFInfo->nIndex < 0 )            continue;                // Skip FNODE#, TNODE#, LPOLY# and RPOLY# from AAT table.        if( eSectionType == AVCFileARC && iField < 4 )            continue;        if (nType ==  AVC_FT_DATE || nType == AVC_FT_CHAR ||            nType == AVC_FT_FIXINT || nType == AVC_FT_FIXNUM)        {            if (nType == AVC_FT_CHAR)            {                /* Remove trailing spaces in char fields */                int nLen = strlen(pasFields[iField].pszStr);                while (nLen > 0 && pasFields[iField].pszStr[nLen-1] == ' ')                    nLen--;                pasFields[iField].pszStr[nLen] = '\0';            }            poFeature->SetField( iOutField++, pasFields[iField].pszStr );        }        else if (nType == AVC_FT_BININT && psFInfo->nSize == 4)        {            poFeature->SetField( iOutField++, pasFields[iField].nInt32 );        }        else if (nType == AVC_FT_BININT && psFInfo->nSize == 2)        {            poFeature->SetField( iOutField++, pasFields[iField].nInt16 );        }        else if (nType == AVC_FT_BINFLOAT && psFInfo->nSize == 4)        {            poFeature->SetField( iOutField++, pasFields[iField].fFloat );        }        else if (nType == AVC_FT_BINFLOAT && psFInfo->nSize == 8)        {            poFeature->SetField( iOutField++, pasFields[iField].dDouble );        }        else        {            CPLAssert( FALSE );            return FALSE;        }    }    return TRUE;}

⌨️ 快捷键说明

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