Willem Melching
/
bootje_v4
invoer/gps_wrapper.cpp@0:bec310bde899, 2011-09-27 (annotated)
- Committer:
- pd0wm
- Date:
- Tue Sep 27 19:46:30 2011 +0000
- Revision:
- 0:bec310bde899
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
pd0wm | 0:bec310bde899 | 1 | #include "gps_wrapper.h" |
pd0wm | 0:bec310bde899 | 2 | |
pd0wm | 0:bec310bde899 | 3 | Gps::Gps(GPS * g){ |
pd0wm | 0:bec310bde899 | 4 | gps = g; |
pd0wm | 0:bec310bde899 | 5 | gps->baud(9600); |
pd0wm | 0:bec310bde899 | 6 | gps->format(8, GPS::None, 1); |
pd0wm | 0:bec310bde899 | 7 | gps->setGga(gga); |
pd0wm | 0:bec310bde899 | 8 | |
pd0wm | 0:bec310bde899 | 9 | } |
pd0wm | 0:bec310bde899 | 10 | |
pd0wm | 0:bec310bde899 | 11 | void Gps::set(pos* new_pos){ |
pd0wm | 0:bec310bde899 | 12 | positie.lat = new_pos->lat; |
pd0wm | 0:bec310bde899 | 13 | positie.lon = new_pos->lon; |
pd0wm | 0:bec310bde899 | 14 | } |
pd0wm | 0:bec310bde899 | 15 | |
pd0wm | 0:bec310bde899 | 16 | pos Gps::get(void){ |
pd0wm | 0:bec310bde899 | 17 | positie.lat = gps->latitude(); |
pd0wm | 0:bec310bde899 | 18 | positie.lon = gps->longitude(); |
pd0wm | 0:bec310bde899 | 19 | return positie; |
pd0wm | 0:bec310bde899 | 20 | } |
pd0wm | 0:bec310bde899 | 21 | |
pd0wm | 0:bec310bde899 | 22 | char* Gps::getgga(void){ |
pd0wm | 0:bec310bde899 | 23 | return gga; |
pd0wm | 0:bec310bde899 | 24 | } |
pd0wm | 0:bec310bde899 | 25 | void Gps::simuleer(double koers, double afstand){ |
pd0wm | 0:bec310bde899 | 26 | |
pd0wm | 0:bec310bde899 | 27 | koers *= deg2rad; |
pd0wm | 0:bec310bde899 | 28 | afstand /= 6371.0; |
pd0wm | 0:bec310bde899 | 29 | |
pd0wm | 0:bec310bde899 | 30 | double lat1 = positie.lat * deg2rad; |
pd0wm | 0:bec310bde899 | 31 | double lon1 = positie.lon * deg2rad; |
pd0wm | 0:bec310bde899 | 32 | |
pd0wm | 0:bec310bde899 | 33 | double dlat = afstand * cos(koers); |
pd0wm | 0:bec310bde899 | 34 | double lat2 = dlat + lat1; |
pd0wm | 0:bec310bde899 | 35 | |
pd0wm | 0:bec310bde899 | 36 | double df = log(tan(lat2/2.0 + PI/4.0)/tan(lat1/2.0 + PI/4.0)); |
pd0wm | 0:bec310bde899 | 37 | double q; |
pd0wm | 0:bec310bde899 | 38 | if (df == 0) |
pd0wm | 0:bec310bde899 | 39 | q = cos(lat1); |
pd0wm | 0:bec310bde899 | 40 | else |
pd0wm | 0:bec310bde899 | 41 | q = dlat / df; |
pd0wm | 0:bec310bde899 | 42 | |
pd0wm | 0:bec310bde899 | 43 | double dlon = afstand * sin(koers) / q; |
pd0wm | 0:bec310bde899 | 44 | |
pd0wm | 0:bec310bde899 | 45 | double lon2 = fmod((lon1 + dlon + PI),(2.0 * PI)) - PI; |
pd0wm | 0:bec310bde899 | 46 | |
pd0wm | 0:bec310bde899 | 47 | positie.lat = lat2 * rad2deg; |
pd0wm | 0:bec310bde899 | 48 | positie.lon = lon2 * rad2deg; |
pd0wm | 0:bec310bde899 | 49 | } |