int catchmentGrid(char *segFile, char *fdrFile, char *catFile){
    int i, j;
    int mIJ[2];
    int err; 
    
    err=gridread(fdrFile,(void ***)&dir,RPSHRDTYPE,&nx,&ny,&dx,&dy,bndbox,&csize,&mval,&filetype);
    err=gridread(segFile,(void ***)&elev,RPFLTDTYPE,&nx,&ny,&dx,&dy,bndbox,&csize,&mval,&filetype); 
    err=gridread(segFile,(void ***)&slope,RPFLTDTYPE,&nx,&ny,&dx,&dy,bndbox,&csize,&mval,&filetype); 
    //printf("here1\n");
    
    // THIS LOOP CAN BE ELIMINATED BY CHANGING (SLOPE[I][J] < 0) FROM == IN THE NEXT FOR LOOP
    for(i=0; i<nx; i++){
        for(j=0; j<ny; j++){
            if(slope[i][j]<0)
                slope[i][j]=0;
        }
    }
    
    //printf("here2\n");
    
    for(i=0; i<nx; i++){
        for(j=0; j<ny; j++){
            //printf("->%d\t%d\t%d\n", i, j, dir[i][j]); //getchar(); getchar();
            if(slope[i][j] == 0 && dir[i][j]!=-1){
                //printf("-->%d\t%d\t%d\n", i, j, dir[i][j]);// getchar(); getchar();
                findIJCat(dir, i, j, mIJ);
                slope[i][j]=trace(elev, dir, slope, mIJ[0], mIJ[1]);
            }
        }
    }
    //printf("here3\n");
    //printf("before gridwrite\n");
    err = gridwrite(catFile,(void **)slope,RPFLTDTYPE,nx,ny,dx,dy,bndbox,csize,mval,filetype);
    //printf("before gridwrite\n");
}
Exemple #2
0
int setdir(char *demfile, char *angfile, char *slopefile, char *pfile)
{
  int err,filetype;
  float mval;
  double bndbox[4],csize;

/* define directions */
  d1[1]=0; d1[2]= -1; d1[3]= -1; d1[4]= -1; d1[5]=0; d1[6]=1; d1[7]=1; d1[8]=1;
  d2[1]=1; d2[2]=1; d2[3]=0; d2[4]= -1; d2[5]= -1; d2[6]= -1; d2[7]=0; d2[8]=1;


  err=gridread(demfile,(void ***)&elev,RPFLTDTYPE,&nx,&ny,&dx,&dy,
               bndbox,&csize,&mval,&filetype);
  if(err != 0) goto ERROR2;

/*  allocate  dir and stack arrays  */
  dir = (short **) matalloc(nx, ny, RPSHRDTYPE);

  i1=0; i2=0; n1=nx; n2=ny;  /*  full grid  */
  err=setdfnoflood(mval);
  if(err != 0) goto ERROR1;
/*  err = gridwrite(pfile,(void **)dir,RPSHRDTYPE,nx,ny,dx,dy,
    bndbox,csize,-1,filetype);   */

/*  allocate memory for slope and angle  */
  slope = (float **) matalloc(nx, ny, RPFLTDTYPE);
  ang = (float **) matalloc(nx, ny, RPFLTDTYPE);
  setdf2();
  err = gridwrite(slopefile,(void **)slope,RPFLTDTYPE,nx,ny,dx,dy,
                  bndbox,csize,-1.,filetype);
  if (err != 0) goto ERROR3;
  err = gridwrite(angfile,(void **)ang,RPFLTDTYPE,nx,ny,dx,dy,
                  bndbox,csize,-2.,filetype);
  if (err != 0) goto ERROR3;

/*  Wrapping up  */
  err=0;
ERROR3:
  free(slope[0]);
  free(slope);
  free(ang[0]);
  free(ang);
ERROR1:
  free(dir[0]);
  free(dir);
ERROR2:
  free(elev[0]);
  free(elev);
  return(err);
}
Exemple #3
0
int flood(char *demfile, char *pointfile, char *newfile)
{
  int err;
/*  float mval;
  double bndbox[4],csize;    These are external now */   

/* define directions */
   d1[1]=0; d1[2]= -1; d1[3]= -1; d1[4]= -1; d1[5]=0; d1[6]=1; d1[7]=1; d1[8]=1;
   d2[1]=1; d2[2]=1; d2[3]=0; d2[4]= -1; d2[5]= -1; d2[6]= -1; d2[7]=0; d2[8]=1;

  err=gridread(demfile,(void ***)&elev,RPFLTDTYPE,&nx,&ny,&dx,&dy,bndbox,&csize,&mval,&filetype);
             
  if(err != 0)return(err);
/*  allocate  dir and stack arrays  */
  dir = (short **) matalloc(nx, ny, RPSHRDTYPE);
  apool = (short **) matalloc(nx, ny, RPSHRDTYPE);
  istack = (int) (nx * ny * 0.1);
  pstack=istack;
  dn = (short *)malloc(sizeof(short) * istack);
  is = (short *)malloc(sizeof(short) * istack);
  js = (short *)malloc(sizeof(short) * istack);
  ipool = (short *)malloc(sizeof(short) * pstack);
  jpool = (short *)malloc(sizeof(short) * pstack);
  if(dn == NULL || is == NULL || js == NULL || ipool == NULL || jpool == NULL)
  {
     printf("\nError:  Cannot allocate memory for stacks\n");
     return(11);
  }
/*  nmax=200;   Decided to elim iteration
  nnx=nx/nmax+1;
  nny=ny/nmax+1;
  while(nnx > 1 || nny > 1)
  {
    for(ix=0; ix<nnx; ix++)for(iy=0; iy<nny; iy++)
    {
      i1=ix*nmax;
      n1=i1+nmax;
      if(n1>nx)
      {
        n1=nx;
        i1=nx-nmax;
        if(i1<0)i1=0;
      }
      i2=iy*nmax;
      n2=i2+nmax;
      if(n2>ny)
      {
        n2=ny;
        i2=ny-nmax;
        if(i2<0)i2=0;
      }
      printf("Ranges: %d %d %d %d\n",i1,n1,i2,n2);
      setdf(mval);   /*  this call for range i1,n1,i2,n2  
    }
    nmax=(int) (nmax*3.5) ; 
    nnx=nx/nmax+1;
    nny=ny/nmax+1;
  }  /*  end of while  */
  i1=0; i2=0; n1=nx; n2=ny;  /*  full grid  */ 
  printf("Grid size: %d x %d\n",n1,n2);
  setdf(mval);
/*  free stacks  */
  free(dn); free(is); free(js); free(ipool); free(jpool); 
  free(apool[0]); free(apool);
/*    filetype=0;   0=ASCII   1= ARCVIEW proprietary  */
  printf("Writing output ...");
  err = gridwrite(newfile,(void **)elev,RPFLTDTYPE,nx,ny,dx,dy,
             bndbox,csize,mval,filetype);
  if(err != 0)return(err);
/*  err = gridwrite(pointfile,(void **)dir,RPSHRDTYPE,nx,ny,dx,dy,
             bndbox,csize,-1,filetype);  
  if(err != 0)return(err);    */ 
  return(0);  /*  ALL OK return from flood  */
}