GeographicLib::Geohash Class Reference

Conversions for geohashes. More...

#include <GeographicLib/Geohash.hpp>

List of all members.

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)

Detailed Description

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.


Member Function Documentation

void GeographicLib::Geohash::Forward ( real  lat,
real  lon,
int  len,
std::string &  geohash 
) [static]

Convert from geographic coordinates to a geohash.

Parameters:
[in] lat latitude of point (degrees).
[in] lon longitude of point (degrees).
[in] len the length of the resulting geohash.
[out] geohash the geohash.
Exceptions:
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.

Parameters:
[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.
Exceptions:
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.

Parameters:
[in] len the length of the geohash.
Returns:
the latitude resolution (degrees).

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.

Parameters:
[in] len the length of the geohash.
Returns:
the longitude resolution (degrees).

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.

Parameters:
[in] res the minimum of resolution in latitude and longitude (degrees).
Returns:
geohash length.

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.

Parameters:
[in] latres the resolution in latitude (degrees).
[in] lonres the resolution in longitude (degrees).
Returns:
geohash length.

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.

Parameters:
[in] len the length of the geohash.
Returns:
the decimal precision (may be negative).

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.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on 6 Oct 2014 for GeographicLib by  doxygen 1.6.1