//--------------------------------------------------------- bool CInterpolation::Interpolate(void) { if( On_Initialize() ) { int ix, iy; double x, y, z; for(iy=0, y=m_pGrid->Get_YMin(); iy<m_pGrid->Get_NY() && Set_Progress(iy, m_pGrid->Get_NY()); iy++, y+=m_pGrid->Get_Cellsize()) { for(ix=0, x=m_pGrid->Get_XMin(); ix<m_pGrid->Get_NX(); ix++, x+=m_pGrid->Get_Cellsize()) { if( Get_Value(x, y, z) ) { m_pGrid->Set_Value(ix, iy, z); } else { m_pGrid->Set_NoData(ix, iy); } } } On_Finalize(); return( true ); } return( false ); }
//--------------------------------------------------------- bool CFlow::On_Execute(void) { bool bResult = false; long n; double d; //------------------------------------------------- pDTM = Parameters("ELEVATION") ->asGrid(); pRoute = Parameters("SINKROUTE") ->asGrid(); pWeight = Parameters("WEIGHT") ->asGrid(); pCatch = Parameters("CAREA") ->asGrid(); DataObject_Set_Colors(pCatch, 100, SG_COLORS_WHITE_BLUE); pCatch_Height = NULL; pCatch_Slope = NULL; pCatch_Aspect = NULL; pFlowPath = NULL; Step = Parameters("STEP") ->asInt(); //------------------------------------------------- On_Initialize(); //------------------------------------------------- if( pCatch ) { pCatch ->Assign(0.0); } if( pCatch_Height ) { pCatch_Height ->Assign(0.0); } if( pCatch_Slope ) { pCatch_Slope ->Assign(0.0); } if( pCatch_Aspect ) { pCatch_Aspect ->Assign(0.0); pCatch_AspectY = SG_Create_Grid(pCatch_Aspect); } if( pFlowPath ) { pFlowPath ->Assign(0.0); } //------------------------------------------------- if( bPoint ) { bPoint = false; if( is_InGrid(xPoint, yPoint) ) { Calculate(xPoint, yPoint); On_Finalize(); for(n=0; n<Get_NCells(); n++) { d = pCatch->asDouble(n); pCatch->Set_Value(n, 100.0 * d); } bResult = true; } } else { pCatch_Height = Parameters("CHEIGHT") ->asGrid(); pCatch_Slope = Parameters("CSLOPE") ->asGrid(); Calculate(); On_Finalize(); Finalize(); bResult = true; } //------------------------------------------------- return( bResult ); }
//--------------------------------------------------------- bool CKriging_Base::On_Execute(void) { bool bResult = false; //----------------------------------------------------- m_Block = Parameters("BLOCK" )->asBool() ? Parameters("DBLOCK")->asDouble() / 2.0 : 0.0; m_bStdDev = Parameters("TQUALITY")->asInt() == 0; m_bLog = Parameters("LOG" )->asBool(); m_pPoints = Parameters("POINTS" )->asShapes(); m_zField = Parameters("ZFIELD" )->asInt(); if( m_pPoints->Get_Count() <= 1 ) { SG_UI_Msg_Add(_TL("not enough points for interpolation"), true); return( false ); } //----------------------------------------------------- CSG_Table Variogram; if( SG_UI_Get_Window_Main() ) { static CVariogram_Dialog dlg; if( dlg.Execute(m_pPoints, m_zField, m_bLog, &Variogram, &m_Model) ) { bResult = true; } } else { int nSkip = Parameters("VAR_NSKIP" )->asInt(); int nClasses = Parameters("VAR_NCLASSES")->asInt(); double maxDistance = Parameters("VAR_MAXDIST" )->asDouble(); m_Model.Set_Formula(Parameters("VAR_MODEL")->asString()); if( CSG_Variogram::Calculate(m_pPoints, m_zField, m_bLog, &Variogram, nClasses, maxDistance, nSkip) ) { m_Model.Clr_Data(); for(int i=0; i<Variogram.Get_Count(); i++) { CSG_Table_Record *pRecord = Variogram.Get_Record(i); m_Model.Add_Data(pRecord->asDouble(CSG_Variogram::FIELD_DISTANCE), pRecord->asDouble(CSG_Variogram::FIELD_VAR_EXP)); } bResult = m_Model.Get_Trend() || m_Model.Get_Parameter_Count() == 0; } } //----------------------------------------------------- if( bResult && (bResult = _Initialise_Grids() && On_Initialize()) ) { Message_Add(CSG_String::Format(SG_T("%s: %s"), _TL("variogram model"), m_Model.Get_Formula(SG_TREND_STRING_Formula_Parameters).c_str()), false); for(int y=0; y<m_pGrid->Get_NY() && Set_Progress(y, m_pGrid->Get_NY()); y++) { #pragma omp parallel for for(int x=0; x<m_pGrid->Get_NX(); x++) { double z, v; if( Get_Value(m_pGrid->Get_System().Get_Grid_to_World(x, y), z, v) ) { Set_Value(x, y, z, v); } else { Set_NoData(x, y); } } } } //----------------------------------------------------- m_Model.Clr_Data(); On_Finalize(); return( bResult ); }