コード例 #1
0
ファイル: geotiff_tests.py プロジェクト: wroscoe/karta
    def test_read_as_bands(self):
        # write several files and then read as a single multiband grid
        v = peaks(500)[:100, :]
        utm7 = karta.crs.ProjectedCRS("+proj=utm +zone=7 +north +datum=WGS84",
                                      "UTM 7N (WGS 84)")
        g1 = karta.RegularGrid([15.0, 15.0, 30.0, 30.0, 0.0, 0.0], v, crs=utm7)
        g2 = karta.RegularGrid([15.0, 15.0, 30.0, 30.0, 0.0, 0.0],
                               v**2,
                               crs=utm7)
        g3 = karta.RegularGrid([15.0, 15.0, 30.0, 30.0, 0.0, 0.0],
                               v + 2,
                               crs=utm7)
        g4 = karta.RegularGrid([15.0, 15.0, 30.0, 30.0, 0.0, 0.0],
                               v * 2,
                               crs=utm7)

        paths = []
        for i, g in enumerate((g1, g2, g3, g4)):
            fpath = os.path.join(TMPDATA, "test{0}.tif".format(i))
            g.to_geotiff(fpath, compress=None)
            paths.append(fpath)

        gnew = karta.from_geotiffs(*paths)
        self.assertTrue("+proj=utm" in gnew.crs.get_proj4())
        self.assertTrue("+zone=7" in gnew.crs.get_proj4())
        self.assertEqual(g.transform, gnew.transform)
        self.assertEqual(g.values.dtype, gnew.values.dtype)
        self.assertEqual(gnew.size, (100, 500))
        self.assertEqual(gnew.nbands, 4)
        return
コード例 #2
0
ファイル: raster_tests.py プロジェクト: ivn888/karta
 def test_merge(self):
     grid1 = karta.RegularGrid([10, 20, 1, 1, 0, 0], values=np.ones([8, 8]))
     grid2 = karta.RegularGrid([7, 22, 1, 1, 0, 0],
                               values=2 * np.ones([4, 6]))
     grid3 = karta.RegularGrid([12, 15, 1, 1, 0, 0],
                               values=3 * np.ones([5, 5]))
     grid_combined = karta.raster.merge([grid1, grid2, grid3])
     self.assertEqual(grid_combined.transform,
                      (7.0, 15.0, 1.0, 1.0, 0.0, 0.0))
     self.assertEqual(grid_combined.size, (13, 11))
     self.assertEqual(np.sum(np.isnan(grid_combined[:, :])), 42)
     return
コード例 #3
0
ファイル: raster_tests.py プロジェクト: ivn888/karta
 def test_merge_weighted(self):
     grid1 = karta.RegularGrid([10, 20, 1, 1, 0, 0], values=np.ones([8, 8]))
     grid2 = karta.RegularGrid([7, 22, 1, 1, 0, 0],
                               values=2 * np.ones([4, 6]))
     grid3 = karta.RegularGrid([12, 19, 1, 1, 0, 0],
                               values=3 * np.ones([5, 5]))
     grid_combined = karta.raster.merge([grid1, grid2, grid3],
                                        weights=[1, 2, 3])
     self.assertAlmostEqual(grid_combined[4, 4], 1.66666666666)
     self.assertAlmostEqual(grid_combined[2, 8], 2.5)
     self.assertAlmostEqual(grid_combined[4, 5], 2.33333333333)
     return
コード例 #4
0
ファイル: aai_tests.py プロジェクト: wroscoe/karta
 def test_read_aai_corner(self):
     pe = peaks(n=49)
     control = karta.RegularGrid((0.0, 0.0, 30.0, 30.0, 0.0, 0.0),
                                 values=pe)
     grid = karta.read_aai(os.path.join(TESTDATA, "peaks49_corner.asc"))
     self.assertTrue(np.all(grid[::-1] == control[:, :]))
     return
コード例 #5
0
ファイル: raster_tests.py プロジェクト: ivn888/karta
 def test_resize_lower_left(self):
     proto = karta.RegularGrid((500, 500, 30, 30, 0, 0), values=peaks(50))
     newgrid = proto.resize([380, 320, 380 + 30 * 30, 320 + 30 * 32])
     self.assertEqual(newgrid.transform,
                      (380.0, 320.0, 30.0, 30.0, 0.0, 0.0))
     self.assertTrue(np.all(newgrid[6:, 4:] == proto[:26, :26]))
     return
