def test_coord2int2coord(): for lvl in range(1, 30): lng_err, lat_err = hilbert._lvl_error(lvl) dim = 1 << lvl for _i in range(1000): lng, lat = rand_lng(), rand_lat() x, y = hilbert._coord2int(lng, lat, dim) lng_x, lat_y = hilbert._int2coord(x, y, dim) # we always get lower left corner of coding cell # hence add error and then we have +- error assert lng == pytest.approx(lng_x + lng_err, abs=lng_err) assert lat == pytest.approx(lat_y + lat_err, abs=lat_err)
def test_coord2int(): # we want a dim x dim grid, i.e. we want dim cells in every direction and have coding points 0 ... dim-1 # minimum dim is 1 => whole world in one coding point with pytest.raises(AssertionError): hilbert._coord2int(0, 0, 0) assert (0, 0) == hilbert._coord2int(rand_lng(), rand_lat(), 1) # lvl 2 is 4 cells: 2 in every direction assert (0, 0) == hilbert._coord2int(-180, -90, 2) assert (1, 0) == hilbert._coord2int(180, -90, 2) assert (0, 1) == hilbert._coord2int(-180, 90, 2) assert (1, 1) == hilbert._coord2int(180, 90, 2) # lvl 3 is 9 cells: 3 in every direction assert (0, 0) == hilbert._coord2int(-180, -90, 3) assert (1, 0) == hilbert._coord2int(0, -90, 3) assert (2, 0) == hilbert._coord2int(180, -90, 3) assert (0, 1) == hilbert._coord2int(-180, 0, 3) assert (0, 2) == hilbert._coord2int(-180, 90, 3) assert (1, 1) == hilbert._coord2int(0, 0, 3) assert (1, 2) == hilbert._coord2int(0, 90, 3) assert (2, 1) == hilbert._coord2int(180, 0, 3) assert (2, 2) == hilbert._coord2int(180, 90, 3) for dim in range(3, 200): for _i in range(100): x, y = hilbert._coord2int(rand_lng(), rand_lat(), dim) assert 0 <= x < dim assert 0 <= y < dim