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

📄 ogrfmelayer.cpp

📁 GIS系统支持库Geospatial Data Abstraction Library代码.GDAL is a translator library for raster geospatial dat
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                eAttrGeomType = wkbPolygon;            else if( EQUAL(poAttrValue->data(),"fme_rounded_rectangle") )                eAttrGeomType = wkbPolygon;            else if( EQUAL(poAttrValue->data(),"fme_line") )                eAttrGeomType = wkbLineString;            else if( EQUAL(poAttrValue->data(),"fme_arc") )                eAttrGeomType = wkbLineString;            else if( EQUAL(poAttrValue->data(),"fme_aggregate") )                eAttrGeomType = wkbGeometryCollection;            else if( EQUAL(poAttrValue->data(),"fme_no_geom") )                eAttrGeomType = wkbNone;            else            {                CPLDebug( "FME_OLEDB",                           "geometry field %s has unknown value %s, ignored.",                          pszAttrName,                           poAttrValue->data() );                continue;            }            if( eGeomType == wkbNone )                eGeomType = eAttrGeomType;            else if( eGeomType != eAttrGeomType )                eGeomType = wkbUnknown;        }/* -------------------------------------------------------------------- *//*      Skip '*' attributes which appear to be the raw attribute        *//*      names from the source reader.  The versions that don't start    *//*      with * appear to be massaged suitably for use, with fme         *//*      standard data types.                                            *//* -------------------------------------------------------------------- */        if( EQUALN(pszAttrName,"fme_geometry",12)             || pszAttrName[0] == '*'            || EQUALN(pszAttrName,"fme_geomattr",12) )        {            continue;        }/* -------------------------------------------------------------------- *//*      Parse the type into tokens for easier use.                      *//* -------------------------------------------------------------------- */        char      **papszTokens;        papszTokens = CSLTokenizeStringComplex( poAttrValue->data(),                                                "(,", FALSE, FALSE );/* -------------------------------------------------------------------- *//*      Establish new fields.                                           *//* -------------------------------------------------------------------- */        OGRFieldType      eType;        int               nWidth, nPrecision = 0;        if( CSLCount(papszTokens) == 2 && EQUAL(papszTokens[0],"fme_char") )        {            eType = OFTString;            nWidth = atoi(papszTokens[1]);        }        else if( CSLCount(papszTokens) == 3                  && EQUAL(papszTokens[0],"fme_decimal") )        {            nWidth = atoi(papszTokens[1]);            nPrecision = atoi(papszTokens[2]);            if( nPrecision == 0 )                eType = OFTInteger;            else                eType = OFTReal;        }        else if( CSLCount(papszTokens) == 1                 && EQUAL(papszTokens[0],"fme_int16") )        {            nWidth = 6;            nPrecision = 0;            eType = OFTInteger;        }        else if( CSLCount(papszTokens) == 1                 && EQUAL(papszTokens[0],"fme_int32") )        {            nWidth = 0;            nPrecision = 0;            eType = OFTInteger;        }        else if( CSLCount(papszTokens) == 1                 && (EQUAL(papszTokens[0],"fme_real32")                      || EQUAL(papszTokens[0],"fme_real64")) )        {            nWidth = 0;            nPrecision = 0;            eType = OFTReal;        }        else if( CSLCount(papszTokens) == 1                 && EQUAL(papszTokens[0],"fme_boolean") )        {            nWidth = 1;            nPrecision = 0;            eType = OFTInteger;        }        else        {            printf( "Not able to translate field type: %s\n",                     poAttrValue->data() );            CSLDestroy( papszTokens );            continue;        }/* -------------------------------------------------------------------- *//*      Add the field to the feature definition.                        *//* -------------------------------------------------------------------- */        OGRFieldDefn  oFieldDefn( pszAttrName, eType );                oFieldDefn.SetWidth( nWidth );        oFieldDefn.SetPrecision( nPrecision );        poFeatureDefn->AddFieldDefn( &oFieldDefn );        CSLDestroy( papszTokens );    }/* -------------------------------------------------------------------- *//*      Assign the geometry type ... try to apply 3D-ness as well.      *//* -------------------------------------------------------------------- */    if( poSchemaFeature->getDimension() == FME_THREE_D )        eGeomType = (OGRwkbGeometryType) (((int)eGeomType) | wkb25DBit);    poFeatureDefn->SetGeomType( eGeomType );/* -------------------------------------------------------------------- *//*      Translate the spatial reference system.                         *//* -------------------------------------------------------------------- */    if( poSchemaFeature->getCoordSys() != NULL         && strlen(poSchemaFeature->getCoordSys()) > 0        && poSpatialRef == NULL )    {        CPLDebug( "FME_OLEDB", "Layer %s has COORDSYS=%s on schema feature.",                  poFeatureDefn->GetName(),                   poSchemaFeature->getCoordSys() );        poSpatialRef = poDS->FME2OGRSpatialRef(poSchemaFeature->getCoordSys());    }/* -------------------------------------------------------------------- *//*      Cleanup                                                         *//* -------------------------------------------------------------------- */    poDS->GetFMESession()->destroyString( poAttrValue );    poDS->GetFMESession()->destroyStringArray( poAttrNames );    return TRUE;}/************************************************************************//*                         SetAttributeFilter()                         *//************************************************************************/OGRErr OGRFMELayer::SetAttributeFilter( const char *pszNewFilter ){    OGRErr      eErr;    CPLFree( pszAttributeFilter );    pszAttributeFilter = NULL;/* -------------------------------------------------------------------- *//*      Allow clearing of attribute query.                              *//* -------------------------------------------------------------------- */    if( pszNewFilter == NULL || strlen(pszNewFilter) == 0 )    {        if( m_poAttrQuery != NULL )        {            delete m_poAttrQuery;            m_poAttrQuery = NULL;        }        return OGRERR_NONE;    }/* -------------------------------------------------------------------- *//*      Compile new query.  Note that we currently will only accept     *//*      queries we recognise as valid.  It would be better to pass      *//*      directly through to Oracle or other databases where we will     *//*      use the setConstraints method and let them decide on the        *//*      validity of the query.  However, it will be difficult to        *//*      return the error at this point if we defer setting the          *//*      constraint.                                                     *//* -------------------------------------------------------------------- */    if( !m_poAttrQuery )        m_poAttrQuery = new OGRFeatureQuery();    eErr = m_poAttrQuery->Compile( GetLayerDefn(), pszNewFilter );    if( eErr != OGRERR_NONE )    {        delete m_poAttrQuery;        m_poAttrQuery = NULL;    }    else    {        pszAttributeFilter = CPLStrdup( pszNewFilter );    }    ResetReading();    return eErr;}/************************************************************************//*                           GetSpatialRef()                            *//************************************************************************/OGRSpatialReference *OGRFMELayer::GetSpatialRef(){    return poSpatialRef;}

⌨️ 快捷键说明

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