123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304 |
- #ifndef GRASS_RASTER_H
- #define GRASS_RASTER_H
- /*** defines ***/
- #define RECLASS_TABLE 1
- #define RECLASS_RULES 2
- #define RECLASS_SCALE 3
- #define CELL_TYPE 0
- #define FCELL_TYPE 1
- #define DCELL_TYPE 2
- /* History */
- #define RECORD_LEN 80
- #define MAXEDLINES 50
- /* for G_get_raster_sample(), INTERP_TYPE */
- #define UNKNOWN 0
- #define NEAREST 1 /* nearest neighbor interpolation */
- #define BILINEAR 2 /* bilinear interpolation */
- #define CUBIC 3 /* cubic interpolation */
- /*** typedefs ***/
- typedef int CELL;
- typedef double DCELL;
- typedef float FCELL;
- typedef int RASTER_MAP_TYPE;
- /* for G_get_raster_sample() */
- typedef int INTERP_TYPE;
- /*** structures ***/
- struct Reclass
- {
- char *name; /* name of raster map being reclassed */
- char *mapset; /* mapset in which "name" is found */
- int type; /* type of reclass */
- int num; /* size of reclass table */
- CELL min; /* table min */
- CELL max; /* table max */
- CELL *table; /* reclass table */
- };
- struct FPReclass_table
- {
- DCELL dLow; /* domain low */
- DCELL dHigh; /* domain high */
- DCELL rLow; /* range low */
- DCELL rHigh; /* range high */
- };
- /* reclass structure from double to double used by r.recode to reclass */
- /* between types: int to double, float to int,... */
- struct FPReclass
- {
- int defaultDRuleSet; /* 1 if default domain rule set */
- int defaultRRuleSet; /* 1 if default range rule set */
- int infiniteLeftSet; /* 1 if negative infinite interval rule exists */
- int infiniteRightSet; /* 1 if positive infinite interval rule exists */
- int rRangeSet; /* 1 if range range (i.e. interval) is set */
- int maxNofRules;
- int nofRules;
- DCELL defaultDMin; /* default domain minimum value */
- DCELL defaultDMax; /* default domain maximum value */
- DCELL defaultRMin; /* default range minimum value */
- DCELL defaultRMax; /* default range maximum value */
- DCELL infiniteDLeft; /* neg infinite rule */
- DCELL infiniteDRight; /* neg infinite rule */
- DCELL infiniteRLeft; /* pos infinite rule */
- DCELL infiniteRRight; /* pos infinite rule */
- DCELL dMin; /* minimum domain values in rules */
- DCELL dMax; /* maximum domain values in rules */
- DCELL rMin; /* minimum range values in rules */
- DCELL rMax; /* maximum range values in rules */
- struct FPReclass_table *table;
- };
- struct Quant_table
- {
- DCELL dLow;
- DCELL dHigh;
- CELL cLow;
- CELL cHigh;
- };
- struct Quant
- {
- int truncate_only;
- int round_only;
- int defaultDRuleSet;
- int defaultCRuleSet;
- int infiniteLeftSet;
- int infiniteRightSet;
- int cRangeSet;
- int maxNofRules;
- int nofRules;
- DCELL defaultDMin;
- DCELL defaultDMax;
- CELL defaultCMin;
- CELL defaultCMax;
- DCELL infiniteDLeft;
- DCELL infiniteDRight;
- CELL infiniteCLeft;
- CELL infiniteCRight;
- DCELL dMin;
- DCELL dMax;
- CELL cMin;
- CELL cMax;
- struct Quant_table *table;
- struct
- {
- DCELL *vals;
- /* pointers to quant rules corresponding to the intervals btwn vals */
- struct Quant_table **rules;
- int nalloc;
- int active;
- DCELL inf_dmin;
- DCELL inf_dmax;
- CELL inf_min;
- CELL inf_max;
- /* all values smaller than inf_dmin become inf_min */
- /* all values larger than inf_dmax become inf_max */
- /* inf_min and/or inf_max can be NULL if there are no inf rules */
- } fp_lookup;
- };
- struct Categories
- {
- CELL ncats; /* total number of categories */
- CELL num; /* the highest cell values. Only exists
- for backwards compatibility = (CELL)
- max_fp_values in quant rules */
- char *title; /* name of data layer */
- char *fmt; /* printf-like format to generate labels */
- float m1; /* Multiplication coefficient 1 */
- float a1; /* Addition coefficient 1 */
- float m2; /* Multiplication coefficient 2 */
- float a2; /* Addition coefficient 2 */
- struct Quant q; /* rules mapping cell values to index in
- list of labels */
- char **labels; /* array of labels of size num */
- int *marks; /* was the value with this label was used? */
- int nalloc;
- int last_marked_rule;
- /* NOTE: to get a rule corresponfing to cats.labels[i], use */
- /* G_get_ith_c/f/d_raster_cat (pcats, i, val1, val2) */
- /* it calls */
- /* G_quant_get_ith_rule(&cats->q, i, val1, val2, &index, &index); */
- /* and idex ==i, because rule is added at the same time as a */
- /* label, and quant rules are never reordered. Olga apr,95 */
- };
- struct History
- {
- char mapid[RECORD_LEN];
- char title[RECORD_LEN];
- char mapset[RECORD_LEN];
- char creator[RECORD_LEN];
- char maptype[RECORD_LEN];
- char datsrc_1[RECORD_LEN];
- char datsrc_2[RECORD_LEN];
- char keywrd[RECORD_LEN];
- int edlinecnt;
- char edhist[MAXEDLINES][RECORD_LEN];
- };
- struct Cell_stats
- {
- struct Cell_stats_node
- {
- int idx;
- long *count;
- int left;
- int right;
- } *node; /* tree of values */
- int tlen; /* allocated tree size */
- int N; /* number of actual nodes in tree */
- int curp;
- long null_data_count;
- int curoffset;
- };
- struct Histogram
- {
- int num;
- struct Histogram_list
- {
- CELL cat;
- long count;
- } *list;
- };
- struct Range
- {
- CELL min;
- CELL max;
- int first_time; /* whether or not range was updated */
- };
- struct FPRange
- {
- DCELL min;
- DCELL max;
- int first_time; /* whether or not range was updated */
- };
- struct FP_stats {
- int geometric;
- int geom_abs;
- int flip;
- int count;
- DCELL min, max;
- unsigned long *stats;
- unsigned long total;
- };
- struct GDAL_link;
- struct _Color_Value_
- {
- DCELL value;
- unsigned char red;
- unsigned char grn;
- unsigned char blu;
- };
- struct _Color_Rule_
- {
- struct _Color_Value_ low, high;
- struct _Color_Rule_ *next;
- struct _Color_Rule_ *prev;
- };
- struct _Color_Info_
- {
- struct _Color_Rule_ *rules;
- int n_rules;
- struct
- {
- unsigned char *red;
- unsigned char *grn;
- unsigned char *blu;
- unsigned char *set;
- int nalloc;
- int active;
- } lookup;
- struct
- {
- DCELL *vals;
- /* pointers to color rules corresponding to the intervals btwn vals */
- struct _Color_Rule_ **rules;
- int nalloc;
- int active;
- } fp_lookup;
- DCELL min, max;
- };
- struct Colors
- {
- int version; /* set by read_colors: -1=old,1=new */
- DCELL shift;
- int invert;
- int is_float; /* defined on floating point raster data? */
- int null_set; /* the colors for null are set? */
- unsigned char null_red;
- unsigned char null_grn;
- unsigned char null_blu;
- int undef_set; /* the colors for cells not in range are set? */
- unsigned char undef_red;
- unsigned char undef_grn;
- unsigned char undef_blu;
- struct _Color_Info_ fixed;
- struct _Color_Info_ modular;
- DCELL cmin;
- DCELL cmax;
- int organizing;
- };
- typedef struct
- {
- unsigned char r, g, b, a; /* red, green, blue, and alpha */
- } RGBA_Color;
- typedef RGBA_Color RGB_Color;
- /* RGBA_Color alpha presets */
- #define RGBA_COLOR_OPAQUE 255
- #define RGBA_COLOR_TRANSPARENT 0
- #define RGBA_COLOR_NONE 0
- /*** prototypes ***/
- #include <grass/rasterdefs.h>
- #endif /* GRASS_RASTER_H */
|