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

📄 ntf_raster.cpp

📁 GIS系统支持库Geospatial Data Abstraction Library代码.GDAL is a translator library for raster geospatial dat
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        {            pafElev[iPixel] = (float) (dfVOffset + dfVScale *                atoi(poRecord->GetField(84+iPixel*4,87+iPixel*4)));        }    }            /* -------------------------------------------------------------------- *//*      Handle PROFILE                                                  *//* -------------------------------------------------------------------- */    else if( pafElev != NULL && GetProductId() == NPC_LANDFORM_PROFILE_DTM )    {        for( int iPixel = 0; iPixel < nRasterXSize; iPixel++ )        {            pafElev[iPixel] = (float)            (atoi(poRecord->GetField(19+iPixel*5,23+iPixel*5)) * GetZMult());        }    }        delete poRecord;    return CE_None;}/************************************************************************//* ==================================================================== *//*                        OGRNTFRasterLayer                             *//* ==================================================================== *//************************************************************************//************************************************************************//*                          OGRNTFRasterLayer                           *//************************************************************************/OGRNTFRasterLayer::OGRNTFRasterLayer( OGRNTFDataSource *poDSIn,                                      NTFFileReader * poReaderIn ){    char        szLayerName[128];    sprintf( szLayerName, "DTM_%s", poReaderIn->GetTileName() );    poFeatureDefn = new OGRFeatureDefn( szLayerName );    poFeatureDefn->SetGeomType( wkbPoint25D );    OGRFieldDefn      oHeight( "HEIGHT", OFTInteger );    oHeight.SetWidth(5);    poFeatureDefn->AddFieldDefn( &oHeight );    poReader = poReaderIn;    poDS = poDSIn;    poFilterGeom = NULL;    pafColumn = (float *) CPLCalloc(sizeof(float),                                    poReader->GetRasterYSize());    iColumnOffset = -1;    iCurrentFC = 0;/* -------------------------------------------------------------------- *//*      Check for DEM subsampling, and compute total feature count      *//*      accordingly.                                                    *//* -------------------------------------------------------------------- */    if( poDS->GetOption( "DEM_SAMPLE" ) == NULL )        nDEMSample = 1;    else        nDEMSample = MAX(1,atoi(poDS->GetOption("DEM_SAMPLE")));        nFeatureCount = (poReader->GetRasterXSize() / nDEMSample)                  * (poReader->GetRasterYSize() / nDEMSample);}/************************************************************************//*                         ~OGRNTFRasterLayer()                         *//************************************************************************/OGRNTFRasterLayer::~OGRNTFRasterLayer(){    delete poFeatureDefn;    if( poFilterGeom != NULL )        delete poFilterGeom;}/************************************************************************//*                          SetSpatialFilter()                          *//************************************************************************/void OGRNTFRasterLayer::SetSpatialFilter( OGRGeometry * poGeomIn ){    if( poFilterGeom != NULL )    {        delete poFilterGeom;        poFilterGeom = NULL;    }    if( poGeomIn != NULL )        poFilterGeom = poGeomIn->clone();}/************************************************************************//*                            ResetReading()                            *//************************************************************************/void OGRNTFRasterLayer::ResetReading(){    iCurrentFC = 0;}/************************************************************************//*                           GetNextFeature()                           *//************************************************************************/OGRFeature *OGRNTFRasterLayer::GetNextFeature(){    if( iCurrentFC == 0 )        iCurrentFC = 1;    else    {        int     iReqColumn, iReqRow;                iReqColumn = (iCurrentFC - 1) / poReader->GetRasterYSize();        iReqRow = iCurrentFC - iReqColumn * poReader->GetRasterXSize() - 1;        if( iReqRow + nDEMSample > poReader->GetRasterYSize() )        {            iReqRow = 0;            iReqColumn += nDEMSample;        }        else        {            iReqRow += nDEMSample;        }        iCurrentFC = iReqColumn * poReader->GetRasterYSize()            + iReqRow + 1;    }    return GetFeature( (long) iCurrentFC );}/************************************************************************//*                             GetFeature()                             *//************************************************************************/OGRFeature *OGRNTFRasterLayer::GetFeature( long nFeatureId ){    int         iReqColumn, iReqRow;    /* -------------------------------------------------------------------- *//*      Is this in the range of legal feature ids (pixels)?             *//* -------------------------------------------------------------------- */    if( nFeatureId < 1        || nFeatureId > poReader->GetRasterXSize()*poReader->GetRasterYSize() )    {        return NULL;    }/* -------------------------------------------------------------------- *//*      Do we need to load a different column.                          *//* -------------------------------------------------------------------- */    iReqColumn = (nFeatureId - 1) / poReader->GetRasterYSize();    iReqRow = nFeatureId - iReqColumn * poReader->GetRasterXSize() - 1;        if( iReqColumn != iColumnOffset )    {        iColumnOffset = iReqColumn;        if( poReader->ReadRasterColumn( iReqColumn, pafColumn ) != CE_None )            return NULL;    }    /* -------------------------------------------------------------------- *//*      Create a corresponding feature.                                 *//* -------------------------------------------------------------------- */    OGRFeature  *poFeature = new OGRFeature( poFeatureDefn );    double      *padfGeoTransform = poReader->GetGeoTransform();    poFeature->SetFID( nFeatureId );    // NOTE: unusual use of GeoTransform - the pixel origin is the    // bottom left corner!    poFeature->SetGeometryDirectly(        new OGRPoint( padfGeoTransform[0] + padfGeoTransform[1] * iReqColumn,                      padfGeoTransform[3] + padfGeoTransform[5] * iReqRow,                      pafColumn[iReqRow] ) );    poFeature->SetField( 0, (int) pafColumn[iReqRow] );        return poFeature;}/************************************************************************//*                          GetFeatureCount()                           *//*                                                                      *//*      If a spatial filter is in effect, we turn control over to       *//*      the generic counter.  Otherwise we return the total count.      *//*      Eventually we should consider implementing a more efficient     *//*      way of counting features matching a spatial query.              *//************************************************************************/int OGRNTFRasterLayer::GetFeatureCount( int bForce ){    return nFeatureCount;}/************************************************************************//*                           GetSpatialRef()                            *//************************************************************************/OGRSpatialReference *OGRNTFRasterLayer::GetSpatialRef(){    return poDS->GetSpatialRef();}/************************************************************************//*                           TestCapability()                           *//************************************************************************/int OGRNTFRasterLayer::TestCapability( const char * pszCap ){    if( EQUAL(pszCap,OLCRandomRead) )        return TRUE;    else if( EQUAL(pszCap,OLCSequentialWrite)              || EQUAL(pszCap,OLCRandomWrite) )        return FALSE;    else if( EQUAL(pszCap,OLCFastFeatureCount) )        return TRUE;    else if( EQUAL(pszCap,OLCFastSpatialFilter) )        return FALSE;    else         return FALSE;}

⌨️ 快捷键说明

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