예제 #1
0
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)
예제 #2
0
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