Exemplo n.º 1
0
OGRFeature *OGRUnionLayer::GetNextFeature()
{
    if( poFeatureDefn == NULL ) GetLayerDefn();
    if( iCurLayer < 0 )
        ResetReading();

    if( iCurLayer == nSrcLayers )
        return NULL;

    while( true )
    {
        OGRFeature* poSrcFeature = papoSrcLayers[iCurLayer]->GetNextFeature();
        if( poSrcFeature == NULL )
        {
            iCurLayer ++;
            if( iCurLayer < nSrcLayers )
            {
                ConfigureActiveLayer();
                continue;
            }
            else
                break;
        }

        OGRFeature* poFeature = TranslateFromSrcLayer(poSrcFeature);
        delete poSrcFeature;

        if( (m_poFilterGeom == NULL ||
             FilterGeometry( poFeature->GetGeomFieldRef(m_iGeomFieldFilter) ) ) &&
            (m_poAttrQuery == NULL ||
             m_poAttrQuery->Evaluate( poFeature )) )
        {
            return poFeature;
        }

        delete poFeature;
    }
    return NULL;
}
Exemplo n.º 2
0
OGRFeature *OGRUnionLayer::GetFeature( GIntBig nFeatureId )
{
    OGRFeature* poFeature = NULL;

    if( !bPreserveSrcFID )
    {
        poFeature = OGRLayer::GetFeature(nFeatureId);
    }
    else
    {
        int iGeomFieldFilterSave = m_iGeomFieldFilter;
        OGRGeometry* poGeomSave = m_poFilterGeom;
        m_poFilterGeom = NULL;
        SetSpatialFilter(NULL);

        for(int i=0;i<nSrcLayers;i++)
        {
            iCurLayer = i;
            ConfigureActiveLayer();

            OGRFeature* poSrcFeature = papoSrcLayers[i]->GetFeature(nFeatureId);
            if( poSrcFeature != NULL )
            {
                poFeature = TranslateFromSrcLayer(poSrcFeature);
                delete poSrcFeature;

                break;
            }
        }

        SetSpatialFilter(iGeomFieldFilterSave, poGeomSave);
        delete poGeomSave;

        ResetReading();
    }

    return poFeature;
}
Exemplo n.º 3
0
OGRFeature *OGRUnionLayer::GetFeature( long nFeatureId )
{
    if( !bPreserveSrcFID )
        return OGRLayer::GetFeature(nFeatureId);

    for(int i=0;i<nSrcLayers;i++)
    {
        iCurLayer = i;
        ConfigureActiveLayer();

        OGRFeature* poSrcFeature = papoSrcLayers[i]->GetFeature(nFeatureId);
        if( poSrcFeature != NULL )
        {
            OGRFeature* poFeature = TranslateFromSrcLayer(poSrcFeature);
            delete poSrcFeature;

            return poFeature;
        }
    }

    ResetReading();

    return NULL;
}