26 #ifndef __TERRALIB_MAPTOOLS_INTERNAL_GROUPINGALGORITHMS_H
27 #define __TERRALIB_MAPTOOLS_INTERNAL_GROUPINGALGORITHMS_H
31 #include "../core/translator/Translator.h"
32 #include "../common/StringUtils.h"
33 #include "../fe/Utils.h"
34 #include "../se/Description.h"
35 #include "../se/Rule.h"
46 #define MIN(a,b) ( (a<b) ? a : b )
50 #define MAX(a,b) ( (a>b) ? a : b )
70 std::vector<te::se::Rule*>& rules,
int precision);
95 template<
class iterator>
96 void GroupingByEqualSteps(std::string attrName, iterator begin, iterator end,
int nSteps, std::vector<te::se::Rule*>& rules,
99 double min = std::numeric_limits<double>::max();
100 double max = -std::numeric_limits<double>::max();
111 double min_slice, max_slice;
113 double slice = (max - min)/
double(nSteps);
115 for(
int i = 0; i < nSteps; ++i)
120 min_slice = min + double(i) * slice;
125 max_slice = min + double(i + 1) * slice;
129 std::string* ruleNamePtr =
new std::string(ruleName);
130 ruleItem->
setName(ruleNamePtr);
133 rules.push_back(ruleItem);
149 template<
class iterator>
150 void GroupingByQuantil(std::string attrName, iterator begin, iterator end,
int nSteps, std::vector<te::se::Rule*>& rules,
155 int size =
static_cast<int>(end - begin);
156 double steps = (double)size / (
double)nSteps;
158 std::vector< std::pair<std::string, std::string> > pairMinMax;
165 std::string maxValue =
"";
167 int p = (int)(steps * (
double)++n + .5);
175 std::pair<std::string, std::string> pair(minValue, maxValue);
177 pairMinMax.push_back(pair);
182 double min = (*begin);
183 double max = (*(end-1));
192 for (std::size_t t = 0; t < pairMinMax.size(); ++t)
195 std::string ruleName =
"[" + pairMinMax[t].first +
", " + pairMinMax[t].second +
"[";
196 std::string* ruleNamePtr =
new std::string(ruleName);
197 ruleItem->
setName(ruleNamePtr);
200 rules.push_back(ruleItem);
217 template<
class iterator>
218 void GroupingByStdDeviation(std::string attrName, iterator begin, iterator end,
double nDevs, std::vector<te::se::Rule*>& rules,
219 std::string& meanTitle,
int precision = 0)
222 double min = std::numeric_limits<double>::max();
223 double max = -std::numeric_limits<double>::max();
224 long double sum = 0.;
225 long double sm2 = 0.;
233 sm2 += ((*it) * (*it));
237 double count = (double)(end - begin);
238 double mean = (double)(sum / count);
239 long double var = (sm2 / count) - (mean * mean);
240 double stdDev = sqrt(var);
242 double slice = stdDev * nDevs;
244 std::vector<te::se::Rule*> aux;
249 while (val - slice > min - slice)
253 double v = val - slice;
255 std::string* ruleNamePtr =
new std::string(ruleName);
256 ruleItem->
setName(ruleNamePtr);
259 aux.push_back(ruleItem);
264 std::vector<te::se::Rule*>::reverse_iterator sit;
265 for (sit = aux.rbegin(); sit != aux.rend(); ++sit)
266 rules.push_back(*sit);
268 meanTitle =
TE_TR(
"Mean - ") + strMean;
271 std::string* ruleNamePtr =
new std::string(meanTitle);
272 ruleItemMean->
setName(ruleNamePtr);
274 rules.push_back(ruleItemMean);
277 while (val + slice < max + slice)
281 double v = val + slice;
283 std::string* ruleNamePtr =
new std::string(ruleName);
284 ruleItem->
setName(ruleNamePtr);
287 aux.push_back(ruleItem);
#define MIN(a, b)
Macro that returns min between two values.
#define MAX(a, b)
Macro that returns max between two values.
#define TE_TR(message)
It marks a string in order to get translated.
A Rule is used to attach property/scale conditions to and group the individual symbols used for rende...
void setName(std::string *name)
void setFilter(te::fe::Filter *f)
std::string Convert2String(boost::int16_t value)
It converts a short integer value to a string.
TEFEEXPORT te::fe::Filter * CreateFilterByStep(const std::string &attrName, const std::string &minValue, const std::string &maxValue)
TEMAPEXPORT double AdjustToPrecision(double val, int precision, bool reduce=false)
It adjusts a value to the precision specified.
void GroupingByStdDeviation(std::string attrName, iterator begin, iterator end, double nDevs, std::vector< te::se::Rule * > &rules, std::string &meanTitle, int precision=0)
It groups the values defined by a range of iterators using the standard deviation algorithm.
TEMAPEXPORT void GroupingByUniqueValues(std::string attrName, std::vector< std::string > &inputValues, int dataType, std::vector< te::se::Rule * > &rules, int precision)
It groups the values using the unique value algorithm.
void GroupingByQuantil(std::string attrName, iterator begin, iterator end, int nSteps, std::vector< te::se::Rule * > &rules, int precision=0)
It groups the values defined by a range of iterators using the quantil algorithm.
void GroupingByEqualSteps(std::string attrName, iterator begin, iterator end, int nSteps, std::vector< te::se::Rule * > &rules, int precision=0)
It groups the values defined by a range of iterators using the equal steps algorithm.
Proxy configuration file for TerraView (see terraview_config.h).