diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2015-06-10 11:45:34 -0700 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2015-06-10 11:51:15 -0700 |
commit | d541c2b601a82aad7ae8e0e419b172cc32f24a84 (patch) | |
tree | fd488a7983c0e27c274541676dfedcdd62cb3c04 /divesite.c | |
parent | 1ee447b5a95e97f5eb409ce67b0b06464138e572 (diff) | |
download | subsurface-d541c2b601a82aad7ae8e0e419b172cc32f24a84.tar.gz |
Add helper function to determine the distance between two points
And use this to find a dive site within a certain radius of a GPS fix.
This will be used to figure out if dive sites might be the same.
This uses a new Qt5 component (Positioning) which was added in Qt5.2.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'divesite.c')
-rw-r--r-- | divesite.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/divesite.c b/divesite.c index fbf01bf77..3caa7b3ba 100644 --- a/divesite.c +++ b/divesite.c @@ -34,6 +34,28 @@ uint32_t get_dive_site_uuid_by_gps(degrees_t latitude, degrees_t longitude, stru return 0; } +/* this is in globe.cpp, so including the .h file is a pain */ +extern double getDistance(int lat1, int lon1, int lat2, int lon2); + +/* find the closest one, no more than distance meters away - if more than one at same distance, pick the first */ +uint32_t get_dive_site_uuid_by_gps_proximity(degrees_t latitude, degrees_t longitude, int distance, struct dive_site **dsp) +{ + int i; + int uuid = 0; + struct dive_site *ds; + double cur_distance, min_distance = distance + 0.001; + for_each_dive_site (i, ds) { + if (dive_site_has_gps_location(ds) && + (cur_distance = getDistance(ds->latitude.udeg, ds->longitude.udeg, latitude.udeg, longitude.udeg)) < min_distance) { + min_distance = cur_distance; + uuid = ds->uuid; + if (dsp) + *dsp = ds; + } + } + return uuid; +} + /* try to create a uniqe ID - fingers crossed */ static uint32_t dive_site_getUniqId() { |