Geohash library for cplusplus.
GeoHash是空间索引的一种方式,特别适合点数据,而对线、面数据采用R树索引更有优势。
#include <catch2/catch.hpp>
#include "cgeohash.hpp"
size_t precision = 12;
double longitude = 112.5584;
double latitude = 37.8324;
GeoHash::string_type geostr("ww8p1r4t8");
GeoHash::string_type geo_neighbor("dqcjq");
TEST_CASE("Test geohash encode & decode method") {
SECTION("Test geohash encode method") {
GeoHash::string_type out;
GeoHash::encode(latitude, longitude, 9, out);
REQUIRE(geostr == out);
}
}
TEST_CASE("Test geohash decode method") {
GeoHash::DecodedHash out = GeoHash::decode(geostr);
//var diff = Math.abs(latitude - actual) < 0.0001
REQUIRE(abs(latitude - out.latitude) <= out.latitude_err);
REQUIRE(abs(longitude - out.longitude) <= out.longitude_err);
}
TEST_CASE("Test geohash neighbor method:finds neighbor to the north") {
const int dir[2] = { 1,0 };
GeoHash::string_type actual = GeoHash::neighbor(geo_neighbor, dir);
GeoHash::string_type expected("dqcjw");
REQUIRE(actual == expected);
}
TEST_CASE("Test geohash neighbor method:finds neighbor to the south-west") {
const int dir[2] = { -1,-1 };
GeoHash::string_type actual = GeoHash::neighbor(geo_neighbor, dir);
GeoHash::string_type expected("dqcjj");
REQUIRE(actual == expected);
}
TEST_CASE("Test decodes string to bounded box") {
GeoHash::DecodedBBox box= GeoHash::decode_bbox(geostr);
//[37.83236503601074,112.55836486816406,37.83240795135498,112.5584077835083];
REQUIRE((latitude>=box.minlat && latitude <= box.maxlat));
REQUIRE((longitude>=box.minlon && longitude<=box.maxlon));
}