1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
|
/*
* modified by Brown in June 1999 - added elatt & smatt
* modified by Mitasova Nov. 9, 1999 - added parameter for dtens to output2d
*/
#include "Vect.h"
#include "bitmap.h"
#include "dataquad.h"
#include "qtree.h"
#include "dbmi.h"
/* for resample program */
struct fcell_triple {
double x;
double y;
FCELL z;
double smooth;
};
#ifdef POINT2D_C
struct line_pnts *Pnts;
struct line_cats *Cats2;
dbDriver *driver2;
dbString sql2;
struct Map_info Map2;
struct field_info *ff;
int count;
#else
extern struct line_pnts *Pnts;
extern struct line_cats *Cats2;
extern dbDriver *driver2;
extern dbString sql2;
extern struct Map_info Map2;
extern struct field_info *ff;
extern int count;
#endif
struct interp_params
{
double zmult; /* multiplier for z-values */
FILE *fdinp; /* input stream */
int elatt; /* which floating point attr to use? first = 1, second = 2, etc */
int smatt; /* which floating point attr to use for smoothing? first = 1, second = 2, etc */
int kmin; /* min number of points per segment for interpolation */
int kmax; /* max number of points per segment */
char *maskmap; /* name of mask */
int nsizr,nsizc; /* number of rows and columns */
DCELL *az,*adx,*ady,*adxx,*adyy,*adxy; /* array for interpolated values */
double fi; /* tension */
int KMAX2; /* max num. of points for interp.*/
int scik1,scik2,scik3; /* multipliers for interp. values*/
double rsm; /* smoothing */
char *elev,*slope,*aspect,*pcurv,*tcurv,*mcurv; /* output files */
double dmin; /* min distance between points */
double x_orig, y_orig; /* origin */
int deriv,cv; /* 1 if compute partial derivs */
double theta; /* anisotropy angle, 0=East,counter-clockwise */
double scalex; /* anisotropy scaling factor */
struct TimeStamp *ts; /* timestamp for raster files */
FILE *Tmp_fd_z,*Tmp_fd_dx,*Tmp_fd_dy, /* temp files for writing interp.*/
*Tmp_fd_xx,*Tmp_fd_yy,*Tmp_fd_xy; /* values */
FILE *fddevi; /* pointer to deviations file */
int (*grid_calc) (); /*calculates grid for given segm*/
int (*matrix_create) (); /*creates matrix for a given segm*/
int (*check_points) (); /*checks interp. func. at points */
int (*secpar) (); /* calculates aspect,slope,curv. */
double (*interp) (); /* radial based interp. function*/
int (*interpder) (); /* interp. func. for derivatives */
int (*wr_temp) (); /* writes temp files */
};
/* distance.c */
double IL_dist_square(double *, double *, int);
/* func2d.c */
double IL_crst(double, double);
int IL_crstg(double, double, double *, double *);
/* init2d.c */
void IL_init_params_2d(struct interp_params *, FILE *, int, int, double,
int, int, char *, int, int,
DCELL *, DCELL *, DCELL *, DCELL *, DCELL *, DCELL *,
double, int, int, int, int, double,
char *, char *, char *, char *, char *, char *,
double, double, double, int, double, double,
FILE *, FILE *, FILE *, FILE *, FILE *, FILE *, FILE *, struct TimeStamp *,int);
void IL_init_func_2d(struct interp_params *, int (*)(), int (*)(), int (*)(), int (*)(), double (*)(), int (*)(), int (*)());
/* input2d.c */
int IL_input_data_2d(struct interp_params *, struct tree_info *, double *, double *, double *, double *, double *, double *, int *);
struct BM *IL_create_bitmask(struct interp_params *);
int translate_quad(struct multtree *, double, double, double, int);
/* interp2d.c */
int IL_grid_calc_2d(struct interp_params *, struct quaddata *, struct BM *, double, double, double *, double *, double *, double *, double *, double *, double *, double *, double *, double *, int, double);
/* matrix.c */
int IL_matrix_create(struct interp_params *, struct triple *, int, double **, int *);
/* minmax.c */
int min1(int, int);
int max1(int, int);
double amax1(double, double);
double amin1(double, double);
/* newsegm2d.c */
int IL_interp_segments_new_2d(struct interp_params *, struct tree_info *, struct multtree *, struct BM *, double, double, double *, double *, double *, double *, double *, double *, double *, double *, double *, int, int, double);
/* output2d.c */
int IL_output_2d(struct interp_params *, struct Cell_head *, double, double, double, double, double, double, double, double, double, double, double, char *, double, int, int, int);
/* point2d.c */
int IL_check_at_points_2d(struct interp_params *, struct quaddata *, double *, double *, double, double, struct triple);
/* resout2d.c */
/* resout2dmod.c */
int IL_resample_output_2d(struct interp_params *, double, double, double, double, double, double, double, double, double, double, double, char *, double *, struct Cell_head *, struct Cell_head *, char *, int);
/* ressegm2d.c */
int IL_resample_interp_segments_2d(struct interp_params *, struct BM *, double, double, double *, double *, double *, double *, double *, double *, double *, double *, double *, int, double *, int, int, int, int, int, double, double, double, double, int);
/* secpar2d.c */
int IL_secpar_loop_2d(struct interp_params *, int, int, int, struct BM *, double *, double *, double *, double *, double *, double *, int, int);
/* segmen2d.c */
int IL_interp_segments_2d(struct interp_params *, struct tree_info *, struct multtree *, struct BM *, double, double, double *, double *, double *, double *, double *, double *, double *, double *, double *, int, int, double);
/* vinput2d.c */
int IL_vector_input_data_2d(struct interp_params *, struct Map_info *, int, char *, char *, struct tree_info *, double *, double *, double *, double *, double *, double *, int *, double *);
int process_point(double, double, double, double, struct tree_info *, double, double *, double *, double *, double *, double *, double *, int *, int *, int *);
/* write2d.c */
int IL_write_temp_2d(struct interp_params *, int, int, int);
|