def test_lvl_error(): # lvl 0 is whole world -> lng/lat error is half of max lng/lat assert (180, 90) == hilbert._lvl_error(0) # every level halves the error lng_err, lat_err = 180, 90 for lvl in range(1, 30): lng_err /= 2 lat_err /= 2 assert (lng_err, lat_err) == hilbert._lvl_error(lvl)
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)