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

📄 ogrfmelayerdb.cpp

📁 GIS系统支持库Geospatial Data Abstraction Library代码.GDAL is a translator library for raster geospatial dat
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        CPLFree( pszWorking );        return;    }    pszValStart += strlen(pszTarget) + 1;    for( nOldValLength = 0;          pszValStart[nOldValLength] != ','              && pszValStart[nOldValLength] != '\0';          nOldValLength++ ) {}    memmove( pszValStart + strlen(pszNewValue),             pszValStart + nOldValLength,             strlen(pszValStart + nOldValLength)+1 );    memcpy( pszValStart, pszNewValue, strlen( pszNewValue ) );    *poMacros = pszWorking;    CPLFree( pszWorking );}/************************************************************************//*                         SetAttributeFilter()                         *//************************************************************************/OGRErr OGRFMELayerDB::SetAttributeFilter( const char *pszNewFilter ){    CPLFree( pszAttributeFilter );    pszAttributeFilter = NULL;    if( pszNewFilter != NULL )        pszAttributeFilter = CPLStrdup( pszNewFilter );    ResetReading();    return OGRERR_NONE;}/************************************************************************//*                            CreateReader()                            *//************************************************************************/int OGRFMELayerDB::CreateReader(){    FME_MsgNum    err;    IFMESession  *poSession = poDS->GetFMESession();    FME_UInt32   i;    CPLAssert( poReader == NULL && nPreviousFeature == -1 );/* -------------------------------------------------------------------- *//*      Make a copy of the user directives, so we won't be altering     *//*      the originals.                                                  *//* -------------------------------------------------------------------- */    IFMEStringArray  *poUDC = poSession->createStringArray();    for( i = 0; i < poUserDirectives->entries(); i++ )        poUDC->append( (*poUserDirectives)(i) );    /* -------------------------------------------------------------------- *//*      Update the IDLIST to just select the desired table.             *//* -------------------------------------------------------------------- */        for( i = 0; i < poUDC->entries(); i++ )    {        if( EQUAL((const char *) (*poUDC)(i),"IDLIST") )        {            IFMEString    *poIDList = poSession->createString();            *poIDList = GetLayerDefn()->GetName();            poUDC->setElement( i+1, *poIDList );            poSession->destroyString( poIDList );            break;        }    }    if( i == poUDC->entries() )    {        poUDC->append( "IDLIST" );        poUDC->append( GetLayerDefn()->GetName() );    }/* -------------------------------------------------------------------- *//*      Update the macros for source information, if needed.            *//* -------------------------------------------------------------------- */    if( m_poFilterGeom != NULL )    {        const char *pszDirective = "RUNTIME_MACROS";        if( !poUDC->contains(pszDirective) )        {            poUDC->append(pszDirective);            poUDC->append("");        }        for( i = 0; i < poUDC->entries(); i++ )        {            if( EQUAL((const char *) (*poUDC)(i),pszDirective) )            {                IFMEString  *poMacroValue = poSession->createString();                char      szSEARCH_ENVELOPE[1024];                OGREnvelope      oEnvelope;                poUDC->getElement( i+1, *poMacroValue );                m_poFilterGeom->getEnvelope( &oEnvelope );                                if( EQUALN(pszReaderName,"SDE",3) )                {                    sprintf( szSEARCH_ENVELOPE, "%.16f", oEnvelope.MinX );                    SetMacro( poMacroValue, "_SDE3MINX", szSEARCH_ENVELOPE );                                        sprintf( szSEARCH_ENVELOPE, "%.16f", oEnvelope.MinY );                    SetMacro( poMacroValue, "_SDE3MINY", szSEARCH_ENVELOPE );                                        sprintf( szSEARCH_ENVELOPE, "%.16f", oEnvelope.MaxX );                    SetMacro( poMacroValue, "_SDE3MAXX", szSEARCH_ENVELOPE );                                        sprintf( szSEARCH_ENVELOPE, "%.16f", oEnvelope.MaxY );                    SetMacro( poMacroValue, "_SDE3MAXY", szSEARCH_ENVELOPE );                }                else                {                    sprintf( szSEARCH_ENVELOPE, "%.16f", oEnvelope.MinX );                    SetMacro( poMacroValue, "_ORACLE_MINX", szSEARCH_ENVELOPE);                                        sprintf( szSEARCH_ENVELOPE, "%.16f", oEnvelope.MinY );                    SetMacro( poMacroValue, "_ORACLE_MINY", szSEARCH_ENVELOPE);                                        sprintf( szSEARCH_ENVELOPE, "%.16f", oEnvelope.MaxX );                    SetMacro( poMacroValue, "_ORACLE_MAXX", szSEARCH_ENVELOPE);                                        sprintf( szSEARCH_ENVELOPE, "%.16f", oEnvelope.MaxY );                    SetMacro( poMacroValue, "_ORACLE_MAXY", szSEARCH_ENVELOPE);                }                poUDC->setElement( i+1, *poMacroValue );                CPLDebug( "FMEOLEDB", "Update %s to:\n%s",                           pszDirective, poMacroValue->data() );                poSession->destroyString( poMacroValue );                break;            }        }    }    /* -------------------------------------------------------------------- *//*      Create new reader with desired constraints.                     *//* -------------------------------------------------------------------- */    poReader = poSession->createReader(pszReaderName, FME_FALSE, poUDC);    poSession->destroyStringArray( poUDC );    if( poReader == NULL )    {        CPLFMEError( poSession,                     "Failed to create reader of type `%s'.\n",                     pszReaderName );        return FALSE;    }/* -------------------------------------------------------------------- *//*      Setup constraints applied in open().                            *//* -------------------------------------------------------------------- */    IFMEStringArray     *poParms = poSession->createStringArray();    if( pszAttributeFilter != NULL && strlen(pszAttributeFilter) > 0 )    {        if( EQUALN(pszReaderName,"SDE",3) )            poParms->append( "WHERE" );        else            poParms->append( "WHERE_CLAUSE" );        poParms->append( pszAttributeFilter );    }#ifdef notdef    if( m_poFilterGeom != NULL )    {        char      szSEARCH_ENVELOPE[1024];        OGREnvelope      oEnvelope;        m_poFilterGeom->getEnvelope( &oEnvelope );        sprintf( szSEARCH_ENVELOPE, "%.16f", oEnvelope.MinX );        poParms->append( "SEARCH_ENVELOPE" );        poParms->append( szSEARCH_ENVELOPE );        sprintf( szSEARCH_ENVELOPE, "%.16f", oEnvelope.MinY );        poParms->append( "SEARCH_ENVELOPE" );        poParms->append( szSEARCH_ENVELOPE );        sprintf( szSEARCH_ENVELOPE, "%.16f", oEnvelope.MaxX );        poParms->append( "SEARCH_ENVELOPE" );        poParms->append( szSEARCH_ENVELOPE );        sprintf( szSEARCH_ENVELOPE, "%.16f", oEnvelope.MaxY );        poParms->append( "SEARCH_ENVELOPE" );        poParms->append( szSEARCH_ENVELOPE );    }#endif    for( i = 0; i < poParms->entries(); i++ )    {        CPLDebug( "FMEOLEDB", "openParms[%d] = %s",                   i, (const char *) (*poParms)(i) );    }/* -------------------------------------------------------------------- *//*      Now try to open the dataset.                                    *//* -------------------------------------------------------------------- */    err = poReader->open( pszDataset, *poParms );    if( err )    {        CPLFMEError( poSession,                     "Failed to open dataset `%s' with reader of type `%s'.\n",                     pszDataset, pszReaderName );        return FALSE;    }    poSession->destroyStringArray( poParms );    return TRUE;}/************************************************************************//*                          GetFeatureCount()                           *//************************************************************************/int OGRFMELayerDB::GetFeatureCount( int bForce ){    /*    ** This could be improved by just reading through the FME Features    ** without having to convert to OGRFeatures.  Optimization deferred.    */    return OGRLayer::GetFeatureCount( bForce );}

⌨️ 快捷键说明

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