Fix:Core:Renamed src to navit for cleanup of includes
[navit-package] / navit / tools / gpx2navit_txt / src / gpx2navit_txt.h
1 #ifndef GPX2SHP_H_INCLUDED
2 #define GPX2SHP_H_INCLUDED
3
4 #define PROG gpx2navit_txt
5 #define FILENAMELENGTH 255      /* 255 is max length for dbf string column */
6 #define COMMENTLENGTH 255       /* 255 is max length for dbf string column */
7 #define NAMELENGTH 32
8 #define TIMELENGTH 32
9 #define TYPELENGTH 16
10 #define BUFFSIZE 8192
11 #define DATABUFSIZE 16
12 #define failToWriteAttr(S, T) failToWriteAttrRep((S), (T),__FILE__, __LINE__ )
13
14 #include <stdio.h>
15 #include <string.h>
16 #include <ctype.h>
17 #include <stdlib.h>
18 #include <unistd.h>
19 #include <libgen.h>
20 #include <getopt.h>
21 #include <time.h>
22 #include <assert.h>
23 #include <expat.h>
24 #include "errorcode.h"
25 //#include "shapefil.h"
26
27
28 #define DEBUG 0
29 /**
30  * make xml parent and child list
31  */
32 typedef struct parent {
33     char *name;         /** element name */
34     struct parent *parentptr;
35                         /** parent pointer */
36 } parent;
37
38 /**
39  * set attribute columns on/off
40  */
41 typedef struct g2scolumns {
42 /**
43  * each member corresponds to attribute column of attribute table
44  */
45     int name;
46     int cmt;
47     int desc;
48     int src;
49     int link;
50     int type;
51     int time;
52     int number;
53     int ele;
54     int magvar;
55     int geoidheight;
56     int sym;
57     int fix;
58     int sat;
59     int hdop;
60     int vdop;
61     int pdop;
62     int ageofdgpsdata;
63     int dgpsid;
64     int length;
65     int interval;
66     int speed;
67     int points;
68     int gpxline;
69 } g2scolumns;
70
71 /**
72  * store each path attribute values for trackpoint and route.
73  */
74 typedef struct pathattr {
75     char name[NAMELENGTH];
76     char cmt[COMMENTLENGTH];
77     char desc[COMMENTLENGTH];
78     char src[COMMENTLENGTH];
79     char link[FILENAMELENGTH];
80     int number;
81     char type[TYPELENGTH];
82     double length;
83     double interval;
84     double speed;
85     /*
86     double *x;
87     double *y;
88     double *z;
89     */
90     double *point;
91     int count;
92 } pathattr;
93
94 /**
95  * store each point attribute values.
96  */
97 typedef struct g2sattr {
98 /**
99  * the structure cames from GPX1.1 format
100  */
101     double lon;
102     double lat;
103     double minlon;
104     double minlat;
105     double maxlon;
106     double maxlat;
107     char name[NAMELENGTH];
108     char cmt[COMMENTLENGTH];
109     char desc[COMMENTLENGTH];
110     char src[COMMENTLENGTH];
111     char link[FILENAMELENGTH];
112     char type[TYPELENGTH];
113     char time[TIMELENGTH];
114     int number;
115     double ele;
116     double magvar;
117     double geoidheight;
118     char sym[NAMELENGTH];
119     char fix[NAMELENGTH];
120     int sat;
121     double hdop;
122     double vdop;
123     double pdop;
124     double ageofdgpsdata;
125     int dgpsid;
126     char author[NAMELENGTH];
127     char keywords[NAMELENGTH];
128     char copyright[NAMELENGTH];
129     int year;
130     char license[NAMELENGTH];
131 } g2sattr;
132
133 /**
134  * statistics structure 
135  */
136 typedef struct g2sstats {
137         int trkpoints;  /** track point total count */
138         int trkcount;   /** track path total count */
139     double trklength;   /** track total length */
140     int rtepoints;      /** route point total count */
141     int rtecount;       /** route path totol count */
142     double rtelength;   /** route total length */
143     int wptpoints;      /** way point total count */
144     int trkunconverted; /** unconverted track path count */
145     int rteunconverted; /** unconverted route path count */ 
146 } g2sstats;
147
148 /**
149  * cluster of all dbfhandles
150  */ 
151 //typedef struct dbfhandles {
152 //    DBFHandle trk;    /** for track */
153 //    DBFHandle wpt;    /** for waypoint */
154 //    DBFHandle rte;    /** for route */
155 //    DBFHandle trk_edg;        /** for track each edge */
156 //    DBFHandle trk_pnt;        /** for track each point */
157 //    DBFHandle rte_edg;        /** for route each edge */
158 //    DBFHandle rte_pnt;        /** for route each point */
159 //} dbfhandles;
160
161 /**
162  * cluster of all shphandles
163  */
164 //typedef struct shphandles {
165 //    SHPHandle trk;    /** for track */
166 //    SHPHandle wpt;    /** for waypoint */
167 //    SHPHandle rte;    /** for route */
168 //    SHPHandle trk_edg;        /** for track each edge */
169 //    SHPHandle trk_pnt;        /** for track each point */
170 //    SHPHandle rte_edg;        /** for route each edge */
171 //    SHPHandle rte_pnt;        /** for route each point */
172 //} shphandles;
173
174 /**
175  * propaties structure for gpx2navit_txt
176  */
177 typedef struct g2sprop {
178     int parseWpt;       /** convert waypoint data or not */
179     int parseTrk;       /** convert track data or not */
180     int parseRte;       /** convert route data or not */
181     int is3d;           /** using 3D mode */
182     int isEdge;         /** convert path data as each separated path    */
183     int isPoint;        /** convert path data as point */
184     int isFast;         /** fast mode that skips path check */
185     int needsStats;     /** shows statistics at last */
186     int minpoints;      /** minimum points to convert as a path */
187     int minlength;      /** minimum length to convert as a path */
188     int mintime;        /** minimum time to convert as a path */
189     int verbose;        /** verbose mode on/off */
190     char *sourcefile;   /** source .gpx file */
191     char *output;       /** output file base name */
192     char *ellipsoid;    /** ellipsoid type to calculate length */
193     char *lengthUnit;   /** length unit for attributes*/
194     double length2meter;/** meter value of lenght unit */
195     char *timeUnit;     /** time unit for attributes */
196     double time2sec;    /** value to convert time unit to second */
197     char *speedLengthUnit;
198                         /** lenght unit to calculate speed*/
199     double speed2meter; /** meter value of speedLengthUnit */
200     char *speedTimeUnit;/** time unit to calculate speed */
201     int speed2sec;      /** value to convert speedTimeUnit to seconde */
202     g2sstats *stats;    /** convert statistics */
203     g2scolumns *cols;   /** attribute table column switch */
204 } g2sprop;
205
206 /**
207  * userdata structure between expat methods 
208  */
209 typedef struct parsedata {
210     int depth;          /** xml path depth */
211     char *databuf;      /** character buffer in tags */
212     char *bufptr;       /** pointer to databuf to add '\0' to databuf */
213     int failed;         /** xml parse failed flag */
214     int failedid;       /** xml parse failed id */
215     XML_Parser parser;  /** xml parser itself*/
216     parent *parent;     /** pointer to parent node */
217     parent *current;    /** pointer to current node */
218     FILE *fp;           /** File handle to write out data points*/
219 //    shphandles *shps; /** .shp file cluster that is used in this program */
220 //    dbfhandles *dbfs; /** .dbf file cluster that is used in this program */
221     g2sattr *attr;      /** each point attributes */
222     pathattr *pattr;    /** each path attributes */
223     g2sprop *prop;      /** propaties for this program */
224 } parsedata;
225
226 /* utils.c */
227 void checkEllpsUnit(char *unit);
228 double checkLengthUnit(char *unit);
229 int checkTimeUnit(char *unit);
230 double getTimeInterval(char *_t, char *t);
231 double getSpeed(double length, double ti, double to_meter, int to_sec);
232 double getDistance(double _x, double _y, double x, double y);
233 //void closeShpFiles(shphandles * shps);
234 //void closeDbfFiles(dbfhandles * dbfs);
235 void *myMallocRep(size_t size, const char *fileName, int line);
236
237 /* misc.c */
238 void failToWriteAttrRep(int iShape, int col, char *file, int line);
239 void showStats(g2sprop * prop);
240 void wipePathAttr(pathattr * pattr);
241 pathattr *createPathAttr(void);
242 void wipeAttr(g2sattr * attr);
243 void setColsDefault(g2scolumns * cols);
244 g2scolumns *createCols(void);
245 g2sattr *createAttr(void);
246 g2sprop *createProp(void);
247 void closeProp(g2sprop * prop);
248 //shphandles *createShps(void);
249 //dbfhandles *createDbfs(void);
250 parsedata *createParsedata(XML_Parser parser, g2sprop * prop);
251 void closeParsedata(parsedata * pdata);
252
253 /* parser.c */
254 void parseMain(g2sprop * pr);
255
256 /* elementControl.c */
257 void startElementControl(parsedata * pdata, const char *element,
258                          const char **attr);
259 void endElementControl(parsedata * pdata, const char *element);
260
261 /* setwpt.c */
262 void setWpt( parsedata * pdata);
263
264 /* setpath.c */
265 void initPathAttr(pathattr * pattr, g2sattr * attr);
266 void setPathInterval(parsedata *pdata);
267 void setPathData(pathattr * parrt, g2sattr * attr);
268 void setPath( parsedata * pdata);
269
270 /* setmetadata.c */
271 void setMetadata(parsedata * pdata);
272
273 #endif