///////////////////////////////////////////////////////////////////////////// // OnTH_LClicked // Sent whenever the user clicks the left mouse button within the top heading // this message is sent when the button goes down then again when the button goes up // // 'col' is negative if the area clicked in is not valid // 'updn' TRUE if the button is down FALSE if the button just when up void MyCug::OnTH_LClicked(int col,long row,int updn,RECT *rect,POINT *point,BOOL processed) { if ( !updn ) { if ( m_nSortCol != GetColTranslation( col )) { m_nSortDir = UG_SORT_ASCENDING; } else if ( m_nSortDir == UG_SORT_DESCENDING ) { m_nSortDir = UG_SORT_ASCENDING; } else if ( m_nSortDir = UG_SORT_ASCENDING ) { m_nSortDir = UG_SORT_DESCENDING; } //m_nSortCol = col; m_nSortCol = GetColTranslation( col ); SortBy( col, m_nSortDir ); RedrawAll(); } }
int Raster::Copy(const char * pOutputRaster, double * dNewCellSize, double fLeft, double fTop, int nRows, int nCols) { if (fLeft <=0) return LEFT_ERROR; if (fTop <=0) return TOP_ERROR; if (nRows <=0) return ROWS_ERROR; if (nCols <=0) return COLS_ERROR; // Open the original dataset GDALDataset * pDSOld = (GDALDataset*) GDALOpen(m_sFilePath, GA_ReadOnly); if (pDSOld == NULL) return INPUT_FILE_ERROR; GDALRasterBand * pRBInput = pDSOld->GetRasterBand(1); /* Create the new dataset. Determine the driver from the output file extension. * Enforce LZW compression for TIFs. The predictor 3 is used for floating point prediction. * Not using this value defaults the LZW to prediction to 1 which causes striping. */ char **papszOptions = NULL; GDALDriver * pDR = NULL; std::string psDR = ""; const char * pSuffix = ExtractFileExt(pOutputRaster); if (pSuffix == NULL) return OUTPUT_FILE_EXT_ERROR; else { if (strcmp(pSuffix, ".tif") == 0) { psDR = "GTiff"; pDR = GetGDALDriverManager()->GetDriverByName(psDR.c_str()); papszOptions = CSLSetNameValue(papszOptions, "COMPRESS", "LZW"); //papszOptions = CSLSetNameValue(papszOptions, "PREDICTOR", "3"); } else if (strcmp(pSuffix, ".img") == 0){ psDR = "HFA"; pDR = GetGDALDriverManager()->GetDriverByName(psDR.c_str()); } else return OUTPUT_UNHANDLED_DRIVER; } double dNewCellHeight = (*dNewCellSize) * -1; RasterMeta OutputMeta(fTop, fLeft, nRows, nCols, &dNewCellHeight, dNewCellSize, GetNoDataValuePtr(), psDR.c_str(), GetGDALDataType(), GetProjectionRef() ); //const char * pC = pDR->GetDescription(); GDALDataset * pDSOutput = pDR->Create(pOutputRaster, nCols, nRows, 1, *GetGDALDataType(), papszOptions); CSLDestroy( papszOptions ); if (pDSOutput == NULL) return OUTPUT_FILE_ERROR; if (HasNoDataValue()) { CPLErr er = pDSOutput->GetRasterBand(1)->SetNoDataValue(GetNoDataValue()); if (er == CE_Failure || er == CE_Fatal) return OUTPUT_NO_DATA_ERROR; } pDSOutput->SetGeoTransform(OutputMeta.GetGeoTransform()); pDSOutput->SetProjection(pDSOld->GetProjectionRef()); int nInputCols = pRBInput->GetXSize(); int nInputRows = pRBInput->GetYSize(); double * pInputLine = (double *) CPLMalloc(sizeof(double)*nInputCols); double * pOutputLine = (double *) CPLMalloc(sizeof(double)*pDSOutput->GetRasterBand(1)->GetXSize()); int nRowTrans = GetRowTranslation(&OutputMeta); int nColTrans = GetColTranslation(&OutputMeta); /* * Loop over the raster rows. Note that geographic coordinate origin is bottom left. But * the GDAL image anchor is top left. The cell height is negative. * * The loop is over the centres of the output raster cells. Two rows are read from the * input raster. The line just above the output cell and the line just below. The line * just above is called the "anchor" row. */ int nOldRow, nOldCol; int i, j; for (i = 0; i < nRows; i++) { nOldRow = i - nRowTrans; if (nOldRow >= 0 && nOldRow < nInputRows) { pRBInput->RasterIO(GF_Read, 0, nOldRow, nInputCols, 1, pInputLine, nInputCols, 1, GDT_Float64, 0, 0); for (j = 0; j < nCols; j++) { nOldCol = j + nColTrans; if (nOldCol >=0 && nOldCol < nInputCols) { pOutputLine[j] = pInputLine[nOldCol]; } else { if (HasNoDataValue()) { pOutputLine[j] = GetNoDataValue(); } else { pOutputLine[j] = 0; } } } } else { // Outside the bounds of the input image. Loop over all cells in current output row and set to NoData. for (j = 0; j < nCols; j++) { pOutputLine[j] = GetNoDataValue(); } } pDSOutput->GetRasterBand(1)->RasterIO(GF_Write, 0, i, pDSOutput->GetRasterBand(1)->GetXSize(), 1, pOutputLine, pDSOutput->GetRasterBand(1)->GetXSize(), 1, GDT_Float64, 0, 0); } CPLFree(pInputLine); CPLFree(pOutputLine); CalculateStats(pDSOutput->GetRasterBand(1)); GDALClose(pDSOld); GDALClose(pDSOutput); GDALDumpOpenDatasets(stderr); return PROCESS_OK; }