.NET wrapper for GeographicLib::Geohash. More...
#include <NETGeographicLib/Geohash.h>
Static Public Member Functions | |
static void | Forward (double lat, double lon, int len,[System::Runtime::InteropServices::Out] System::String^ %geohash) |
static void | Reverse (System::String^ geohash,[System::Runtime::InteropServices::Out] double% lat,[System::Runtime::InteropServices::Out] double% lon,[System::Runtime::InteropServices::Out] int% len, bool centerp) |
static double | LatitudeResolution (int len) |
static double | LongitudeResolution (int len) |
static int | GeohashLength (double res) |
static int | GeohashLength (double latres, double lonres) |
static int | DecimalPrecision (int len) |
.NET wrapper for GeographicLib::Geohash.
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.
C# Example:
using System; using NETGeographicLib; namespace example_Geohash { class Program { static void Main(string[] args) { 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, out geohash); Console.WriteLine( geohash ); } } { // Sample reverse calculation string geohash = "u4pruydqqvj"; double lat, lon; for (int i = 0; i <= geohash.Length; ++i) { int len; Geohash.Reverse(geohash.Substring(0, i), out lat, out lon, out len, true); Console.WriteLine(String.Format("Length: {0} Latitude: {1} Longitude: {2}", len, lat, lon ) ); } } } catch (GeographicErr e) { Console.WriteLine(String.Format("Caught exception: {0}", e.Message)); } } } }
Managed C++ Example:
using namespace System; using namespace NETGeographicLib; int main(array<System::String ^> ^/*args*/) { 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); Console::WriteLine( geohash ); } } { // Sample reverse calculation String^ geohash = "u4pruydqqvj"; double lat, lon; for (int i = 0; i <= geohash->Length; ++i) { int len; Geohash::Reverse(geohash->Substring(0, i), lat, lon, len, true); Console::WriteLine(String::Format("Length: {0} Latitude: {1} Longitude: {2}", len, lat, lon ) ); } } } catch (GeographicErr^ e) { Console::WriteLine(String::Format("Caught exception: {0}", e->Message)); return -1; } return 0; }
Visual Basic Example:
Imports NETGeographicLib Module example_Geohash Sub Main() Try ' Sample forward calculation Dim lat As Double = 57.64911, lon = 10.40744 ' Jutland (the wikipedia example) Dim ghash As String Dim maxlen As Integer = Geohash.GeohashLength(0.00001) For len As Integer = 0 To maxlen Geohash.Forward(lat, lon, len, ghash) Console.WriteLine(ghash) Next ' Sample reverse calculation ghash = "u4pruydqqvj" For i As Integer = 0 To ghash.Length - 1 Dim len As Integer Geohash.Reverse(ghash.Substring(0, i), lat, lon, len, True) Console.WriteLine(String.Format("Length: {0} Latitude: {1} Longitude: {2}", len, lat, lon)) Next Catch ex As GeographicErr Console.WriteLine(String.Format("Caught exception: {0}", ex.Message)) End Try End Sub End Module
Definition at line 34 of file Geohash.h.
static void NETGeographicLib::Geohash::Forward | ( | double | lat, | |
double | lon, | |||
int | len, | |||
[System::Runtime::InteropServices::Out] System::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".
static void NETGeographicLib::Geohash::Reverse | ( | System::String^ | geohash, | |
[System::Runtime::InteropServices::Out] double% | lat, | |||
[System::Runtime::InteropServices::Out] double% | lon, | |||
[System::Runtime::InteropServices::Out] int% | len, | |||
bool | centerp | |||
) | [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.
static double NETGeographicLib::Geohash::LatitudeResolution | ( | int | len | ) | [static] |
The latitude resolution of a geohash.
[in] | len | the length of the geohash. |
Internally, len is first put in the range [0, 18].
static double NETGeographicLib::Geohash::LongitudeResolution | ( | int | len | ) | [static] |
The longitude resolution of a geohash.
[in] | len | the length of the geohash. |
Internally, len is first put in the range [0, 18].
static int NETGeographicLib::Geohash::GeohashLength | ( | double | res | ) | [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].
static int NETGeographicLib::Geohash::GeohashLength | ( | double | latres, | |
double | lonres | |||
) | [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].
static int NETGeographicLib::Geohash::DecimalPrecision | ( | int | len | ) | [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].