New feature in chart:

average lines


git-svn-id: file:///home/jan/tmp/wetterstation/trunk@205 dd492736-c11a-0410-ad51-8c26713eaf7f
This commit is contained in:
losinshi 2007-01-02 05:57:06 +00:00
parent 8e6d8a5f0b
commit af3d7d51a5
14 changed files with 157 additions and 11 deletions

View File

@ -41,6 +41,7 @@
#define DEFAULT_LABEL_SUM "no" #define DEFAULT_LABEL_SUM "no"
#define DEFAULT_ZERO_MIN "no" #define DEFAULT_ZERO_MIN "no"
#define DEFAULT_AS_BARS "no" #define DEFAULT_AS_BARS "no"
#define DEFAULT_SHOW_AVERAGE "yes"
#define DEFAULT_WIDTH "800" #define DEFAULT_WIDTH "800"
#define DEFAULT_HEIGHT "300" #define DEFAULT_HEIGHT "300"
#define DEFAULT_SENS_ID "1" #define DEFAULT_SENS_ID "1"
@ -56,6 +57,7 @@
#define DEFAULT_DIA_BG_COLOR "F0:A0:D0:D0" #define DEFAULT_DIA_BG_COLOR "F0:A0:D0:D0"
#define DEFAULT_ZERO_LINE_COLOR "BF:80:80:40" #define DEFAULT_ZERO_LINE_COLOR "BF:80:80:40"
#define DEFAULT_DIA_LINE_COLOR "60:30:50:30" #define DEFAULT_DIA_LINE_COLOR "60:30:50:30"
#define DEFAULT_DIA_AV_LINE_COLOR "30:60:50:30"
#define DEFAULT_DIA_GRID_X_COLOR "60:60:60:EF" #define DEFAULT_DIA_GRID_X_COLOR "60:60:60:EF"
#define DEFAULT_DIA_GRID_Y_COLOR "60:60:60:EF" #define DEFAULT_DIA_GRID_Y_COLOR "60:60:60:EF"
#define DEFAULT_DIA_BORDER_COLOR "a0:a0:a0:af" #define DEFAULT_DIA_BORDER_COLOR "a0:a0:a0:af"

View File