コード例 #6
0
ファイル: raster_tests.py プロジェクト: ivn888/karta
 def test_resize_larger(self):
     proto = karta.RegularGrid((500, 500, 30, 30, 0, 0), values=peaks(50))
     newgrid = proto.resize([380, 320, 380 + 30 * 60, 320 + 30 * 62])
     self.assertEqual(newgrid.transform,
                      (380.0, 320.0, 30.0, 30.0, 0.0, 0.0))
     self.assertTrue(np.all(newgrid[6:56, 4:54] == proto[:, :]))
     return
コード例 #7
0
ファイル: raster_tests.py プロジェクト: ivn888/karta
 def test_resize_upper_right(self):
     proto = karta.RegularGrid((500, 500, 30, 30, 0, 0), values=peaks(50))
     newgrid = proto.resize([1940, 1910, 1940 + 30 * 10, 1910 + 30 * 7])
     self.assertEqual(newgrid.transform,
                      (1940.0, 1910.0, 30.0, 30.0, 0.0, 0.0))
     self.assertTrue(np.all(newgrid[:3, :2] == proto[-3:, -2:]))
     return
コード例 #8
0
ファイル: raster_tests.py プロジェクト: ivn888/karta
 def test_resize_smaller(self):
     proto = karta.RegularGrid((500, 500, 30, 30, 0, 0), values=peaks(50))
     newgrid = proto.resize([620, 650, 1370, 1310])
     self.assertEqual(newgrid.transform,
                      (620.0, 650.0, 30.0, 30.0, 0.0, 0.0))
     self.assertTrue(np.all(newgrid[:, :] == proto[5:27, 4:29]))
     return
コード例 #9
0
ファイル: raster_tests.py プロジェクト: ivn888/karta
 def test_data_mask_nonnan(self):
     T = [0.0, 0.0, 1.0, 1.0, 0.0, 0.0]
     v = np.arange(64, dtype=np.int8).reshape([8, 8])
     v[0, 2:7] = -1
     g = karta.RegularGrid(T, values=v, nodata_value=-1)
     self.assertEqual(np.sum(g.data_mask), 59)
     return
コード例 #10
0
ファイル: raster_tests.py プロジェクト: ivn888/karta
 def test_vertex_coords_skewed(self):
     grid = karta.RegularGrid((0.0, 0.0, 30.0, 30.0, 20.0, 10.0),
                              values=np.zeros([5, 5]))
     ans = np.meshgrid(np.arange(15.0, 1486.0, 30.0),
                       np.arange(15.0, 1486.0, 30.0))
     self.assertTrue(np.sum(self.rast.vertex_coords()[0] - ans[0]) < 1e-10)
     self.assertTrue(np.sum(self.rast.vertex_coords()[1] - ans[1]) < 1e-10)
     return
コード例 #11
0
ファイル: raster_tests.py プロジェクト: ivn888/karta
 def test_sample_nearest_skewed(self):
     grid = karta.RegularGrid([0.0, 0.0, 1.0, 1.0, 0.5, 0.2],
                              values=np.array([[0, 1], [1, 0.5]]))
     self.assertEqual(grid.sample_nearest(1, 0.75), 0.0)
     self.assertEqual(grid.sample_nearest(1.5, 1.05), 1.0)
     self.assertEqual(grid.sample_nearest(1.2, 1.4), 1.0)
     self.assertEqual(grid.sample_nearest(2.0, 1.7), 0.5)
     return
コード例 #12
0
ファイル: raster_tests.py プロジェクト: ivn888/karta
 def test_sample_nearest(self):
     grid = karta.RegularGrid([0.0, 0.0, 1.0, 1.0, 0.0, 0.0],
                              values=np.array([[0, 1], [1, 0.5]]))
     self.assertEqual(grid.sample_nearest(0.6, 0.7), 0.0)
     self.assertEqual(grid.sample_nearest(0.6, 1.3), 1.0)
     self.assertEqual(grid.sample_nearest(1.4, 0.3), 1.0)
     self.assertEqual(grid.sample_nearest(1.6, 1.3), 0.5)
     return
