void CWet_hView::GetFPDistGrid() { MapLayer *pFlowDir = gpMapWnd->m_pMap->GetLayer( "FLOWDIR" ); MapLayer *pStreamGrid = gpMapWnd->m_pMap->GetLayer( "STRGRID" ); MapLayer *pDEM = gpMapWnd->m_pMap->GetLayer( "DEM" ); MapLayer *pFPDistGrid = gpMapWnd->m_pMap->GetLayer( "FLOWDIRX" ); // pFPDistGrid->m_name = "FP DistGrad"; MapLayer *pWatershed = gpMapWnd->m_pMap->GetLayer( "CATCH" ); float flowPathDistance=0.0f; int flowPathCount=0; int rows = pDEM->GetRowCount(); int cols = pDEM->GetColCount(); for ( int row=0; row < rows; row++ ) { for ( int col=0; col < cols; col++ ) { float distance = pFlowDir->GetDownFlowPathDistance( row, col, pStreamGrid ); pFPDistGrid->m_pData->Set(col, row, (distance)); } // end of: for ( col < cols ) } // end of: for ( row < rows ) pFPDistGrid->SaveGridFile("c:\\research\\maimai\\nato\\fpDist.grd"); }
/* //read Willamette Shapefile //read data with 365 rows and 9 cols. 1 column for each major subwatershed (minus the middle Willamette, for which we don't have data. 1 row for each day in year //for each day, classify map according to data //append to avi file //finish BOOL m_saveEmfOutput = TRUE; if (m_saveEmfOutput) { numMovies = 1; movieFrameRate = 30; AVIGenerators = new CAVIGenerator*[numMovies]; // array of pointers to AVI generators auxMovieStuff = new AuxMovieStuff[numMovies]; CDC* dc = gpView->GetWindowDC(); // get the window's dimensions CRect rect; gpView->GetWindowRect(rect); for(int i = 0; i < numMovies; i++) { // get output filename from user CFileDialog movieSaveDlg(FALSE, "avi", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Movie Files (*.avi)|*.avi"); CString movieFileName; if (movieSaveDlg.DoModal() == IDOK) { movieFileName = movieSaveDlg.GetPathName(); } // need to handle canceling out of the file dialog box somehow AVIGenerators[i] = new CAVIGenerator(movieFileName, (CView*)gpView, movieFrameRate); AVIGenerators[i]->InitEngine(); auxMovieStuff[i].bitmapDC.CreateCompatibleDC(dc); auxMovieStuff[i].bitmap.CreateCompatibleBitmap(dc, rect.Width(), rect.Height()); auxMovieStuff[i].bitmapDC.SelectObject(&auxMovieStuff[i].bitmap); auxMovieStuff[i].bi.bmiHeader = *AVIGenerators[i]->GetBitmapHeader(); auxMovieStuff[i].lpbi = &auxMovieStuff[i].bi; auxMovieStuff[i].bitAddress = new BYTE[3*rect.Width()*rect.Height()]; } gpView->ReleaseDC(dc); } ASSERT ( gpMapWnd != NULL ); ASSERT ( gpMapWnd->m_pMap != NULL ); gpMapWnd->m_pMap->AddShapeLayer("c:\\research\\willamette\\will2.shp", true); MapLayer *pWill = gpMapWnd->m_pMap->GetLayer(0); FDataObj pAsciiData = FDataObj(); pAsciiData.ReadAscii("c:\\research\\willamette\\willINDI.csv", ','); int numDays = pAsciiData.GetRowCount(); int numWshed = pAsciiData.GetColCount()-1; float ti = -1.0f; gpMapWnd->m_pScatterPrecip = gpMapWnd->AllocateScatter( &pAsciiData, 0 ); gpMapWnd->m_pScatterPrecip->RedrawWindow(); for (int i=0;i<numDays;i++) // for each day of the year (or row in the data) { int numSheds = pWill->m_pData->GetRowCount(); float time = -1.0f; pAsciiData.Get(0,i,time); gpMapWnd->m_pScatterPrecip->UpdateCurrentPos( time ); //gpMapWnd->m_pScatterPrecip->RedrawWindow(); for (int j=0;j<numSheds;j++) // go through each watershed (there are 12 of them) { float value = -1.0f; // and stick the data from pAsciiData into the datatable pAsciiData.Get(j+1,i,value); //dischargeValue pWill->SetData(j,pWill->GetFieldCol("EXTRA_2"),value); //add the value to the correct column in the Maplayer } CString msg; COleDateTime t( time ); CString s = t.Format("%m/%d" ); msg.Format( "Completed %s" , s ); gpMain->SetStatusMsg( msg ); pWill->SetBinColorFlag( BCF_BLUEGREEN ); pWill->SetBins( -0.2, 0.4, 20 ); pWill->SetActiveField( pWill->GetFieldCol( "EXTRA_2" ) ); pWill->ClassifyData(); if ( gpMapWnd != NULL ) gpMapWnd->RefreshList(); gpMapWnd->m_pMapList->RedrawWindow(); CDC *dc = gpMapWnd->m_pMap->GetDC(); gpMapWnd->m_pMap->DrawMap(*dc); gpMapWnd->m_pMap->ReleaseDC(dc); if (m_saveEmfOutput) { CDC* dc = gpView->GetWindowDC(); CRect rect; gpView->GetWindowRect(rect); for(int i = 0; i < numMovies; i++) { // copy from the application window to the new device context (and thus the bitmap) BOOL blitSuc = auxMovieStuff[i].bitmapDC.BitBlt(0, 0, rect.Width(), rect.Height(), dc, 0, 0, SRCCOPY); GetDIBits(auxMovieStuff[i].bitmapDC, HBITMAP(auxMovieStuff[i].bitmap), 0, rect.Height(), auxMovieStuff[i].bitAddress, auxMovieStuff[i].lpbi, DIB_RGB_COLORS); AVIGenerators[i]->AddFrame((BYTE*)auxMovieStuff[i].bitAddress); } gpView->ReleaseDC(dc); } } if(m_saveEmfOutput) { for(int i = 0; i < numMovies; i++) { AVIGenerators[i]->ReleaseEngine(); delete AVIGenerators[i]; AVIGenerators[i] = 0; //ReleaseDC(NULL,auxMovieStuff[i].bitmapDC); delete [] auxMovieStuff[i].bitAddress; } delete [] AVIGenerators; delete [] auxMovieStuff; AVIGenerators = 0; } } */ void CWet_hView::OnTopographiccalculationDisgradientandquotientforgrid() { MapLayer *pFlowDir = gpMapWnd->m_pMap->GetLayer( "FLOWDIR" ); MapLayer *pStreamGrid = gpMapWnd->m_pMap->GetLayer( "STRGRID" ); MapLayer *pFPDistGrid = gpMapWnd->m_pMap->GetLayer( "FLOWDIRX" ); MapLayer *pFPDistGrid1 = gpMapWnd->m_pMap->CloneLayer( *pFPDistGrid ); MapLayer *pFPDistGrid2 = gpMapWnd->m_pMap->CloneLayer( *pFPDistGrid ); MapLayer *pDEM = gpMapWnd->m_pMap->GetLayer("DEM"); /* float flowPathDistance=0.0f; int flowPathCount=0; float flowPathGradient = 0.0001f; int rows = pFlowDir->GetRowCount(); int cols = pFlowDir->GetColCount(); int cellCount = rows*cols; int sofar=0; for ( int row=0; row < rows; row++ ) { for ( int col=0; col < cols; col++ ) { int flowPathCellCount=0; float distance = pFlowDir->GetDownFlowPathDistance( row, col, pStreamGrid ); float gradient = pFlowDir->GetDownFlowPathGradient(row,col,pStreamGrid,pDEM,flowPathCellCount); gradient=gradient/flowPathCellCount; float dist_grad = distance/gradient; if (distance==pFlowDir->GetNoDataValue()) { dist_grad = pFlowDir->GetNoDataValue(); gradient = pFlowDir->GetNoDataValue(); } pFPDistGrid->m_pData->Set(col, row, gradient); pFPDistGrid1->m_pData->Set(col, row, distance); pFPDistGrid2->m_pData->Set(col, row, dist_grad); sofar = sofar++; gpHydroModel->m_pMap->Notify( NT_CALCDIST, sofar, cellCount ); } // end of: for ( col < cols ) } // end of: for ( row < rows ) */ float flowPathDistance=0.0f; int flowPathCount=0; float flowPathGradient = 0.0001f; MapLayer *pWatershed = gpMapWnd->m_pMap->GetLayer( "Cells" ); int polygonCount = pWatershed->GetRecordCount(); for ( int i=0; i < polygonCount; i++ ) { Poly *pThisPoly = pWatershed->m_polyArray[ i ]; float flowPathDistance=0.0f; int flowPathCount=0; float flowPathGradient = 0.0001f; int rows = pDEM->GetRowCount(); int cols = pDEM->GetColCount(); for ( int row=0; row < rows; row++ ) { for ( int col=0; col < cols; col++ ) { float x = 0; float y = 0; pDEM->GetGridCellCenter(row, col, x, y); Vertex point; point.x = x; point.y = y; if (pThisPoly->IsPointInPoly(point)) { int flowPathCellCount=0; float distance = pFlowDir->GetDownFlowPathDistance( row, col, pStreamGrid ); float gradient = pFlowDir->GetDownFlowPathGradient(row,col,pStreamGrid,pDEM,flowPathCellCount); gradient=gradient/flowPathCellCount; float dist_grad = distance/gradient; if (distance==pFlowDir->GetNoDataValue()) { dist_grad = pFlowDir->GetNoDataValue(); gradient = pFlowDir->GetNoDataValue(); } pFPDistGrid->m_pData->Set(col, row, (distance/gradient)); flowPathGradient +=gradient; flowPathDistance +=distance; } } } // end of: for ( col < cols ) } // end of: for ( row < rows ) float averageFPDistance = flowPathDistance/flowPathCount; float averageFPGrad = flowPathGradient/flowPathCount; float averageFPDistGrad = averageFPDistance/averageFPGrad; //float rt = (0.00881f*averageFPDistGrad) + 0.00314f; gpHydroModel->m_pMap->Notify( NT_CALCDIST, i, polygonCount ); pWatershed->SetData(i,pWatershed->m_pData->GetCol("EXTRA_1"), averageFPDistGrad); pFPDistGrid2->SaveGridFile("c:\\temp\\Dist_Grad.asc"); pFPDistGrid1->SaveGridFile("c:\\temp\\Dist.asc"); pFPDistGrid->SaveGridFile("c:\\temp\\Grad.asc"); }