@ -62,6 +62,10 @@ y_axis_desc Temparatur (
x_format %d.%m.%y # 'Normale' Labels x_format %d.%m.%y # 'Normale' Labels
x_format_extra %d.%m.%y| %H:%M # Das ersre und das letzte Label x_format_extra %d.%m.%y| %H:%M # Das ersre und das letzte Label
# Gibt an, ob eine Linie mit den Durchschnittswerten gezeichnet werden soll
# Funktioniert NICHT in Verbindung mit Balkendiagrammen
show_average yes
# Folgende Angaben sind vor allem fuer die Balkendiagramme wichtig. # Folgende Angaben sind vor allem fuer die Balkendiagramme wichtig.
# Sonst sollten sie imer auf no stehen! # Sonst sollten sie imer auf no stehen!
zero_min no # Die Nullinie auf jeden Fall anzeigen zero_min no # Die Nullinie auf jeden Fall anzeigen
@ -82,6 +86,7 @@ bg_color FF:FA:F5:00 # Gesamthintergrund des Diagrames
dia_bg_color F0:D0:A0:D0 # Hintergrund des Bereiches mit den Daten dia_bg_color F0:D0:A0:D0 # Hintergrund des Bereiches mit den Daten
zero_line_color DF:80:80:40 # Farbe der 'Nulllinie' zero_line_color DF:80:80:40 # Farbe der 'Nulllinie'
dia_line_color 80:30:30:30 # Farbe der Balken oder der Linie dia_line_color 80:30:30:30 # Farbe der Balken oder der Linie
dia_av_line_color 50:A0:50:D0 # Farbe der Durchschnittswert-Linie
dia_grid_x_color 60:60:60:EF # Farbe der Senkrechten Striche dia_grid_x_color 60:60:60:EF # Farbe der Senkrechten Striche
dia_grid_y_color 60:60:60:EF # Farbe der Waagerechten Striche dia_grid_y_color 60:60:60:EF # Farbe der Waagerechten Striche
dia_border_color a0:a0:a0:a0 # Farbe des Diagramrahmens (rahmen um den Datenbereich) dia_border_color a0:a0:a0:a0 # Farbe des Diagramrahmens (rahmen um den Datenbereich)

View File

@ -62,6 +62,10 @@ y_axis_desc Luftfeuchte (%)
x_format %d.%m.%y # 'Normale' Labels x_format %d.%m.%y # 'Normale' Labels
x_format_extra %d.%m.%y| %H:%M # Das ersre und das letzte Label x_format_extra %d.%m.%y| %H:%M # Das ersre und das letzte Label
# Gibt an, ob eine Linie mit den Durchschnittswerten gezeichnet werden soll
# Funktioniert NICHT in Verbindung mit Balkendiagrammen
show_average yes
# Folgende Angaben sind vor allem fuer die Balkendiagramme wichtig. # Folgende Angaben sind vor allem fuer die Balkendiagramme wichtig.
# Sonst sollten sie imer auf no stehen! # Sonst sollten sie imer auf no stehen!
zero_min no # Die Nullinie auf jeden Fall anzeigen zero_min no # Die Nullinie auf jeden Fall anzeigen
@ -82,6 +86,7 @@ bg_color FF:FA:F5:00 # Gesamthintergrund des Diagrames
dia_bg_color F0:D0:A0:D0 # Hintergrund des Bereiches mit den Daten dia_bg_color F0:D0:A0:D0 # Hintergrund des Bereiches mit den Daten
zero_line_color DF:80:80:40 # Farbe der 'Nulllinie' zero_line_color DF:80:80:40 # Farbe der 'Nulllinie'
dia_line_color 80:30:30:30 # Farbe der Balken oder der Linie dia_line_color 80:30:30:30 # Farbe der Balken oder der Linie
dia_av_line_color 50:A0:50:D0 # Farbe der Durchschnittswert-Linie
dia_grid_x_color 60:60:60:EF # Farbe der Senkrechten Striche dia_grid_x_color 60:60:60:EF # Farbe der Senkrechten Striche
dia_grid_y_color 60:60:60:EF # Farbe der Waagerechten Striche dia_grid_y_color 60:60:60:EF # Farbe der Waagerechten Striche
dia_border_color a0:a0:a0:a0 # Farbe des Diagramrahmens (rahmen um den Datenbereich) dia_border_color a0:a0:a0:a0 # Farbe des Diagramrahmens (rahmen um den Datenbereich)

View File

@ -62,6 +62,10 @@ y_axis_desc Luftdruck (hpa)
x_format %d.%m.%y # 'Normale' Labels x_format %d.%m.%y # 'Normale' Labels
x_format_extra %d.%m.%y| %H:%M # Das ersre und das letzte Label x_format_extra %d.%m.%y| %H:%M # Das ersre und das letzte Label
# Gibt an, ob eine Linie mit den Durchschnittswerten gezeichnet werden soll
# Funktioniert NICHT in Verbindung mit Balkendiagrammen
show_average yes
# Folgende Angaben sind vor allem fuer die Balkendiagramme wichtig. # Folgende Angaben sind vor allem fuer die Balkendiagramme wichtig.
# Sonst sollten sie imer auf no stehen! # Sonst sollten sie imer auf no stehen!
zero_min no # Die Nullinie auf jeden Fall anzeigen zero_min no # Die Nullinie auf jeden Fall anzeigen
@ -82,6 +86,7 @@ bg_color FF:FA:F5:00 # Gesamthintergrund des Diagrames
dia_bg_color F0:D0:A0:D0 # Hintergrund des Bereiches mit den Daten dia_bg_color F0:D0:A0:D0 # Hintergrund des Bereiches mit den Daten
zero_line_color DF:80:80:40 # Farbe der 'Nulllinie' zero_line_color DF:80:80:40 # Farbe der 'Nulllinie'
dia_line_color 80:30:30:30 # Farbe der Balken oder der Linie dia_line_color 80:30:30:30 # Farbe der Balken oder der Linie
dia_av_line_color 50:A0:50:D0 # Farbe der Durchschnittswert-Linie
dia_grid_x_color 60:60:60:EF # Farbe der Senkrechten Striche dia_grid_x_color 60:60:60:EF # Farbe der Senkrechten Striche
dia_grid_y_color 60:60:60:EF # Farbe der Waagerechten Striche dia_grid_y_color 60:60:60:EF # Farbe der Waagerechten Striche
dia_border_color a0:a0:a0:a0 # Farbe des Diagramrahmens (rahmen um den Datenbereich) dia_border_color a0:a0:a0:a0 # Farbe des Diagramrahmens (rahmen um den Datenbereich)

View File

@ -62,6 +62,10 @@ y_axis_desc Niederschlag (Liter)
x_format %d.%m.%y # 'Normale' Labels x_format %d.%m.%y # 'Normale' Labels
x_format_extra %d.%m.%y| %H:%M # Das ersre und das letzte Label x_format_extra %d.%m.%y| %H:%M # Das ersre und das letzte Label
# Gibt an, ob eine Linie mit den Durchschnittswerten gezeichnet werden soll
# Funktioniert NICHT in Verbindung mit Balkendiagrammen
show_average no
# Folgende Angaben sind vor allem fuer die Balkendiagramme wichtig. # Folgende Angaben sind vor allem fuer die Balkendiagramme wichtig.
# Sonst sollten sie imer auf no stehen! # Sonst sollten sie imer auf no stehen!
zero_min yes # Die Nullinie auf jeden Fall anzeigen zero_min yes # Die Nullinie auf jeden Fall anzeigen
@ -82,6 +86,7 @@ bg_color FF:FA:F5:00 # Gesamthintergrund des Diagrames
dia_bg_color F0:D0:A0:D0 # Hintergrund des Bereiches mit den Daten dia_bg_color F0:D0:A0:D0 # Hintergrund des Bereiches mit den Daten
zero_line_color DF:80:80:40 # Farbe der 'Nulllinie' zero_line_color DF:80:80:40 # Farbe der 'Nulllinie'
dia_line_color 30:30:80:50 # Farbe der Balken oder der Linie dia_line_color 30:30:80:50 # Farbe der Balken oder der Linie
dia_av_line_color 50:A0:50:D0 # Farbe der Durchschnittswert-Linie
dia_grid_x_color 60:60:60:EF # Farbe der Senkrechten Striche dia_grid_x_color 60:60:60:EF # Farbe der Senkrechten Striche
dia_grid_y_color 60:60:60:EF # Farbe der Waagerechten Striche dia_grid_y_color 60:60:60:EF # Farbe der Waagerechten Striche
dia_border_color a0:a0:a0:a0 # Farbe des Diagramrahmens (rahmen um den Datenbereich) dia_border_color a0:a0:a0:a0 # Farbe des Diagramrahmens (rahmen um den Datenbereich)

View File

@ -62,6 +62,10 @@ y_axis_desc Temparatur (
x_format %d.%m.%y # 'Normale' Labels x_format %d.%m.%y # 'Normale' Labels
x_format_extra %d.%m.%y| %H:%M # Das ersre und das letzte Label x_format_extra %d.%m.%y| %H:%M # Das ersre und das letzte Label
# Gibt an, ob eine Linie mit den Durchschnittswerten gezeichnet werden soll
# Funktioniert NICHT in Verbindung mit Balkendiagrammen
show_average yes
# Folgende Angaben sind vor allem fuer die Balkendiagramme wichtig. # Folgende Angaben sind vor allem fuer die Balkendiagramme wichtig.
# Sonst sollten sie imer auf no stehen! # Sonst sollten sie imer auf no stehen!
zero_min no # Die Nullinie auf jeden Fall anzeigen zero_min no # Die Nullinie auf jeden Fall anzeigen
@ -82,6 +86,7 @@ bg_color FF:FA:F5:00 # Gesamthintergrund des Diagrames
dia_bg_color F0:D0:A0:D0 # Hintergrund des Bereiches mit den Daten dia_bg_color F0:D0:A0:D0 # Hintergrund des Bereiches mit den Daten
zero_line_color DF:80:80:40 # Farbe der 'Nulllinie' zero_line_color DF:80:80:40 # Farbe der 'Nulllinie'
dia_line_color 80:30:30:30 # Farbe der Balken oder der Linie dia_line_color 80:30:30:30 # Farbe der Balken oder der Linie
dia_av_line_color 50:A0:50:D0 # Farbe der Durchschnittswert-Linie
dia_grid_x_color 60:60:60:EF # Farbe der Senkrechten Striche dia_grid_x_color 60:60:60:EF # Farbe der Senkrechten Striche
dia_grid_y_color 60:60:60:EF # Farbe der Waagerechten Striche dia_grid_y_color 60:60:60:EF # Farbe der Waagerechten Striche
dia_border_color a0:a0:a0:a0 # Farbe des Diagramrahmens (rahmen um den Datenbereich) dia_border_color a0:a0:a0:a0 # Farbe des Diagramrahmens (rahmen um den Datenbereich)

View File

@ -5,14 +5,14 @@ manual_table no
manual_table_name auss2_data manual_table_name auss2_data
table_field temp table_field temp
#table_field press #table_field press
gen_interval 10 gen_interval 1
show_interval 10d show_interval 1y
label_interval 1d label_interval 30d
fixed_timepoint yes fixed_timepoint no
timepoint 2006-12-17-13-00 timepoint 2006-12-17-13-00
width 800 width 800
height 300 height 300
ensor_id 1 sensor_id 4
value_koeffizient 0.1 value_koeffizient 0.1
#value_koeffizient 1.0 #value_koeffizient 1.0
unit °C unit °C
@ -23,6 +23,7 @@ x_format_extra %d.%m.%y| %H:%M
zero_min no zero_min no
as_bars no as_bars no
label_sum no label_sum no
show_average yes
@ -30,6 +31,7 @@ bg_color DF:DF:EF:00
dia_bg_color F0:A0:D0:D0 dia_bg_color F0:A0:D0:D0
zero_line_color BF:80:80:40 zero_line_color BF:80:80:40
dia_line_color 60:30:50:30 dia_line_color 60:30:50:30
dia_av_line_color 50:60:30:D0
dia_grid_x_color 60:60:60:EF dia_grid_x_color 60:60:60:EF
dia_grid_y_color 60:60:60:EF dia_grid_y_color 60:60:60:EF
dia_border_color a0:a0:a0:af dia_border_color a0:a0:a0:af

View File

@ -62,6 +62,10 @@ y_axis_desc Windgeschwindigkeit (km/h)
x_format %d.%m.%y # 'Normale' Labels x_format %d.%m.%y # 'Normale' Labels
x_format_extra %d.%m.%y| %H:%M # Das ersre und das letzte Label x_format_extra %d.%m.%y| %H:%M # Das ersre und das letzte Label
# Gibt an, ob eine Linie mit den Durchschnittswerten gezeichnet werden soll
# Funktioniert NICHT in Verbindung mit Balkendiagrammen
show_average yes
# Folgende Angaben sind vor allem fuer die Balkendiagramme wichtig. # Folgende Angaben sind vor allem fuer die Balkendiagramme wichtig.
# Sonst sollten sie imer auf no stehen! # Sonst sollten sie imer auf no stehen!
zero_min no # Die Nullinie auf jeden Fall anzeigen zero_min no # Die Nullinie auf jeden Fall anzeigen
@ -82,6 +86,7 @@ bg_color FF:FA:F5:00 # Gesamthintergrund des Diagrames
dia_bg_color F0:D0:A0:D0 # Hintergrund des Bereiches mit den Daten dia_bg_color F0:D0:A0:D0 # Hintergrund des Bereiches mit den Daten
zero_line_color DF:80:80:40 # Farbe der 'Nulllinie' zero_line_color DF:80:80:40 # Farbe der 'Nulllinie'
dia_line_color 80:30:30:30 # Farbe der Balken oder der Linie dia_line_color 80:30:30:30 # Farbe der Balken oder der Linie
dia_av_line_color 50:A0:50:D0 # Farbe der Durchschnittswert-Linie
dia_grid_x_color 60:60:60:EF # Farbe der Senkrechten Striche dia_grid_x_color 60:60:60:EF # Farbe der Senkrechten Striche
dia_grid_y_color 60:60:60:EF # Farbe der Waagerechten Striche dia_grid_y_color 60:60:60:EF # Farbe der Waagerechten Striche
dia_border_color a0:a0:a0:a0 # Farbe des Diagramrahmens (rahmen um den Datenbereich) dia_border_color a0:a0:a0:a0 # Farbe des Diagramrahmens (rahmen um den Datenbereich)

View File

@ -54,12 +54,14 @@ typedef struct image_cfg {
char *x_fmt; /* Formatstring fuer die restlichen Labels */ char *x_fmt; /* Formatstring fuer die restlichen Labels */
int zero_min; /* Nullinie auf jeden Fall anzeigen */ int zero_min; /* Nullinie auf jeden Fall anzeigen */
int bars; /* Balken malen statt einer Linie */ int bars; /* Balken malen statt einer Linie */
int show_average; /* Durchschnittslinie zeichnen */
int dflt_dir; /* Standart - Verzeichnis fuer die Bilder */ int dflt_dir; /* Standart - Verzeichnis fuer die Bilder */
/* Farben */ /* Farben */
img_color_ptr bg_color; img_color_ptr bg_color;
img_color_ptr dia_bg_color; img_color_ptr dia_bg_color;
img_color_ptr dia_line_color; img_color_ptr dia_line_color;
img_color_ptr dia_av_line_color;
img_color_ptr dia_grid_x_color; img_color_ptr dia_grid_x_color;
img_color_ptr dia_grid_y_color; img_color_ptr dia_grid_y_color;
img_color_ptr dia_border_color; img_color_ptr dia_border_color;

View File

@ -61,6 +61,7 @@ static const config_keyword keywords[] = {
{"sensor_id", read_int, &(img_cfg.sens_id), DEFAULT_SENS_ID}, {"sensor_id", read_int, &(img_cfg.sens_id), DEFAULT_SENS_ID},
{"zero_min", read_yn, &(img_cfg.zero_min), DEFAULT_ZERO_MIN}, {"zero_min", read_yn, &(img_cfg.zero_min), DEFAULT_ZERO_MIN},
{"as_bars", read_yn, &(img_cfg.bars), DEFAULT_AS_BARS}, {"as_bars", read_yn, &(img_cfg.bars), DEFAULT_AS_BARS},
{"show_average", read_yn, &(img_cfg.show_average), DEFAULT_SHOW_AVERAGE},
{"x_axis_desc", read_str, &(img_cfg.x_desc), DEFAULT_X_AX_DESC}, {"x_axis_desc", read_str, &(img_cfg.x_desc), DEFAULT_X_AX_DESC},
{"y_axis_desc", read_str, &(img_cfg.y_desc), DEFAULT_Y_AX_DESC}, {"y_axis_desc", read_str, &(img_cfg.y_desc), DEFAULT_Y_AX_DESC},
{"x_format", read_fmt_str, &(img_cfg.x_fmt), DEFAULT_X_FORMAT}, {"x_format", read_fmt_str, &(img_cfg.x_fmt), DEFAULT_X_FORMAT},
@ -71,6 +72,7 @@ static const config_keyword keywords[] = {
{"bg_color", read_color, &(img_cfg.bg_color), DEFAULT_BG_COLOR}, {"bg_color", read_color, &(img_cfg.bg_color), DEFAULT_BG_COLOR},
{"dia_bg_color", read_color, &(img_cfg.dia_bg_color), DEFAULT_DIA_BG_COLOR}, {"dia_bg_color", read_color, &(img_cfg.dia_bg_color), DEFAULT_DIA_BG_COLOR},
{"dia_line_color", read_color, &(img_cfg.dia_line_color), DEFAULT_DIA_LINE_COLOR}, {"dia_line_color", read_color, &(img_cfg.dia_line_color), DEFAULT_DIA_LINE_COLOR},
{"dia_av_line_color", read_color, &(img_cfg.dia_av_line_color), DEFAULT_DIA_AV_LINE_COLOR},
{"dia_grid_x_color", read_color, &(img_cfg.dia_grid_x_color), DEFAULT_DIA_GRID_X_COLOR}, {"dia_grid_x_color", read_color, &(img_cfg.dia_grid_x_color), DEFAULT_DIA_GRID_X_COLOR},
{"dia_grid_y_color", read_color, &(img_cfg.dia_grid_y_color), DEFAULT_DIA_GRID_Y_COLOR}, {"dia_grid_y_color", read_color, &(img_cfg.dia_grid_y_color), DEFAULT_DIA_GRID_Y_COLOR},
{"dia_border_color", read_color, &(img_cfg.dia_border_color), DEFAULT_DIA_BORDER_COLOR}, {"dia_border_color", read_color, &(img_cfg.dia_border_color), DEFAULT_DIA_BORDER_COLOR},

View File

@ -40,10 +40,11 @@ static pix_list_ptr max = NULL; /* Pointer auf Max - Element */
double real_min = 0; /* Realer Max - Wert */ double real_min = 0; /* Realer Max - Wert */
double real_max = 0; /* Realer Min - Wert */ double real_max = 0; /* Realer Min - Wert */
static long base_time; /* Zeit an der 0-Koordinate (lt. Datenbank!) */ static long base_time; /* Zeit an der 0-Koordinate (lt. Datenbank!) */
int max_diff = 0; /* Maximaler Abstand, den 2 Werte haben duerfen, ohne das die Linie unterbrochen wird */
/* Funktionsdefinitionen */ /* Funktionsdefinitionen */
static pix_list_ptr add_pix_value(pix_list_ptr , long, int , int, int ); static pix_list_ptr add_pix_value(pix_list_ptr , int , int, int );
static char *get_conn_string(); static char *get_conn_string();
static PGconn *pg_check_connect(char *); static PGconn *pg_check_connect(char *);
static PGresult *pg_check_exec(PGconn *, char *); static PGresult *pg_check_exec(PGconn *, char *);
@ -297,7 +298,6 @@ pix_list_ptr get_pix_list(int c_width){
int pix_coord; /* x - Koordinate, an die der Wert gehoert */ int pix_coord; /* x - Koordinate, an die der Wert gehoert */
int i, s, t, u; /* Laufvariable zum durchlaufen des Datenbank-resuls */ int i, s, t, u; /* Laufvariable zum durchlaufen des Datenbank-resuls */
long timestamp; long timestamp;
int max_diff;
pix_list_ptr list_ptr = NULL; /* Zeiger auf den Anfang der Wertliste */ pix_list_ptr list_ptr = NULL; /* Zeiger auf den Anfang der Wertliste */
pix_list_ptr temp_ptr = NULL; /* Zeiger zum durchlaufen der Wertliste */ pix_list_ptr temp_ptr = NULL; /* Zeiger zum durchlaufen der Wertliste */
@ -347,7 +347,7 @@ pix_list_ptr get_pix_list(int c_width){
pix_coord = floor( ((double)time_temp) * seconds_per_pix) ; pix_coord = floor( ((double)time_temp) * seconds_per_pix) ;
/* Listenelement generieren */ /* Listenelement generieren */
temp_ptr = add_pix_value(temp_ptr, timestamp, pix_coord, atoi( PQgetvalue(res, i, val_field) ) , max_diff); temp_ptr = add_pix_value(temp_ptr, pix_coord, atoi( PQgetvalue(res, i, val_field) ) , max_diff);
/* Rueckgabe- und Max/Min-pointer zuweisen */ /* Rueckgabe- und Max/Min-pointer zuweisen */
if (list_ptr == NULL){ if (list_ptr == NULL){
@ -371,7 +371,7 @@ pix_list_ptr get_pix_list(int c_width){
time_temp = timestamp; time_temp = timestamp;
} }
pix_coord = floor( ((double)time_temp) * seconds_per_pix) ; pix_coord = floor( ((double)time_temp) * seconds_per_pix) ;
temp_ptr = add_pix_value(temp_ptr, timestamp, pix_coord, 0 , max_diff); temp_ptr = add_pix_value(temp_ptr, pix_coord, 0 , max_diff);
list_ptr = temp_ptr; list_ptr = temp_ptr;
min = temp_ptr; min = temp_ptr;
max = temp_ptr; max = temp_ptr;
@ -419,7 +419,7 @@ pix_list_ptr get_pix_list(int c_width){
} }
/* Speichert einen geholten Wert ab */ /* Speichert einen geholten Wert ab */
static pix_list_ptr add_pix_value(pix_list_ptr ptr, long timestamp, int coord, int value, int max_diff){ static pix_list_ptr add_pix_value(pix_list_ptr ptr, int coord, int value, int max_diff){
int old_coord; int old_coord;
/* Erstes Element */ /* Erstes Element */
@ -464,6 +464,84 @@ static pix_list_ptr add_pix_value(pix_list_ptr ptr, long timestamp, int coord, i
} }
/* Durchschnittslinie
* reale Werte, eff. Zeichenbreite */
pix_list_ptr build_average_line(pix_list_ptr real_list, int c_width){
int list_count = 0;
int list_offset = 0;
int field_size = c_width;
int i,j,m;
double sum = 0;
double koeff = 0;
double count = 0;
pix_list_ptr old_temp = real_list;
pix_list_ptr *old_ptr_field = malloc(sizeof(pix_list_ptr) * (field_size));
pix_list_ptr new_list = NULL;
pix_list_ptr new_list_temp = NULL;
list_offset = old_temp->x_pix_coord;
DEBUGOUT2("list_offset %d\n", list_offset);
for(; old_temp; old_temp = old_temp->next){
if(list_count >= field_size){
field_size += c_width;
realloc(old_ptr_field, sizeof(pix_list_ptr) * (field_size));
}
DEBUGOUT2("list_count: %d -- ", list_count);
DEBUGOUT2("old_temp->x_pix_coord: %d -- ",old_temp->x_pix_coord);
while( (list_count + list_offset) > old_temp->x_pix_coord){
old_ptr_field[list_count] = NULL;
list_count++;
DEBUGOUT1("Fuege Null hinzu\n");
}
old_ptr_field[list_count] = old_temp;
DEBUGOUT1("Fuege Wert hinzu\n");
list_count++;
}
for(i = 0; i < list_count; i++){
if(old_ptr_field[i] != NULL){
sum = ((double)old_ptr_field[i]->value_sum) / ((double)old_ptr_field[i]->value_count);
count = 1;
for(j = 1; j < 30; j++){
koeff = 0.9 - (0.01 * (3*j));
m = 0;
if( (i - j) >= 0){
if(old_ptr_field[i-j] != NULL){
sum += (((double)old_ptr_field[i-j]->value_sum) / ((double)old_ptr_field[i-j]->value_count)) * koeff;
m++;
}
}
if( (i + j) < list_count){
if(old_ptr_field[i+j] != NULL){
sum += (((double)old_ptr_field[i+j]->value_sum) / ((double)old_ptr_field[i+j]->value_count)) * koeff;
m++;
}
}
count += m * koeff;
}
new_list_temp = add_pix_value(new_list_temp, old_ptr_field[i]->x_pix_coord, floor(sum / count), max_diff);
if(new_list == NULL){
new_list = new_list_temp;
}
}
}
free(old_ptr_field);
return new_list;
}
/* baut den String fuer die Postgres-Verbindung zusammen */ /* baut den String fuer die Postgres-Verbindung zusammen */
static char *get_conn_string(){ static char *get_conn_string(){

View File

@ -50,6 +50,13 @@ typedef struct label_list {
*/ */
pix_list_ptr get_pix_list(int ); pix_list_ptr get_pix_list(int );
/* Baut die Durchschnittslinie.
* 1. Argument: Die Daten der Linie mit den 'realen' Werten
* 2. Argument: die effektive Breite des Bereiches in dem gezeichnet werden soll
* Rueckgabe: die liste mit den Werten
*/
pix_list_ptr build_average_line(pix_list_ptr real_list, int c_width);
/* Max. Wert */ /* Max. Wert */
pix_list_ptr get_min_val(); pix_list_ptr get_min_val();

View File

@ -86,6 +86,7 @@ static gdImagePtr draw_image(gdImagePtr img){
/* Werte und Labels */ /* Werte und Labels */
pix_list_ptr pix_list = NULL; pix_list_ptr pix_list = NULL;
pix_list_ptr average_pix_list = NULL;
label_list_ptr x_labels = NULL; label_list_ptr x_labels = NULL;
label_list_ptr y_labels = NULL; label_list_ptr y_labels = NULL;
@ -117,6 +118,7 @@ static gdImagePtr draw_image(gdImagePtr img){
/* Farben */ /* Farben */
color val_line_c = alloc_alpha_color(img, img_cfg.dia_line_color); color val_line_c = alloc_alpha_color(img, img_cfg.dia_line_color);
color av_line_c = alloc_alpha_color(img, img_cfg.dia_av_line_color);
color zero_line_c = alloc_alpha_color(img, img_cfg.zero_line_color); color zero_line_c = alloc_alpha_color(img, img_cfg.zero_line_color);
color dia_bg_c = alloc_alpha_color(img, img_cfg.dia_bg_color); color dia_bg_c = alloc_alpha_color(img, img_cfg.dia_bg_color);
color diag_grid_x_c = alloc_alpha_color(img, img_cfg.dia_grid_x_color); color diag_grid_x_c = alloc_alpha_color(img, img_cfg.dia_grid_x_color);
@ -165,7 +167,10 @@ static gdImagePtr draw_image(gdImagePtr img){
gdImageStringFT(img, &brect[0], desc_x_c, IMG_FONT, 9, 0 , (offset_x_left + (dia_width / 2)) - (x_desc_d.width / 2), (img_cfg.height - 5) - x_desc_d.l_b_y, img_cfg.x_desc); gdImageStringFT(img, &brect[0], desc_x_c, IMG_FONT, 9, 0 , (offset_x_left + (dia_width / 2)) - (x_desc_d.width / 2), (img_cfg.height - 5) - x_desc_d.l_b_y, img_cfg.x_desc);
/* Werte holen */ /* Werte holen */
pix_list = get_pix_list(dia_width); pix_list = get_pix_list(dia_width);
if(!img_cfg.bars && img_cfg.show_average){
average_pix_list = build_average_line(pix_list, dia_width);
}
/* Diagramhintergrund */ /* Diagramhintergrund */
gdImageFilledRectangle(img, offset_x_left, offset_y_top, img_cfg.width - offset_x_right, img_cfg.height - offset_y_bottom, dia_bg_c); gdImageFilledRectangle(img, offset_x_left, offset_y_top, img_cfg.width - offset_x_right, img_cfg.height - offset_y_bottom, dia_bg_c);
@ -181,6 +186,9 @@ static gdImagePtr draw_image(gdImagePtr img){
/* y-Werte skalieren */ /* y-Werte skalieren */
zero_line = scale_y_coords(pix_list, dia_height); zero_line = scale_y_coords(pix_list, dia_height);
if(!img_cfg.bars && img_cfg.show_average){
scale_y_coords(average_pix_list, dia_height);
}
/* Vertikale linien + x - Labels*/ /* Vertikale linien + x - Labels*/
x_labels = get_x_label_list(dia_width); x_labels = get_x_label_list(dia_width);
@ -199,6 +207,15 @@ static gdImagePtr draw_image(gdImagePtr img){
gdImageLine(img, offset_x_left, zero_line + offset_y_top, img_cfg.width - offset_x_right, zero_line + offset_y_top, zero_line_c); gdImageLine(img, offset_x_left, zero_line + offset_y_top, img_cfg.width - offset_x_right, zero_line + offset_y_top, zero_line_c);
/* Durchschnitts-Werte Zeichnen */
if(!img_cfg.bars && img_cfg.show_average){
for (; average_pix_list->next; average_pix_list = average_pix_list->next){
if(!average_pix_list->next->no_line){
gdImageLine(img, (offset_x_left + average_pix_list->x_pix_coord), (offset_y_top + average_pix_list->y_pix_coord), (offset_x_left + average_pix_list->next->x_pix_coord), (offset_y_top + average_pix_list->next->y_pix_coord), av_line_c);
}
}
}
/* Werte Zeichnen */ /* Werte Zeichnen */
if(!img_cfg.bars){ if(!img_cfg.bars){
for (; pix_list->next; pix_list = pix_list->next){ for (; pix_list->next; pix_list = pix_list->next){

6
debian/changelog vendored
View File

@ -1,3 +1,9 @@
weatherstation (1.0.6-1) stable; urgency=low
* New feature added in chart-program: Now it can draw a average.line
-- Jan Losinski <losinski@wh2.tu-dresden.de> Tue, 2 Jan 2007 06:54:55 +0100
weatherstation (1.0.5-2) stable; urgency=low weatherstation (1.0.5-2) stable; urgency=low
* chart-example-configs updated * chart-example-configs updated