コード例 #13
0
ファイル: raster_tests.py プロジェクト: MachineAi/karta
 def test_mask_poly_partial2(self):
     # this case has the first transect begin off-grid, which has caused
     # problems in the past
     g = karta.RegularGrid([0, 0, 1, 1, 0, 0], values=np.ones((7, 7)))
     p = karta.Polygon([(-2, 3), (8, -5), (8, -1), (-2, 7)])
     gc = g.mask_by_poly(p)
     self.assertEqual(gc.data_mask.sum(), 20)
     return
コード例 #14
0
ファイル: raster_tests.py プロジェクト: ivn888/karta
 def test_center_coords(self):
     grid = karta.RegularGrid((0.0, 0.0, 30.0, 30.0, 0.0, 0.0),
                              values=np.zeros([49, 49]))
     ans = np.meshgrid(np.arange(15.0, 1471.0, 30.0),
                       np.arange(15.0, 1471.0, 30.0))
     self.assertEqual(0.0, np.sum(grid.center_coords()[0] - ans[0]))
     self.assertEqual(0.0, np.sum(grid.center_coords()[1] - ans[1]))
     return
コード例 #15
0
ファイル: raster_tests.py プロジェクト: ivn888/karta
 def test_get_positions(self):
     grid = karta.RegularGrid([0.0, 0.0, 1.0, 1.0, 0.0, 0.0],
                              values=np.zeros((3, 3)))
     (i, j) = grid.get_positions(1.5, 1.5)
     self.assertEqual((i, j), (1.0, 1.0))
     (i, j) = grid.get_positions(2.0, 1.5)
     self.assertEqual((i, j), (1.0, 1.5))
     return
コード例 #16
0
ファイル: geotiff_tests.py プロジェクト: wroscoe/karta
    def setUp(self):
        v = peaks(500)[:100, :]
        utm7 = karta.crs.ProjectedCRS("+proj=utm +zone=7 +north +datum=WGS84",
                                      "UTM 7N (WGS 84)")
        g = karta.RegularGrid([15.0, 15.0, 30.0, 30.0, 0.0, 0.0], v, crs=utm7)

        fpath = os.path.join(TMPDATA, "test.tif")
        g.to_geotiff(fpath, compress=None)
        self.grid = karta.read_geotiff(fpath, in_memory=False)
コード例 #17
0
ファイル: raster_tests.py プロジェクト: ivn888/karta
    def test_minmax_nodata(self):
        values = np.array([[4, 5, 3], [4, 2, -9], [3, 6, 1]])

        self.rast = karta.RegularGrid((0.0, 0.0, 30.0, 30.0, 0.0, 0.0),
                                      values=values,
                                      nodata_value=-9)
        minmax = self.rast.minmax()
        self.assertEqual(minmax, (1, 6))
        return
コード例 #18
0
 def test_sample_bilinear2(self):
     grid = karta.RegularGrid([0.5, 0.5, 1.0, 1.0, 0.0, 0.0],
                              values=np.array([[0, 1], [1, 0.5]]))
     xi, yi = np.meshgrid(np.linspace(0.5, 1.5), np.linspace(0.5, 1.5))
     z = grid.sample_bilinear(xi.ravel(), yi.ravel())
     self.assertEqual([z[400], z[1200], z[1550], z[2120]],
                      [0.16326530612244894, 0.48979591836734693,
                       0.63265306122448983, 0.74052478134110788])
     return
コード例 #19
0
ファイル: raster_tests.py プロジェクト: ivn888/karta
 def test_set_nodata(self):
     v = np.arange(64, dtype=np.float64).reshape([8, 8])
     v[2:4, 5:7] = -1
     grid = karta.RegularGrid([0, 0, 1, 1, 0, 0], values=v, nodata_value=-1)
     self.assertEqual(grid.nodata, -1.0)
     grid.set_nodata_value(np.nan)
     self.assertTrue(np.isnan(grid.nodata))
     self.assertEqual(np.sum(np.isnan(grid[:, :])), 4)
     self.assertEqual(np.sum(grid[:, :] == -1.0), 0)
     return
