1 #ifndef GPX2SHP_H_INCLUDED
2 #define GPX2SHP_H_INCLUDED
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 */
11 #define DATABUFSIZE 16
12 #define failToWriteAttr(S, T) failToWriteAttrRep((S), (T),__FILE__, __LINE__ )
24 #include "errorcode.h"
25 //#include "shapefil.h"
30 * make xml parent and child list
32 typedef struct parent {
33 char *name; /** element name */
34 struct parent *parentptr;
39 * set attribute columns on/off
41 typedef struct g2scolumns {
43 * each member corresponds to attribute column of attribute table
72 * store each path attribute values for trackpoint and route.
74 typedef struct pathattr {
75 char name[NAMELENGTH];
76 char cmt[COMMENTLENGTH];
77 char desc[COMMENTLENGTH];
78 char src[COMMENTLENGTH];
79 char link[FILENAMELENGTH];
81 char type[TYPELENGTH];
95 * store each point attribute values.
97 typedef struct g2sattr {
99 * the structure cames from GPX1.1 format
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];
118 char sym[NAMELENGTH];
119 char fix[NAMELENGTH];
124 double ageofdgpsdata;
126 char author[NAMELENGTH];
127 char keywords[NAMELENGTH];
128 char copyright[NAMELENGTH];
130 char license[NAMELENGTH];
134 * statistics structure
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 */
149 * cluster of all dbfhandles
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 */
162 * cluster of all shphandles
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 */
175 * propaties structure for gpx2navit_txt
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 */
207 * userdata structure between expat methods
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 */
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);
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);
254 void parseMain(g2sprop * pr);
256 /* elementControl.c */
257 void startElementControl(parsedata * pdata, const char *element,
259 void endElementControl(parsedata * pdata, const char *element);
262 void setWpt( parsedata * pdata);
265 void initPathAttr(pathattr * pattr, g2sattr * attr);
266 void setPathInterval(parsedata *pdata);
267 void setPathData(pathattr * parrt, g2sattr * attr);
268 void setPath( parsedata * pdata);
271 void setMetadata(parsedata * pdata);