Routino SVN Repository Browser

Check out the latest version of Routino: svn co http://routino.org/svn/trunk routino

ViewVC logotype

Annotation of /trunk/src/routino.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1784 - (hide annotations) (download) (as text)
Sat Aug 15 13:08:37 2015 UTC (9 years, 7 months ago) by amb
File MIME type: text/x-chdr
File size: 13560 byte(s)
Merge libroutino branch back into the trunk.

1 amb 1715 /***************************************
2     Routino library header file.
3    
4     Part of the Routino routing software.
5     ******************/ /******************
6     This file Copyright 2015 Andrew M. Bishop
7    
8     This program is free software: you can redistribute it and/or modify
9     it under the terms of the GNU Affero General Public License as published by
10     the Free Software Foundation, either version 3 of the License, or
11     (at your option) any later version.
12    
13     This program is distributed in the hope that it will be useful,
14     but WITHOUT ANY WARRANTY; without even the implied warranty of
15     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16     GNU Affero General Public License for more details.
17    
18     You should have received a copy of the GNU Affero General Public License
19     along with this program. If not, see <http://www.gnu.org/licenses/>.
20     ***************************************/
21    
22    
23     #ifndef ROUTINO_H
24     #define ROUTINO_H /*+ To stop multiple inclusions. +*/
25    
26     /* Limit the exported symbols in the library */
27    
28     #if defined(_MSC_VER)
29     #ifdef LIBROUTINO
30     #define DLL_PUBLIC __declspec(dllexport)
31     #else
32     #define DLL_PUBLIC __declspec(dllimport)
33     #endif
34     #endif
35    
36 amb 1720 #if defined(__GNUC__) && __GNUC__ >= 4
37     #if defined(__MINGW32__) || defined(__CYGWIN__)
38     #ifdef LIBROUTINO
39     #define DLL_PUBLIC __attribute__ ((dllexport))
40     #else
41     #define DLL_PUBLIC __attribute__ ((dllimport))
42     #endif
43 amb 1715 #else
44 amb 1720 #ifdef LIBROUTINO
45     #define DLL_PUBLIC __attribute__ ((visibility ("default")))
46     #endif
47 amb 1715 #endif
48     #endif
49    
50     #ifndef DLL_PUBLIC
51     #define DLL_PUBLIC
52     #endif
53    
54    
55     /* Handle compilation with a C++ compiler */
56    
57     #ifdef __cplusplus
58     extern "C"
59     {
60     #endif
61    
62 amb 1765 /* Routino library API version */
63 amb 1715
64 amb 1771 #define ROUTINO_API_VERSION 5 /*+ A version number for the Routino API. +*/
65 amb 1765
66    
67 amb 1756 /* Routino error constants */
68 amb 1747
69     #define ROUTINO_ERROR_NONE 0 /*+ No error. +*/
70    
71     #define ROUTINO_ERROR_NO_DATABASE 1 /*+ A function was called without the database variable set. +*/
72     #define ROUTINO_ERROR_NO_PROFILE 2 /*+ A function was called without the profile variable set. +*/
73     #define ROUTINO_ERROR_NO_TRANSLATION 3 /*+ A function was called without the translation variable set. +*/
74    
75     #define ROUTINO_ERROR_NO_DATABASE_FILES 11 /*+ The specified database to load did not exist. +*/
76     #define ROUTINO_ERROR_BAD_DATABASE_FILES 12 /*+ The specified database could not be loaded. +*/
77     #define ROUTINO_ERROR_NO_PROFILES_XML 13 /*+ The specified profiles XML file did not exist. +*/
78     #define ROUTINO_ERROR_BAD_PROFILES_XML 14 /*+ The specified profiles XML file could not be loaded. +*/
79 amb 1760 #define ROUTINO_ERROR_NO_TRANSLATIONS_XML 15 /*+ The specified translations XML file did not exist. +*/
80     #define ROUTINO_ERROR_BAD_TRANSLATIONS_XML 16 /*+ The specified translations XML file could not be loaded. +*/
81 amb 1747
82     #define ROUTINO_ERROR_NO_SUCH_PROFILE 21 /*+ The requested profile name does not exist in the loaded XML file. +*/
83     #define ROUTINO_ERROR_NO_SUCH_TRANSLATION 22 /*+ The requested translation language does not exist in the loaded XML file. +*/
84    
85     #define ROUTINO_ERROR_NO_NEARBY_HIGHWAY 31 /*+ There is no highway near the coordinates to place a waypoint. +*/
86    
87     #define ROUTINO_ERROR_PROFILE_DATABASE_ERR 41 /*+ The profile and database do not work together. +*/
88 amb 1753 #define ROUTINO_ERROR_NOTVALID_PROFILE 42 /*+ The profile being used has not been validated. +*/
89 amb 1757 #define ROUTINO_ERROR_BAD_USER_PROFILE 43 /*+ The user specified profile contained invalid data. +*/
90 amb 1747
91 amb 1756 #define ROUTINO_ERROR_BAD_OPTIONS 51 /*+ The routing options specified are not consistent with each other. +*/
92    
93 amb 1765 #define ROUTINO_ERROR_WRONG_API_VERSION 61 /*+ There is a mismatch between the library and caller API version. +*/
94    
95 amb 1767 #define ROUTINO_ERROR_PROGRESS_ABORTED 71 /*+ The progress function returned false. +*/
96    
97 amb 1747 #define ROUTINO_ERROR_NO_ROUTE_1 1001 /*+ A route could not be found to waypoint 1. +*/
98     #define ROUTINO_ERROR_NO_ROUTE_2 1002 /*+ A route could not be found to waypoint 2. +*/
99     #define ROUTINO_ERROR_NO_ROUTE_3 1003 /*+ A route could not be found to waypoint 3. +*/
100     /* Higher values of the error number refer to later waypoints. */
101    
102    
103 amb 1756 /* Routino routing option constants */
104    
105     #define ROUTINO_ROUTE_SHORTEST 0 /*+ Calculate the shortest route. +*/
106     #define ROUTINO_ROUTE_QUICKEST 1 /*+ Calculate the quickest route. +*/
107    
108     #define ROUTINO_ROUTE_FILE_HTML 2 /*+ Output an HTML route file. +*/
109     #define ROUTINO_ROUTE_FILE_GPX_TRACK 4 /*+ Output a GPX track file. +*/
110     #define ROUTINO_ROUTE_FILE_GPX_ROUTE 8 /*+ Output a GPX route file. +*/
111     #define ROUTINO_ROUTE_FILE_TEXT 16 /*+ Output a text file with important junctions. +*/
112     #define ROUTINO_ROUTE_FILE_TEXT_ALL 32 /*+ Output a text file with all nodes and segments. +*/
113    
114     #define ROUTINO_ROUTE_FILE_STDOUT 64 /*+ Output a single file type to stdout. +*/
115    
116 amb 1768 #define ROUTINO_ROUTE_LIST_HTML 128 /*+ Output a linked list of of waypoints containing the HTML file information but as plain text. +*/
117     #define ROUTINO_ROUTE_LIST_TEXT 256 /*+ Output a linked list of of waypoints containing the text file information. +*/
118     #define ROUTINO_ROUTE_LIST_TEXT_ALL 512 /*+ Output a linked list of of waypoints containing the text all file information. +*/
119 amb 1756
120 amb 1758
121     /* Routino output point types */
122    
123     #define ROUTINO_POINT_UNIMPORTANT 0 /*+ An unimportant, intermediate, node. +*/
124     #define ROUTINO_POINT_RB_NOT_EXIT 1 /*+ A roundabout exit that is not taken. +*/
125     #define ROUTINO_POINT_JUNCT_CONT 2 /*+ An un-interesting junction where the route continues without comment. +*/
126     #define ROUTINO_POINT_CHANGE 3 /*+ The highway changes type but nothing else happens. +*/
127     #define ROUTINO_POINT_JUNCT_IMPORT 4 /*+ An interesting junction to be described. +*/
128     #define ROUTINO_POINT_RB_ENTRY 5 /*+ The entrance to a roundabout. +*/
129     #define ROUTINO_POINT_RB_EXIT 6 /*+ The exit from a roundabout. +*/
130     #define ROUTINO_POINT_MINI_RB 7 /*+ The location of a mini-roundabout. +*/
131     #define ROUTINO_POINT_UTURN 8 /*+ The location of a U-turn. +*/
132     #define ROUTINO_POINT_WAYPOINT 9 /*+ A waypoint. +*/
133    
134    
135 amb 1757 /* Routino user profile array indexes */
136    
137     #define ROUTINO_HIGHWAY_MOTORWAY 1 /*+ A Motorway highway. +*/
138     #define ROUTINO_HIGHWAY_TRUNK 2 /*+ A Trunk highway. +*/
139     #define ROUTINO_HIGHWAY_PRIMARY 3 /*+ A Primary highway. +*/
140     #define ROUTINO_HIGHWAY_SECONDARY 4 /*+ A Secondary highway. +*/
141     #define ROUTINO_HIGHWAY_TERTIARY 5 /*+ A Tertiary highway. +*/
142     #define ROUTINO_HIGHWAY_UNCLASSIFIED 6 /*+ A Unclassified highway. +*/
143     #define ROUTINO_HIGHWAY_RESIDENTIAL 7 /*+ A Residential highway. +*/
144     #define ROUTINO_HIGHWAY_SERVICE 8 /*+ A Service highway. +*/
145     #define ROUTINO_HIGHWAY_TRACK 9 /*+ A Track highway. +*/
146     #define ROUTINO_HIGHWAY_CYCLEWAY 10 /*+ A Cycleway highway. +*/
147     #define ROUTINO_HIGHWAY_PATH 11 /*+ A Path highway. +*/
148     #define ROUTINO_HIGHWAY_STEPS 12 /*+ A Steps highway. +*/
149     #define ROUTINO_HIGHWAY_FERRY 13 /*+ A Ferry highway. +*/
150    
151     #define ROUTINO_PROPERTY_PAVED 1 /*+ A Paved highway. +*/
152     #define ROUTINO_PROPERTY_MULTILANE 2 /*+ A Multilane highway. +*/
153     #define ROUTINO_PROPERTY_BRIDGE 3 /*+ A Bridge highway. +*/
154     #define ROUTINO_PROPERTY_TUNNEL 4 /*+ A Tunnel highway. +*/
155     #define ROUTINO_PROPERTY_FOOTROUTE 5 /*+ A Footroute highway. +*/
156     #define ROUTINO_PROPERTY_BICYCLEROUTE 6 /*+ A Bicycleroute highway. +*/
157    
158    
159 amb 1738 /* Routino types */
160 amb 1715
161 amb 1760 /*+ A data structure to hold a Routino database loaded from a file (the contents are private). +*/
162 amb 1738 typedef struct _Routino_Database Routino_Database;
163 amb 1760
164     /*+ A data structure to hold a Routino waypoint found within the database (the contents are private). +*/
165 amb 1738 typedef struct _Routino_Waypoint Routino_Waypoint;
166 amb 1715
167 amb 1760 /*+ A data structure to hold a Routino routing profile (the contents are private). +*/
168 amb 1738 #ifdef LIBROUTINO
169     typedef struct _Profile Routino_Profile;
170 amb 1760 #else
171     typedef struct _Routino_Profile Routino_Profile;
172     #endif
173    
174     /*+ A data structure to hold a Routino translation (the contents are private). +*/
175     #ifdef LIBROUTINO
176 amb 1738 typedef struct _Translation Routino_Translation;
177     #else
178     typedef struct _Routino_Translation Routino_Translation;
179     #endif
180 amb 1715
181 amb 1760 /*+ A data structure to hold a routing profile that can be defined by the user. +*/
182 amb 1758 typedef struct _Routino_UserProfile
183     {
184     int transport; /*+ The type of transport. +*/
185 amb 1738
186 amb 1758 float highway[14]; /*+ A floating point preference for travel on the highway (range 0 to 1). +*/
187 amb 1757
188 amb 1758 float speed[14]; /*+ The maximum speed on each type of highway (km/hour). +*/
189 amb 1757
190 amb 1758 float props[7]; /*+ A floating point preference for ways with this attribute (range 0 to 1). +*/
191 amb 1757
192 amb 1758 int oneway; /*+ A flag to indicate if one-way restrictions apply. +*/
193     int turns; /*+ A flag to indicate if turn restrictions apply. +*/
194 amb 1757
195 amb 1758 float weight; /*+ The weight of the vehicle (in tonnes). +*/
196 amb 1757
197 amb 1758 float height; /*+ The height of the vehicle (in metres). +*/
198     float width; /*+ The width of vehicle (in metres). +*/
199     float length; /*+ The length of vehicle (in metres). +*/
200     }
201     Routino_UserProfile;
202 amb 1757
203    
204 amb 1758 /*+ Forward declaration of the Routino_Output data type. +*/
205     typedef struct _Routino_Output Routino_Output;
206    
207 amb 1760 /*+ A linked list output of the calculated route whose contents depend on the ROUTINO_ROUTE_LIST_* options selected. +*/
208 amb 1758 struct _Routino_Output
209     {
210     Routino_Output *next; /*+ A pointer to the next route section. +*/
211    
212     float lon; /*+ The longitude of the point (radians). +*/
213     float lat; /*+ The latitude of the point (radians). +*/
214    
215     float dist; /*+ The total distance travelled (metres). +*/
216 amb 1760 float time; /*+ The total journey time (seconds). +*/
217 amb 1758
218 amb 1768 float speed; /*+ The speed (km/hr) for this section of the route (ROUTINO_ROUTE_LIST_TEXT_ALL format only). +*/
219 amb 1766
220 amb 1758 int type; /*+ The type of point (one of the ROUTINO_POINT_* values). +*/
221    
222 amb 1768 int turn; /*+ The amount to turn (degrees) for the next section of the route (ROUTINO_ROUTE_LIST_TEXT or ROUTINO_ROUTE_LIST_HTML format). +*/
223 amb 1760 int bearing; /*+ The compass direction (degrees) for the next section of the route. +*/
224    
225 amb 1768 char *name; /*+ The name of the next section of the route (ROUTINO_ROUTE_LIST_TEXT or ROUTINO_ROUTE_LIST_HTML format) or previous section of the route (ROUTINO_ROUTE_LIST_TEXT_ALL format). +*/
226    
227     char *desc1; /*+ The first part of the description of the next section of route (ROUTINO_ROUTE_LIST_HTML format only). +*/
228     char *desc2; /*+ The second part of the description of the next section of route (ROUTINO_ROUTE_LIST_HTML format only). +*/
229 amb 1771 char *desc3; /*+ The third part of the description, the total distance and time (ROUTINO_ROUTE_LIST_HTML format only). +*/
230 amb 1758 };
231    
232    
233 amb 1767 /*+ A type of function that can be used as a callback to indicate routing progress, if it returns false the router stops. +*/
234     typedef int (*Routino_ProgressFunc)(double complete);
235    
236    
237 amb 1758 /* Routino error number variable */
238    
239 amb 1765 /*+ Contains the libroutino API version number. +*/
240 amb 1773 DLL_PUBLIC extern int Routino_APIVersion;
241 amb 1765
242 amb 1760 /*+ Contains the error number of the most recent Routino function (one of the ROUTINO_ERROR_* values). +*/
243 amb 1773 DLL_PUBLIC extern int Routino_errno;
244 amb 1758
245    
246 amb 1738 /* Routino library functions */
247    
248 amb 1765 #define Routino_CheckAPIVersion() Routino_Check_API_Version(ROUTINO_API_VERSION) /*+ A wrapper function to simplify the API version check. +*/
249    
250     DLL_PUBLIC int Routino_Check_API_Version(int caller_version);
251    
252 amb 1738 DLL_PUBLIC Routino_Database *Routino_LoadDatabase(const char *dirname,const char *prefix);
253     DLL_PUBLIC void Routino_UnloadDatabase(Routino_Database *database);
254    
255     DLL_PUBLIC int Routino_ParseXMLProfiles(const char *filename);
256 amb 1755 DLL_PUBLIC char **Routino_GetProfileNames(void);
257 amb 1738 DLL_PUBLIC Routino_Profile *Routino_GetProfile(const char *name);
258     DLL_PUBLIC void Routino_FreeXMLProfiles(void);
259    
260     DLL_PUBLIC int Routino_ParseXMLTranslations(const char *filename);
261 amb 1755 DLL_PUBLIC char **Routino_GetTranslationLanguages(void);
262 amb 1738 DLL_PUBLIC Routino_Translation *Routino_GetTranslation(const char *language);
263     DLL_PUBLIC void Routino_FreeXMLTranslations(void);
264    
265 amb 1757 DLL_PUBLIC Routino_Profile *Routino_CreateProfileFromUserProfile(Routino_UserProfile *profile);
266     DLL_PUBLIC Routino_UserProfile *Routino_CreateUserProfileFromProfile(Routino_Profile *profile);
267    
268 amb 1748 DLL_PUBLIC int Routino_ValidateProfile(Routino_Database *database,Routino_Profile *profile);
269    
270 amb 1738 DLL_PUBLIC Routino_Waypoint *Routino_FindWaypoint(Routino_Database *database,Routino_Profile *profile,double latitude,double longitude);
271    
272 amb 1758 DLL_PUBLIC Routino_Output *Routino_CalculateRoute(Routino_Database *database,Routino_Profile *profile,Routino_Translation *translation,
273 amb 1767 Routino_Waypoint **waypoints,int nwaypoints,int options,Routino_ProgressFunc progress);
274 amb 1738
275 amb 1758 DLL_PUBLIC void Routino_DeleteRoute(Routino_Output *output);
276 amb 1738
277 amb 1758
278 amb 1715 /* Handle compilation with a C++ compiler */
279    
280     #ifdef __cplusplus
281     }
282     #endif
283    
284     #endif /* ROUTINO_H */