コード例 #20
0
ファイル: raster_tests.py プロジェクト: ivn888/karta
    def test_minmax_nodata2(self):
        values = -9 * np.ones([3, 3])

        self.rast = karta.RegularGrid((0.0, 0.0, 30.0, 30.0, 0.0, 0.0),
                                      values=values,
                                      nodata_value=-9)
        minmax = self.rast.minmax()
        self.assertTrue(np.isnan(minmax[0]))
        self.assertTrue(np.isnan(minmax[1]))
        return
コード例 #21
0
 def test_clip_to_extents(self):
     proto = karta.RegularGrid((495, 495, 30, 30, 0, 0), np.zeros((15,15)))
     clipped = self.rast.clip(*proto.get_extents())
     self.assertEqual(clipped.size, (15, 15))
     self.assertEqual(clipped.transform, (495, 495, 30, 30, 0, 0))
     X, Y = clipped.center_coords()
     self.assertEqual(X[0,0], 495)
     self.assertEqual(X[0,-1], 915)
     self.assertEqual(Y[0,0], 495)
     self.assertEqual(Y[-1,0], 915)
コード例 #22
0
    def test_write_compress(self):
        v = peaks(500)[:100, :]
        utm7 = karta.crs.ProjectedCRS("+proj=utm +zone=7 +north +datum=WGS84",
                                      "UTM 7N (WGS 84)")
        g = karta.RegularGrid([15.0, 15.0, 30.0, 30.0, 0.0, 0.0], v, crs=utm7)

        fpath = os.path.join(TMPDATA, "test.tif")
        g.to_gtiff(fpath, compress="LZW")
        g.to_gtiff(fpath, compress="PACKBITS")
        return
コード例 #23
0
ファイル: raster_tests.py プロジェクト: ivn888/karta
 def test_sample_multipoint(self):
     grid = karta.RegularGrid([0.0, 0.0, 1.0, 1.0, 0.0, 0.0],
                              values=np.array([[0, 1], [1, 0.5]]))
     mp = karta.Multipoint([(0.6, 0.7), (0.6, 1.3), (1.4, 0.3), (1.6, 1.3)],
                           crs=grid.crs)
     self.assertTrue(
         np.all(
             np.allclose(grid.sample(mp, method="nearest"),
                         np.array([0.0, 1.0, 1.0, 0.5]))))
     return
コード例 #24
0
ファイル: raster_tests.py プロジェクト: ivn888/karta
 def test_center_coords_skewed(self):
     grid = karta.RegularGrid((15.0, 15.0, 30.0, 30.0, 20.0, 10.0),
                              values=np.zeros([5, 5]))
     X, Y = grid.center_coords()
     self.assertEqual(X[0, 0], 40.0)
     self.assertEqual(Y[0, 0], 35.0)
     self.assertEqual(X[-1, 0], 120.0)
     self.assertEqual(Y[-1, 0], 155.0)
     self.assertEqual(X[-1, -1], 240.0)
     self.assertEqual(Y[-1, -1], 195.0)
     return
コード例 #25
0
ファイル: raster_tests.py プロジェクト: ivn888/karta
 def test_mask_poly_inplace(self):
     t = -np.linspace(0, 2 * np.pi, 200)
     xp = ((2 + np.cos(7 * t)) * np.cos(t + 0.3) + 4) * 12
     yp = ((2 + np.cos(7 * t)) * np.sin(t + 0.2) + 4) * 12
     poly = karta.Polygon(zip(xp, yp), crs=karta.crs.Cartesian)
     grid = karta.RegularGrid([0.0, 0.0, 0.1, 0.1, 0.0, 0.0],
                              values=np.arange(1e6).reshape(1000, 1000),
                              crs=karta.crs.Cartesian)
     grid.mask_by_poly(poly, inplace=True)
     self.assertEqual(int(np.nansum(grid[:, :])), 97048730546)
     return
