summaryrefslogtreecommitdiffstats
path: root/divesite.c
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2015-06-10 11:45:34 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2015-06-10 11:51:15 -0700
commitd541c2b601a82aad7ae8e0e419b172cc32f24a84 (patch)
treefd488a7983c0e27c274541676dfedcdd62cb3c04 /divesite.c
parent1ee447b5a95e97f5eb409ce67b0b06464138e572 (diff)
downloadsubsurface-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.c22
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()
{