pihmRasterLIBS/catProcessing.cpp

Go to the documentation of this file.
00001 #include <stdio.h>
00002 #include "lsm.h"
00003 #include "./../pihmLIBS/shapefil.h"
00004 
00005 void findIJCat(short **fdr, int i, int j, int *mIJ);
00006 int catchmentGrid(char *segFile, char *fdrFile, char *catFile);
00007 int trace(float **seg, short int **fdr, float **cat, int i, int j);
00008 
00009 int catchmentGrid(char *segFile, char *fdrFile, char *catFile){
00010     int i, j;
00011     int mIJ[2];
00012     int err; 
00013     
00014     err=gridread(fdrFile,(void ***)&dir,RPSHRDTYPE,&nx,&ny,&dx,&dy,bndbox,&csize,&mval,&filetype);
00015     err=gridread(segFile,(void ***)&elev,RPFLTDTYPE,&nx,&ny,&dx,&dy,bndbox,&csize,&mval,&filetype); 
00016     err=gridread(segFile,(void ***)&slope,RPFLTDTYPE,&nx,&ny,&dx,&dy,bndbox,&csize,&mval,&filetype); 
00017     //printf("here1\n");
00018     
00019     // THIS LOOP CAN BE ELIMINATED BY CHANGING (SLOPE[I][J] < 0) FROM == IN THE NEXT FOR LOOP
00020     for(i=0; i<nx; i++){
00021         for(j=0; j<ny; j++){
00022             if(slope[i][j]<0)
00023                 slope[i][j]=0;
00024         }
00025     }
00026     
00027     //printf("here2\n");
00028     
00029     for(i=0; i<nx; i++){
00030         for(j=0; j<ny; j++){
00031             //printf("->%d\t%d\t%d\n", i, j, dir[i][j]); //getchar(); getchar();
00032             if(slope[i][j] == 0 && dir[i][j]!=-1){
00033                 //printf("-->%d\t%d\t%d\n", i, j, dir[i][j]);// getchar(); getchar();
00034                 findIJCat(dir, i, j, mIJ);
00035                 slope[i][j]=trace(elev, dir, slope, mIJ[0], mIJ[1]);
00036             }
00037         }
00038     }
00039     //printf("here3\n");
00040     //printf("before gridwrite\n");
00041     err = gridwrite(catFile,(void **)slope,RPFLTDTYPE,nx,ny,dx,dy,bndbox,csize,mval,filetype);
00042     //printf("before gridwrite\n");
00043 }
00044 
00045 int trace(float **seg, short int **fdr, float **cat, int i, int j){
00046     int mIJ[2];
00047     //printf("in trace\n");
00048     
00049     if(seg[i][j]>0){
00050         //printf("in trace 1\n"); // getchar(); getchar();
00051         return seg[i][j];
00052     }
00053     else if(cat[i][j] != 0){
00054         //printf("in trace 2\n"); // getchar(); getchar();
00055         return cat[i][j];
00056     }
00057     else if(fdr[i][j] == -1){
00058         return fdr[i][j];
00059     }
00060     else{
00061          //printf("in trace 3\n");
00062          //printf("%d\t%d\t%d\n", i, j, fdr[i][j]); // getchar(); getchar();
00063          findIJCat(fdr, i, j, mIJ);
00064          cat[i][j]=trace(seg, fdr, cat, mIJ[0], mIJ[1]);
00065     }
00066     return cat[i][j];
00067 }
00068       
00069 void findIJCat(short **fdr, int i, int j, int *mIJ){
00070      // i => column : j => row
00071     //printf("fdr= %d %d %d\n",i,j,fdr[i][j]);
00072     if(fdr[i][j]==4 || fdr[i][j]==5 || fdr[i][j]==6)
00073         mIJ[0]=i-1;
00074     else if(fdr[i][j]==2 || fdr[i][j]==1 || fdr[i][j]==8)
00075         mIJ[0]=i+1;
00076     else
00077         mIJ[0]=i;
00078     
00079     if(fdr[i][j]==4 || fdr[i][j]==3 || fdr[i][j]==2)
00080         mIJ[1]=j-1;
00081     else if(fdr[i][j]==6 || fdr[i][j]==7 || fdr[i][j]==8)
00082         mIJ[1]=j+1;
00083     else
00084         mIJ[1]=j;
00085     
00086     return;
00087 }

Generated on Sun Aug 5 17:34:00 2007 for PIHMgis by  doxygen 1.5.2