コード例 #26
0
ファイル: raster_tests.py プロジェクト: MachineAi/karta
 def test_mask_poly_partial(self):
     t = -np.linspace(0, 2 * np.pi, 200)
     xp = ((2 + np.cos(7 * t)) * np.cos(t + 0.3) + 2) * 12
     yp = ((2 + np.cos(7 * t)) * np.sin(t + 0.2) + 2) * 12
     poly = karta.Polygon(zip(xp, yp), crs=karta.crs.Cartesian)
     grid = karta.RegularGrid([0.0, 0.0, 0.1, 0.1, 0.0, 0.0],
                              values=np.arange(1e6).reshape(1000, 1000),
                              crs=karta.crs.Cartesian)
     masked_grid = grid.mask_by_poly(poly)
     self.assertEqual(masked_grid.data_mask.sum(), 181424)
     return
コード例 #27
0
ファイル: raster_tests.py プロジェクト: ivn888/karta
 def test_clip_to_extent(self):
     proto = karta.RegularGrid((500, 500, 30, 30, 0, 0), np.zeros((15, 15)))
     clipped = self.rast.clip(*proto.get_extent("edge"))
     self.assertEqual(clipped.size, (15, 15))
     self.assertEqual(clipped.transform, (510, 510, 30, 30, 0, 0))
     X, Y = clipped.center_coords()
     self.assertEqual(X[0, 0], 525)
     self.assertEqual(X[0, -1], 945)
     self.assertEqual(Y[0, 0], 525)
     self.assertEqual(Y[-1, 0], 945)
     return
コード例 #28
0
ファイル: raster_tests.py プロジェクト: ivn888/karta
 def test_mask_poly_partial(self):
     # test case where polygon is partly outside the grid extents
     # simply ensures that it doesn't crash for now
     t = -np.linspace(0, 2 * np.pi, 200)
     xp = ((2 + np.cos(7 * t)) * np.cos(t + 0.3) + 2) * 12
     yp = ((2 + np.cos(7 * t)) * np.sin(t + 0.2) + 2) * 12
     poly = karta.Polygon(zip(xp, yp), crs=karta.crs.Cartesian)
     grid = karta.RegularGrid([0.0, 0.0, 0.1, 0.1, 0.0, 0.0],
                              values=np.arange(1e6).reshape(1000, 1000),
                              crs=karta.crs.Cartesian)
     masked_grid = grid.mask_by_poly(poly)
     return
コード例 #29
0
ファイル: raster_tests.py プロジェクト: ivn888/karta
 def test_get_extent_crs(self):
     pe = peaks(n=49)
     crs = karta.crs.ProjectedCRS(
         "+proj=utm +zone=12 +ellps=WGS84 +north=True", "UTM 12N (WGS 84)")
     rast_utm12N = karta.RegularGrid((0.0, 0.0, 10000.0, 10000.0, 0.0, 0.0),
                                     values=pe,
                                     crs=crs)
     a, b, c, d = rast_utm12N.get_extent(reference='center',
                                         crs=karta.crs.LonLatWGS84)
     self.assertAlmostEqual(a, -115.45687156)
     self.assertAlmostEqual(b, -111.13480112)
     self.assertAlmostEqual(c, 0.0450996517)
     self.assertAlmostEqual(d, 4.3878488543)
     return
コード例 #30
0
ファイル: raster_tests.py プロジェクト: ivn888/karta
 def test_mask_poly_multipl(self):
     t = -np.linspace(0, 2 * np.pi, 200)
     xp = ((2 + np.cos(7 * t)) * np.cos(t + 0.3) + 4) * 4 + 15
     yp = ((2 + np.cos(7 * t)) * np.sin(t + 0.2) + 4) * 4 + 72
     poly = karta.Polygon(zip(xp, yp), crs=karta.crs.Cartesian)
     xp2 = ((2 + np.cos(7 * t)) * np.cos(t + 0.3) + 4) * 6 + 40
     yp2 = ((2 + np.cos(7 * t)) * np.sin(t + 0.2) + 4) * 6 + 30
     poly2 = karta.Polygon(zip(xp2, yp2), crs=karta.crs.Cartesian)
     grid = karta.RegularGrid([0.0, 0.0, 0.1, 0.1, 0.0, 0.0],
                              values=np.arange(1e6).reshape(1000, 1000),
                              crs=karta.crs.Cartesian)
     masked_grid = grid.mask_by_poly([poly, poly2])
     self.assertEqual(int(np.nansum(masked_grid[:, :])), 47081206720)
     return