subsurface/core/taxonomy.h
Michael Werle d404aa767f [Bug #2934] Geo Lookup - support for remote dive sites
Some remote dive sites have no populated places (towns, cities)
nearby. For such sites, we now fall back to looking up
unpopulated place names, such as the reef or island name.

Also some code refactorisation:
the actual network access is now encapsulated in its own
function removing some duplicated code handling in the
reverseGeoLookup function and making it more readable.

Furthermore, reverseGeoLookup() was completely refactored as
most of its functionality was due to legacy requirements; the
current code-base only calls this function from a single
location and only with an empty taxonomy_data object. This
makes the function more focussed and much simpler and more
readable.

Finally, a resource leak in reverseGeocde introduced in
4f3b26f9b6 was fixed.

Signed-off-by: Michael Werle <micha@michaelwerle.com>
2020-09-05 17:34:15 +02:00

52 lines
1.3 KiB
C

// SPDX-License-Identifier: GPL-2.0
#ifndef TAXONOMY_H
#define TAXONOMY_H
#ifdef __cplusplus
extern "C" {
#endif
enum taxonomy_category {
TC_NONE,
TC_OCEAN,
TC_COUNTRY,
TC_ADMIN_L1,
TC_ADMIN_L2,
TC_LOCALNAME,
TC_ADMIN_L3,
TC_NR_CATEGORIES
};
enum taxonomy_origin {
GEOCODED,
GEOPARSED,
GEOMANUAL,
GEOCOPIED
};
extern char *taxonomy_category_names[TC_NR_CATEGORIES];
extern char *taxonomy_api_names[TC_NR_CATEGORIES];
struct taxonomy {
int category; /* the category for this tag: ocean, country, admin_l1, admin_l2, localname, etc */
const char *value; /* the value returned, parsed, or manually entered for that category */
enum taxonomy_origin origin;
};
/* the data block contains 3 taxonomy structures - unused ones have a tag value of NONE */
struct taxonomy_data {
int nr;
struct taxonomy *category;
};
struct taxonomy *alloc_taxonomy();
void free_taxonomy(struct taxonomy_data *t);
void copy_taxonomy(const struct taxonomy_data *orig, struct taxonomy_data *copy);
int taxonomy_index_for_category(const struct taxonomy_data *t, enum taxonomy_category cat);
const char *taxonomy_get_country(struct taxonomy_data *t);
void taxonomy_set_country(struct taxonomy_data *t, const char *country, enum taxonomy_origin origin);
#ifdef __cplusplus
}
#endif
#endif // TAXONOMY_H