?? ogravclayer.cpp
字號:
/* -------------------------------------------------------------------- *//* 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 + -