GRASS 8 Programmer's Manual 8.6.0dev(2026)-ddeab64dbf
Loading...
Searching...
No Matches
quant_rw.c
Go to the documentation of this file.
1/*!
2 * \file lib/raster/quant_rw.c
3 *
4 * \brief Raster Library - Quantization rules (read/write).
5 *
6 * (C) 1999-2009 by the GRASS Development Team
7 *
8 * This program is free software under the GNU General Public
9 * License (>=v2). Read the file COPYING that comes with GRASS
10 * for details.
11 *
12 * \author USACERL and many others
13 */
14
15#include <string.h>
16
17#include <grass/gis.h>
18#include <grass/raster.h>
19#include <grass/glocale.h>
20
21/*!
22 \brief Writes the quant rules.
23
24 Writes the quant rules which indicate that all floating numbers
25 should be truncated instead of applying any quant rules from
26 floats to integers.
27
28 \param name map name
29 \param mapset mapset name
30 */
31void Rast_truncate_fp_map(const char *name, const char *mapset)
32{
33 struct Quant quant;
34
35 Rast_quant_init(&quant);
36 Rast_quant_truncate(&quant);
37 /* quantize the map */
38 Rast_write_quant(name, mapset, &quant);
39}
40
41/*!
42 \brief Writes the quant rules.
43
44 Writes the quant rules which indicate that all floating numbers
45 should be rounded instead of applying any quant rules from
46 floats to integers.
47
48 \param name map name
49 \param mapset mapset name
50 */
51void Rast_round_fp_map(const char *name, const char *mapset)
52{
53 struct Quant quant;
54
55 Rast_quant_init(&quant);
56 Rast_quant_round(&quant);
57 /* round the map */
58 Rast_write_quant(name, mapset, &quant);
59}
60
61/*!
62 * \brief Write quant rules (f_quant) for floating-point raster map.
63 *
64 * Writes the <tt>f_quant</tt> file for the raster map <em>name</em>
65 * with one rule. The rule is generated using the floating-point range
66 * in <tt>f_range</tt> producing the integer range
67 * [<em>cmin,cmax</em>].
68 *
69 * Make a rule for map <name> that maps floating range (d_min, d_max)
70 * into integer range (min, max)
71 * This function is useful when the quant rule doesn't depend of the
72 * range of produced float data, for example the slope map would
73 * want to have a quant rule: 0.0, 90.0 -> 0 , 90
74 * no matter what the min and max slope of this map is.
75
76 * \param name map name
77 * \param mapset mapset name
78 * \param min minimum value
79 * \param max maximum value
80 */
81void Rast_quantize_fp_map(const char *name, const char *mapset, CELL min,
82 CELL max)
83{
85 struct FPRange fp_range;
86
87 if (Rast_read_fp_range(name, mapset, &fp_range) < 0)
88 G_fatal_error(_("Unable to read fp range for raster map <%s>"),
92 G_fatal_error(_("Raster map <%s> is empty"),
95}
96
97/*!
98 * \brief Write quant rules (f_quant) for floating-point raster map.
99 *
100 * Writes the <tt>f_quant</tt> file for the raster map
101 * <em>name</em> with one rule. The rule is generated using the floating-point
102 * range [<em>dmin,dmax</em>] and the integer range
103 * [<em>min,max</em>].
104 * This routine differs from the one above in that the application controls the
105 * floating-point range. For example, r.slope.aspect will use this routine to
106 * quantize the slope map from [0.0, 90.0] to [0,
107 * 90] even if the range of slopes is not 0-90. The aspect map would be
108 * quantized from [0.0, 360.0] to [0, 360].
109 *
110 * Make a rule for map <name> that maps floating range (d_min, d_max)
111 * into integer range (min, max)
112 * This function is useful when the quant rule doesn't depend of the
113 * range of produced float data, for example the slope map would
114 * want to have a quant rule: 0.0, 90.0 -> 0 , 90
115 * no matter what the min and max slope of this map is.
116 *
117 * \param name map name
118 * \param mapset mapset name
119 * \param d_min minimum fp value
120 * \param d_max maximum fp value
121 * \param min minimum value
122 * \param max maximum value
123 */
124void Rast_quantize_fp_map_range(const char *name, const char *mapset,
126{
127 struct Quant quant;
128
129 Rast_quant_init(&quant);
131 /* quantize the map */
132 Rast_write_quant(name, mapset, &quant);
133}
134
135/*!
136 * \brief Writes the quant rule table for the raster map
137 *
138 * Writes the <tt>f_quant</tt> file for the raster map <em>name</em>
139 * from <em>q</em>. if mapset==G_mapset() i.e. the map is in current
140 * mapset, then the original quant file in cell_misc/map/f_quant is
141 * written. Otherwise <em>q</em> is written into quant2/mapset/name
142 * (much like colr2 element). This results in map@mapset being read
143 * using quant rules stored in <em>q</em> from G_mapset(). See
144 * Rast_read_quant() for detailes.
145 *
146 * \param name map name
147 * \param mapset mapset name
148 * \param quant pointer to Quant structure which hold quant rules info
149 */
150void Rast_write_quant(const char *name, const char *mapset,
151 const struct Quant *quant)
152{
155
156 if (Rast_map_type(name, mapset) == CELL_TYPE) {
157 G_warning(_("Unable to write quant rules: raster map <%s> is integer"),
158 name);
159 return;
160 }
161
163
164 /* first actually write the rules */
165 if (Rast__quant_export(name, mapset, quant) < 0)
166 G_fatal_error(_("Unable to write quant rules for raster map <%s>"),
167 name);
168}
169
170/*!
171 * \brief
172 *
173 * Reads quantization rules for <i>name</i> in <i>mapset</i> and
174 * stores them in the quantization structure. If the map is in another
175 * mapset, first checks for quant2 table for this map in current
176 * mapset.
177 * \param name
178 * \param mapset
179 * \param quant
180 *
181 * \return -2 if raster map is of type integer
182 * \return -1 if (!G_name_is_fully_qualified())
183 * \return 0 if quantization file does not exist, or the file is empty or has
184 * wrong format \return 1 if non-empty quantization file exists
185 *
186 */
187int Rast_read_quant(const char *name, const char *mapset, struct Quant *quant)
188{
189 Rast_quant_init(quant);
190 return Rast__quant_import(name, mapset, quant);
191}
void void void void G_fatal_error(const char *,...) __attribute__((format(printf
void G_warning(const char *,...) __attribute__((format(printf
char * G_fully_qualified_name(const char *, const char *)
Get fully qualified element name.
Definition nme_in_mps.c:101
void Rast_quant_round(struct Quant *)
Sets the quant rules to perform simple rounding on floats.
Definition quant.c:230
int Rast_read_fp_range(const char *, const char *, struct FPRange *)
Read floating-point range.
int Rast_quant_get_limits(const struct Quant *, DCELL *, DCELL *, CELL *, CELL *)
Returns the minimum and maximum cell and dcell values of all the ranges defined.
Definition quant.c:281
void Rast_get_fp_range_min_max(const struct FPRange *, DCELL *, DCELL *)
Get minimum and maximum value from fp range.
int Rast__quant_import(const char *, const char *, struct Quant *)
Reads quantization rules (internal use only)
Definition quant_io.c:95
RASTER_MAP_TYPE Rast_map_type(const char *, const char *)
Determine raster data type.
void Rast_quant_add_rule(struct Quant *, DCELL, DCELL, CELL, CELL)
Adds a new rule to the set of quantization rules.
Definition quant.c:469
void Rast_quant_init(struct Quant *)
Initialize the structure.
Definition quant.c:175
#define Rast_is_d_null_value(dcellVal)
int Rast__quant_export(const char *, const char *, const struct Quant *)
Writes the quantization rules (internal use only)
Definition quant_io.c:274
void Rast_quant_truncate(struct Quant *)
Sets the quant rules to perform simple truncation on floats.
Definition quant.c:217
#define min(x, y)
Definition draw2.c:29
#define max(x, y)
Definition draw2.c:30
double DCELL
Definition gis.h:635
int CELL
Definition gis.h:634
#define _(str)
Definition glocale.h:10
const char * name
Definition named_colr.c:6
void Rast_round_fp_map(const char *name, const char *mapset)
Writes the quant rules.
Definition quant_rw.c:51
void Rast_truncate_fp_map(const char *name, const char *mapset)
Writes the quant rules.
Definition quant_rw.c:31
void Rast_quantize_fp_map_range(const char *name, const char *mapset, DCELL d_min, DCELL d_max, CELL min, CELL max)
Write quant rules (f_quant) for floating-point raster map.
Definition quant_rw.c:124
void Rast_quantize_fp_map(const char *name, const char *mapset, CELL min, CELL max)
Write quant rules (f_quant) for floating-point raster map.
Definition quant_rw.c:81
void Rast_write_quant(const char *name, const char *mapset, const struct Quant *quant)
Writes the quant rule table for the raster map.
Definition quant_rw.c:150
int Rast_read_quant(const char *name, const char *mapset, struct Quant *quant)
Reads quantization rules for name in mapset and stores them in the quantization structure....
Definition quant_rw.c:187
#define CELL_TYPE
Definition raster.h:11
Definition raster.h:80