Conversions for geohashes. More...
#include <GeographicLib/Geohash.hpp>
Static Public Member Functions | |
static void | Forward (real lat, real lon, int len, std::string &geohash) |
static void | Reverse (const std::string &geohash, real &lat, real &lon, int &len, bool centerp=true) |
static Math::real | LatitudeResolution (int len) |
static Math::real | LongitudeResolution (int len) |
static int | GeohashLength (real res) |
static int | GeohashLength (real latres, real lonres) |
static int | DecimalPrecision (int len) |
Conversions for geohashes.
Geohashes are described in
They provide a compact string representation of a particular geographic location (expressed as latitude and longitude), with the property that if trailing characters are dropped from the string the geographic location remains nearby.
Example of use:
// Example of using the GeographicLib::Geohash class #include <iostream> #include <iomanip> #include <exception> #include <string> #include <GeographicLib/Geohash.hpp> using namespace std; using namespace GeographicLib; int main() { try { { // Sample forward calculation double lat = 57.64911, lon = 10.40744; // Jutland (the wikipedia example) string geohash; int maxlen = Geohash::GeohashLength(1.0e-5); for (int len = 0; len <= maxlen; ++len) { Geohash::Forward(lat, lon, len, geohash); cout << len << " " << geohash << "\n"; } } { // Sample reverse calculation string geohash = "u4pruydqqvj"; double lat, lon; cout << fixed; for (unsigned i = 0; i <= geohash.length(); ++i) { int len; Geohash::Reverse(geohash.substr(0, i), lat, lon, len); cout << setprecision(max(0, Geohash::DecimalPrecision(len))) << len << " " << lat << " " << lon << "\n"; } } } catch (const exception& e) { cerr << "Caught exception: " << e.what() << "\n"; return 1; } return 0; }
Definition at line 39 of file Geohash.hpp.
void GeographicLib::Geohash::Forward | ( | real | lat, | |
real | lon, | |||
int | len, | |||
std::string & | geohash | |||
) | [static] |
Convert from geographic coordinates to a geohash.
[in] | lat | latitude of point (degrees). |
[in] | lon | longitude of point (degrees). |
[in] | len | the length of the resulting geohash. |
[out] | geohash | the geohash. |
GeographicErr | if la is not in [90, 90]. | |
GeographicErr | if lon is not in [540, 540). | |
std::bad_alloc | if memory for geohash can't be allocated. |
Internally, len is first put in the range [0, 18].
If lat or lon is NaN, the returned geohash is "nan".
Definition at line 22 of file Geohash.cpp.
References GeographicLib::Math::AngNormalize(), GeographicLib::Math::isnan(), and GeographicLib::Utility::str().
void GeographicLib::Geohash::Reverse | ( | const std::string & | geohash, | |
real & | lat, | |||
real & | lon, | |||
int & | len, | |||
bool | centerp = true | |||
) | [static] |
Convert from a geohash to geographic coordinates.
[in] | geohash | the geohash. |
[out] | lat | latitude of point (degrees). |
[out] | lon | longitude of point (degrees). |
[out] | len | the length of the geohash. |
[in] | centerp | if true (the default) return the center of the geohash location, otherwise return the south-west corner. |
GeographicErr | if geohash contains illegal characters. |
Only the first 18 characters for geohash are considered. The case of the letters in geohash is ignored.
If the first three characters in geohash are "nan", then lat and lon are set to NaN.
Definition at line 61 of file Geohash.cpp.
References GeographicLib::Utility::lookup(), and GeographicLib::Math::NaN().
static Math::real GeographicLib::Geohash::LatitudeResolution | ( | int | len | ) | [inline, static] |
The latitude resolution of a geohash.
[in] | len | the length of the geohash. |
Internally, len is first put in the range [0, 18].
Definition at line 111 of file Geohash.hpp.
static Math::real GeographicLib::Geohash::LongitudeResolution | ( | int | len | ) | [inline, static] |
The longitude resolution of a geohash.
[in] | len | the length of the geohash. |
Internally, len is first put in the range [0, 18].
Definition at line 124 of file Geohash.hpp.
static int GeographicLib::Geohash::GeohashLength | ( | real | res | ) | [inline, static] |
The geohash length required to meet a given geographic resolution.
[in] | res | the minimum of resolution in latitude and longitude (degrees). |
The returned length is in the range [0, 18].
Definition at line 138 of file Geohash.hpp.
static int GeographicLib::Geohash::GeohashLength | ( | real | latres, | |
real | lonres | |||
) | [inline, static] |
The geohash length required to meet a given geographic resolution.
[in] | latres | the resolution in latitude (degrees). |
[in] | lonres | the resolution in longitude (degrees). |
The returned length is in the range [0, 18].
Definition at line 156 of file Geohash.hpp.
static int GeographicLib::Geohash::DecimalPrecision | ( | int | len | ) | [inline, static] |
The decimal geographic precision required to match a given geohash length. This is the number of digits needed after decimal point in a decimal degrees representation.
[in] | len | the length of the geohash. |
Internally, len is first put in the range [0, 18]. The returned decimal precision is in the range [2, 12].
Definition at line 178 of file Geohash.hpp.