source: ether_eccad/trunk/API_EXTRACT/src/grid.h @ 70

Last change on this file since 70 was 70, checked in by cbipsl, 14 years ago

maj eccad V3.2

  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 3.5 KB
Line 
1#ifndef  _GRID_H_
2#define _GRID_H_
3#include <stdlib.h>
4#include <stdio.h>
5#include <string.h>
6#include <values.h>
7
8#include <list.h>
9
10// la structure interval de temps
11typedef struct {
12   char debut[10];
13   char fin[10];
14}Temporal, *ptrTemporal;
15
16ptrTemporal allocTemporal(char *datdeb, char *datfin);
17void freeTemporal(ptrTemporal t);
18
19// la structure parametre
20typedef struct {
21   int id;
22   int unit;
23   char *name;
24   double  mini;
25   double  maxi;
26   char *nameunite;
27}Param, *ptrParam;
28
29ptrParam allocParam(int id, int unit, char *name, double mini, double maxi, char* nameunite);
30
31void freeParam(ptrParam);
32int inParamId( int *id, ptrParam p);
33
34// la structure Grid
35typedef struct {
36   int width;
37   int height;
38   unsigned int *datas;
39   char date[10];
40   char dateEndPeriod[10];
41   char delta[30];
42   unsigned int mini;    // valeurs extremes calculées
43   unsigned int maxi;
44   int isSum;
45}Grid, *ptrGrid;
46
47typedef struct {
48   char date[10];    // AAAAMMJJ //
49   double value;     // valeur en flottant d'un pt de grille
50}Pt, *ptrPt;
51
52ptrPt allocPt( char *date, double value);
53#define freePt(p) free((p))
54
55// les times series
56typedef struct {
57   
58   double lat;        //position
59   double lon;
60   LIST  pts;
61   ptrTemporal dates; //extremes
62}Serial, *ptrSerial;
63
64/* structure d'une zone geographique */
65typedef struct{
66  double latMin;
67  double latMax;
68  double lonMin;
69  double lonMax;
70}Zone, *ptrZone;
71
72#define lat2y(zone, lat)\
73 (double)(((double)(lat) -(zone)->latMin ) / ((zone)->latMax - (zone)->latMin))
74#define lon2x(zone, lon)\
75 (double)(((double)(lon) - (zone)->lonMin) / ((zone)->lonMax - (zone)->lonMin))
76
77#define x2lon(zone, x)\
78 (zone)->lonMin + (double)x * ((zone)->lonMax - (zone)->lonMin);
79#define y2lat(zone, y)\
80 (zone)->latMin + (double)y * ((zone)->latMax - (zone)->latMin);
81
82/* conversions 0-1 -> grille */
83#define x2i(x, grid) ((int)( (double)(x) * (double)((grid)->width  ) ))
84#define y2j(y, grid) ((int)( (double)(y) * (double)((grid)->height ) ))
85#define i2x(i, grid) (((double)(i) + 0.5) / (double)((grid)->width  ))
86#define j2y(j, grid) (((double)(j) + 0.5) / (double)((grid)->height ))
87
88/* conversions latlon -> grid */
89#define lat2j(lat, g, zone) y2j(lat2y((zone), (lat)), (g))
90#define lon2i(lon, g, zone) x2i(lon2x((zone), (lon)), (g))
91#define i2lon(i, g, zone) x2lon(zone, i2x(i, (g)) )
92#define j2lat(j, g, zone) y2lat(zone, j2y(j, (g)) )
93
94
95ptrGrid allocGrid(int width, int height);
96ptrGrid dupGrid(ptrGrid g);
97void freeGrid(ptrGrid);
98void freeGrids(LIST grids);
99
100
101//grille géocaliséO
102typedef struct {
103   ptrParam param;
104   ptrGrid grid;
105   ptrZone zone;
106}GridGL, *ptrGridGL;
107
108ptrGridGL allocGridGL(ptrGrid g, ptrZone z);
109void freeGridGL(ptrGridGL);
110
111// convertisseurs codage grille <->flottant
112#define int2v(i, min, max)                              \
113   (double)(min) +                                      \
114    (                                                   \
115      ((double)(max)-(double)(min)) /                   \
116      (double)((unsigned)MAXINT +(unsigned)MAXINT)      \
117    ) * (double)(i)
118 
119
120#define v2int(v, min, max)  \
121 (unsigned int)( \
122    ((double)(v) - (double)(min)) * \
123    ((double)((unsigned)MAXINT +(unsigned)MAXINT) /   \
124     (double)((double)(max)-(double)(min))) + \
125    (double)0.5 \
126                 )
127// dï¿œnition de la zone globale (uniquement enlecture )
128extern const Zone globalZone;
129
130// macros de calcul de pas d'une grille en fonction du domaine geographique
131#define pasLat(z, g) (double)((z)->latMax -(z)->latMin)/(g)->height;
132#define pasLon(z, g) (double)((z)->lonMax -(z)->lonMin)/(g)->width;
133
134#endif //GRID_H_
Note: See TracBrowser for help on using the repository browser.