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

📄 ogrfmelayercached.cpp

📁 GIS系统支持库Geospatial Data Abstraction Library代码.GDAL is a translator library for raster geospatial dat
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        poFMEFeature->resetFeature();        poFMEFeature->setDimension( FME_TWO_D );        poFMEFeature->setGeometryType( FME_GEOM_LINE );        poFMEFeature->addCoordinate( oEnvelope.MinX, oEnvelope.MinY );        poFMEFeature->addCoordinate( oEnvelope.MaxX, oEnvelope.MaxY );                    poIndex->queryEnvelope( *poFMEFeature );    }    bQueryActive = TRUE;    poDS->ReleaseSession();}/************************************************************************//*                          GetFeatureCount()                           *//************************************************************************/int OGRFMELayerCached::GetFeatureCount( int bForce ){    int    nResult;    poDS->AcquireSession();    if( m_poAttrQuery != NULL || poIndex == NULL )    {        nResult = OGRLayer::GetFeatureCount( bForce );    }    else    {        ResetReading();        nResult = poIndex->entries();    }    poDS->ReleaseSession();    return nResult;}/************************************************************************//*                             GetExtent()                              *//************************************************************************/OGRErr OGRFMELayerCached::GetExtent( OGREnvelope *psExtent, int /* bForce */ ){    if( sExtents.MinX == 0.0 && sExtents.MaxX == 0.0        && sExtents.MinY == 0.0 && sExtents.MaxY == 0.0 )        return OGRERR_FAILURE;    *psExtent = sExtents;    return OGRERR_NONE;}/************************************************************************//*                           SerializeToXML()                           *//************************************************************************/CPLXMLNode *OGRFMELayerCached::SerializeToXML(){    CPLXMLNode      *psLayer;    char            szGeomType[64];    psLayer = CPLCreateXMLNode( NULL, CXT_Element, "OGRLayer" );    /* -------------------------------------------------------------------- *//*      Handle various layer values.                                    *//* -------------------------------------------------------------------- */    CPLCreateXMLElementAndValue( psLayer, "Name", poFeatureDefn->GetName());    sprintf( szGeomType, "%d", (int) poFeatureDefn->GetGeomType() );    CPLCreateXMLElementAndValue( psLayer, "GeomType", szGeomType );        CPLCreateXMLElementAndValue( psLayer, "SpatialCacheName",                                  pszIndexBase );    /* -------------------------------------------------------------------- *//*      Handle spatial reference if available.                          *//* -------------------------------------------------------------------- */    if( GetSpatialRef() != NULL )    {        char *pszWKT = NULL;        OGRSpatialReference *poSRS = GetSpatialRef();                poSRS->exportToWkt( &pszWKT );        if( pszWKT != NULL )        {            CPLCreateXMLElementAndValue( psLayer, "SRS", pszWKT );            CPLFree( pszWKT );        }    }/* -------------------------------------------------------------------- *//*      Handle extents if available.                                    *//* -------------------------------------------------------------------- */    OGREnvelope sEnvelope;    if( GetExtent( &sEnvelope, FALSE ) == OGRERR_NONE )    {        char szExtent[512];        sprintf( szExtent, "%24.15E,%24.15E,%24.15E,%24.15E",                  sEnvelope.MinX, sEnvelope.MinY,                  sEnvelope.MaxX, sEnvelope.MaxY );        CPLCreateXMLElementAndValue( psLayer, "Extent", szExtent );    }/* -------------------------------------------------------------------- *//*      Emit the field schemas.                                         *//* -------------------------------------------------------------------- */    CPLXMLNode *psSchema = CPLCreateXMLNode( psLayer, CXT_Element, "Schema" );        for( int iField = 0; iField < poFeatureDefn->GetFieldCount(); iField++ )    {        OGRFieldDefn *poFieldDef = poFeatureDefn->GetFieldDefn( iField );        const char *pszType;        char szWidth[32], szPrecision[32];        CPLXMLNode *psXMLFD;        sprintf( szWidth, "%d", poFieldDef->GetWidth() );        sprintf( szPrecision, "%d", poFieldDef->GetPrecision() );                if( poFieldDef->GetType() == OFTInteger )            pszType = "Integer";        else if( poFieldDef->GetType() == OFTIntegerList )            pszType = "IntegerList";        else if( poFieldDef->GetType() == OFTReal )            pszType = "Real";        else if( poFieldDef->GetType() == OFTRealList )            pszType = "RealList";        else if( poFieldDef->GetType() == OFTString )            pszType = "String";        else if( poFieldDef->GetType() == OFTStringList )            pszType = "StringList";        else if( poFieldDef->GetType() == OFTWideString )            pszType = "WideString";        else if( poFieldDef->GetType() == OFTWideStringList )            pszType = "WideStringList";        else if( poFieldDef->GetType() == OFTBinary )            pszType = "Binary";        else            pszType = "Unsupported";        psXMLFD = CPLCreateXMLNode( psSchema, CXT_Element, "OGRFieldDefn" );        CPLCreateXMLElementAndValue( psXMLFD, "Name",poFieldDef->GetNameRef());        CPLCreateXMLElementAndValue( psXMLFD, "Type", pszType );        CPLCreateXMLElementAndValue( psXMLFD, "Width", szWidth );        CPLCreateXMLElementAndValue( psXMLFD, "Precision", szPrecision );    }    return psLayer;}/************************************************************************//*                         InitializeFromXML()                          *//************************************************************************/int OGRFMELayerCached::InitializeFromXML( CPLXMLNode *psLayer ){/* -------------------------------------------------------------------- *//*      Create the feature definition.                                  *//* -------------------------------------------------------------------- */    poFeatureDefn = new OGRFeatureDefn( CPLGetXMLValue(psLayer,"Name","X") );    /* -------------------------------------------------------------------- *//*      Set the geometry type, if available.                            *//* -------------------------------------------------------------------- */    if( CPLGetXMLNode( psLayer, "GeomType" ) != NULL )        poFeatureDefn->SetGeomType( (OGRwkbGeometryType)                      atoi(CPLGetXMLValue( psLayer, "GeomType", "0" )) );/* -------------------------------------------------------------------- *//*      If we can extract extents, apply them to the layer.             *//* -------------------------------------------------------------------- */    if( CPLGetXMLNode( psLayer, "Extent" ) != NULL )    {        if( sscanf( CPLGetXMLValue( psLayer, "Extent", "" ),                     "%lf,%lf,%lf,%lf",                     &sExtents.MinX,                     &sExtents.MaxX,                     &sExtents.MinY,                     &sExtents.MaxY ) != 4 )        {            memset( &sExtents, 0, sizeof(sExtents) );        }    }/* -------------------------------------------------------------------- *//*      Apply a SRS if found in the XML.                                *//* -------------------------------------------------------------------- */    if( CPLGetXMLNode( psLayer, "SRS" ) != NULL )    {        char *pszSRS = (char *) CPLGetXMLValue( psLayer, "SRS", "" );        OGRSpatialReference oSRS;        if( oSRS.importFromWkt( &pszSRS ) == OGRERR_NONE )        {            if( poSpatialRef != NULL )                delete poSpatialRef;            poSpatialRef = oSRS.Clone();        }    }/* -------------------------------------------------------------------- *//*      Apply the Schema.                                               *//* -------------------------------------------------------------------- */    CPLXMLNode *psFieldDef;    for( psFieldDef = CPLGetXMLNode( psLayer, "Schema.OGRFieldDefn" );         psFieldDef != NULL; psFieldDef = psFieldDef->psNext )    {        const char *pszType;        OGRFieldType eType;        if( !EQUAL(psFieldDef->pszValue,"OGRFieldDefn") )            continue;        pszType = CPLGetXMLValue( psFieldDef, "type", "String" );        if( EQUAL(pszType,"String") )            eType = OFTString;        else if( EQUAL(pszType,"StringList") )            eType = OFTStringList;        else if( EQUAL(pszType,"Integer") )            eType = OFTInteger;        else if( EQUAL(pszType,"IntegerList") )            eType = OFTIntegerList;        else if( EQUAL(pszType,"Real") )            eType = OFTReal;        else if( EQUAL(pszType,"RealList") )            eType = OFTRealList;        else if( EQUAL(pszType,"WideString") )            eType = OFTWideString;        else if( EQUAL(pszType,"WideStringList") )            eType = OFTWideStringList;        else if( EQUAL(pszType,"Binary") )            eType = OFTBinary;        else            eType = OFTString;        OGRFieldDefn oField( CPLGetXMLValue( psFieldDef, "name", "default" ),                             eType );        oField.SetWidth( atoi(CPLGetXMLValue(psFieldDef,"width","0")) );        oField.SetPrecision( atoi(CPLGetXMLValue(psFieldDef,"precision","0")));        poFeatureDefn->AddFieldDefn( &oField );    }/* -------------------------------------------------------------------- *//*      Ensure we have a working string and feature object              *//* -------------------------------------------------------------------- */    poFMEFeature = poDS->GetFMESession()->createFeature();    return TRUE;}

⌨️ 快捷键说明

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