コード例 #1
0
    def test_union(self):
        cent1 = Centroids()
        cent1.lat, cent1.lon = np.array([0, 1]), np.array([0, -1])
        cent1.on_land = np.array([True, True])

        cent2 = Centroids()
        cent2.lat, cent2.lon = np.array([2, 3]), np.array([-2, 3])
        cent2.on_land = np.array([False, False])

        cent3 = Centroids()
        cent3.lat, cent3.lon = np.array([-1, -2]), np.array([1, 2])

        cent = cent1.union(cent2)
        np.testing.assert_array_equal(cent.lat, [0, 1, 2, 3])
        np.testing.assert_array_equal(cent.lon, [0, -1, -2, 3])
        np.testing.assert_array_equal(cent.on_land, [True, True, False, False])

        cent = cent1.union(cent1, cent2)
        np.testing.assert_array_equal(cent.lat, [0, 1, 2, 3])
        np.testing.assert_array_equal(cent.lon, [0, -1, -2, 3])
        np.testing.assert_array_equal(cent.on_land, [True, True, False, False])

        cent = Centroids().union(cent1)
        np.testing.assert_array_equal(cent.lat, [0, 1])
        np.testing.assert_array_equal(cent.lon, [0, -1])
        np.testing.assert_array_equal(cent.on_land, [True, True])

        cent = cent1.union(cent1)
        np.testing.assert_array_equal(cent.lat, [0, 1])
        np.testing.assert_array_equal(cent.lon, [0, -1])
        np.testing.assert_array_equal(cent.on_land, [True, True])

        cent = Centroids().union(cent1, cent2, cent3)
        np.testing.assert_array_equal(cent.lat, [0, 1, 2, 3, -1, -2])
        np.testing.assert_array_equal(cent.lon, [0, -1, -2, 3, 1, 2])
コード例 #2
0
    def test_centroids_check_pass(self):
        """Test vector data in Centroids"""
        data_vec = TestVector.data_vector()
        centr = Centroids()
        centr.lat, centr.lon, centr.geometry = data_vec
        centr.check()

        self.assertEqual(centr.crs, data_vec[2].crs)
        self.assertIsInstance(centr.total_bounds, tuple)
        for i in range(4):
            self.assertEqual(centr.total_bounds[i],
                             data_vec[2].total_bounds[i])

        self.assertIsInstance(centr.lat, np.ndarray)
        self.assertIsInstance(centr.lon, np.ndarray)
        self.assertIsInstance(centr.coord, np.ndarray)
        self.assertTrue(np.array_equal(centr.lat, VEC_LAT))
        self.assertTrue(np.array_equal(centr.lon, VEC_LON))
        self.assertTrue(
            np.array_equal(centr.coord,
                           np.array([VEC_LAT, VEC_LON]).transpose()))
        self.assertEqual(centr.size, VEC_LON.size)

        centr.area_pixel = np.array([1])
        with self.assertRaises(ValueError):
            centr.check()

        centr.area_pixel = np.array([])
        centr.dist_coast = np.array([1])
        with self.assertRaises(ValueError):
            centr.check()

        centr.dist_coast = np.array([])
        centr.on_land = np.array([1])
        with self.assertRaises(ValueError):
            centr.check()

        centr.on_land = np.array([])
        centr.region_id = np.array([1])
        with self.assertRaises(ValueError):
            centr.check()

        centr.region_id = np.array([])
        centr.lat = np.array([1])
        with self.assertRaises(ValueError):
            centr.check()

        centr.lat = np.array([])
        centr.lon = np.array([1])
        with self.assertRaises(ValueError):
            centr.check()

        centr.lon = np.array([])
        centr.geometry = gpd.GeoSeries(np.ones(1))
        with self.assertRaises(ValueError):
            centr.check()
コード例 #3
0
 def test_area_approx(self):
     """Test set_area_approx"""
     centr = Centroids()
     centr.lat, centr.lon, centr.geometry = self.data_vector()
     centr.geometry.crs = {'init': 'epsg:4326'}
     with self.assertRaises(ValueError):
         centr.set_area_approx()
コード例 #4
0
 def test_dist_coast_pass(self):
     """Test set_dist_coast"""
     centr = Centroids()
     centr.lat, centr.lon, centr.geometry = self.data_vector()
     centr.geometry.crs = {'init': 'epsg:4326'}
     centr.set_dist_coast()
     self.assertAlmostEqual(2594.2070842031694, centr.dist_coast[1])
     self.assertAlmostEqual(166295.87602398323, centr.dist_coast[-2])
コード例 #5
0
 def test_dist_coast_pass(self):
     """ Test set_dist_coast """
     centr = Centroids()
     centr.lat, centr.lon, centr.geometry = self.data_vector()
     centr.geometry.crs = {'init':'epsg:4326'}
     centr.set_dist_coast()
     self.assertAlmostEqual(5.798819757520 * 1000, centr.dist_coast[1])
     self.assertAlmostEqual(166.3650542203 * 1000, centr.dist_coast[-2])
コード例 #6
0
 def test_region_id_pass(self):
     """Test set_region_id"""
     centr = Centroids()
     centr.lat, centr.lon, centr.geometry = self.data_vector()
     centr.geometry.crs = {'init': 'epsg:4326'}
     centr.set_region_id()
     self.assertEqual(np.count_nonzero(centr.region_id), 6)
     self.assertEqual(centr.region_id[0], 52)  # 052 for barbados
コード例 #7
0
 def test_ne_crs_xy_pass(self):
     """ Test _ne_crs_xy """
     centr = Centroids()
     centr.lat, centr.lon, centr.geometry = self.data_vector()
     lon, lat = centr._ne_crs_xy()
     self.assertAlmostEqual(4.51072194, lon[0])
     self.assertAlmostEqual(0.00011838, lat[0])
     self.assertAlmostEqual(4.5107354, lon[-1])
     self.assertAlmostEqual(0.0001297, lat[-1])
コード例 #8
0
 def test_get_pixel_polygons_pass(self):
     """Test calc_pixels_polygons"""
     centr = Centroids()
     centr.lat, centr.lon, centr.geometry = self.data_vector()
     centr.geometry.crs = {'init': 'epsg:4326'}
     poly = centr.calc_pixels_polygons()
     self.assertIsInstance(poly[0], Polygon)
     self.assertTrue(np.allclose(poly.centroid[:].y.values, centr.lat))
     self.assertTrue(np.allclose(poly.centroid[:].x.values, centr.lon))
コード例 #9
0
 def test_equal_pass(self):
     """Test equal"""
     centr = Centroids()
     centr.lat, centr.lon, centr.geometry = self.data_vector()
     centr_bis = Centroids()
     centr_bis.set_lat_lon(np.array([1, 2, 3]), np.array([4, 5, 6]))
     self.assertFalse(centr.equal(centr_bis))
     self.assertFalse(centr_bis.equal(centr))
     self.assertTrue(centr_bis.equal(centr_bis))
     self.assertTrue(centr.equal(centr))
コード例 #10
0
 def test_on_land(self):
     """Test set_on_land"""
     centr = Centroids()
     centr.lat, centr.lon, centr.geometry = self.data_vector()
     centr.geometry.crs = {'init': 'epsg:4326'}
     centr.set_on_land()
     centr.set_region_id()
     centr.region_id[centr.region_id > 0] = 1
     self.assertTrue(
         np.array_equal(centr.on_land.astype(int), centr.region_id))
コード例 #11
0
 def test_ne_crs_geom_pass(self):
     """Test _ne_crs_geom"""
     centr = Centroids()
     centr.lat, centr.lon, centr.geometry = self.data_vector()
     xy_vec = centr._ne_crs_geom()
     lon, lat = xy_vec.geometry[:].x.values, xy_vec.geometry[:].y.values
     self.assertAlmostEqual(4.51072194, lon[0])
     self.assertAlmostEqual(0.00011838, lat[0])
     self.assertAlmostEqual(4.5107354, lon[-1])
     self.assertAlmostEqual(0.0001297, lat[-1])
コード例 #12
0
 def test_get_closest_point(self):
     """Test get_closest_point"""
     centr = Centroids()
     centr.lat, centr.lon, centr.geometry = self.data_vector()
     centr.geometry.crs = {'init': 'epsg:4326'}
     x, y, idx = centr.get_closest_point(-58.13, 14.38)
     self.assertAlmostEqual(x, -58.125)
     self.assertAlmostEqual(y, 14.375)
     self.assertEqual(idx, 295)
     self.assertEqual(centr.lon[idx], x)
     self.assertEqual(centr.lat[idx], y)
コード例 #13
0
 def test_remove_duplicate_pass(self):
     """Test remove_duplicate_points"""
     centr = Centroids()
     centr.lat, centr.lon, centr.geometry = data_vector()
     centr.geometry.crs = 'epsg:4326'
     # create duplicates manually:
     centr.geometry.values[100] = centr.geometry.values[101]
     centr.geometry.values[120] = centr.geometry.values[101]
     centr.geometry.values[5] = Point([-59.7, 12.5])
     centr.geometry.values[133] = Point([-59.7, 12.5])
     centr.geometry.values[121] = Point([-59.7, 12.5])
     centr.lon = centr.geometry.apply(lambda pt: pt.x).values
     centr.lat = centr.geometry.apply(lambda pt: pt.y).values
     self.assertEqual(centr.size, 296)
     rem_centr = centr.remove_duplicate_points()
     self.assertEqual(centr.size, 296)
     self.assertEqual(rem_centr.size, 292)
     rem2_centr = rem_centr.remove_duplicate_points()
     self.assertEqual(rem_centr.size, 292)
     self.assertEqual(rem2_centr.size, 292)
コード例 #14
0
    def test_set_lat_lon_to_meta_pass(self):
        """Test set_lat_lon_to_meta"""
        centr = Centroids()
        centr.lat, centr.lon, centr.geometry = self.data_vector()
        centr.geometry.crs = {'init': 'epsg:4326'}

        centr.set_lat_lon_to_meta()
        self.assertEqual(centr.meta['crs'], {'init': 'epsg:4326'})
        self.assertEqual(centr.meta['width'], 36)
        self.assertEqual(centr.meta['height'], 31)
        self.assertEqual(centr.meta['transform'][1], 0.0)
        self.assertEqual(centr.meta['transform'][3], 0.0)
        self.assertAlmostEqual(centr.meta['transform'][0], 0.08333333)
        self.assertAlmostEqual(centr.meta['transform'][2], -61.08333333)
        self.assertAlmostEqual(centr.meta['transform'][4], 0.08333333)
        self.assertAlmostEqual(centr.meta['transform'][5], 11.83333333)
コード例 #15
0
    def test_union_meta(self):
        cent1 = Centroids()
        cent1.set_raster_from_pnt_bounds((-1, -1, 0, 0), res=1)

        cent2 = Centroids()
        cent2.set_raster_from_pnt_bounds((0, 0, 1, 1), res=1)

        cent3 = Centroids()
        cent3.lat, cent3.lon = np.array([1]), np.array([1])

        cent = cent1.union(cent2)
        np.testing.assert_array_equal(cent.lat, [0, 0, -1, -1, 1, 1, 0])
        np.testing.assert_array_equal(cent.lon, [-1, 0, -1, 0, 0, 1, 1])

        cent = cent3.union(cent1)
        np.testing.assert_array_equal(cent.lat, [1, 0, 0, -1, -1])
        np.testing.assert_array_equal(cent.lon, [1, -1, 0, -1, 0])
コード例 #16
0
    def test_set_meta_to_lat_lon_pass(self):
        """Test set_meta_to_lat_lon by using its inverse set_lat_lon_to_meta"""
        lat, lon, geometry = TestVector.data_vector()

        centr = Centroids()
        centr.lat, centr.lon, centr.geometry = lat, lon, geometry

        centr.set_lat_lon_to_meta()
        meta = centr.meta
        centr.set_meta_to_lat_lon()
        self.assertEqual(centr.meta, meta)
        self.assertAlmostEqual(lat.max(), centr.lat.max(), 6)
        self.assertAlmostEqual(lat.min(), centr.lat.min(), 6)
        self.assertAlmostEqual(lon.max(), centr.lon.max(), 6)
        self.assertAlmostEqual(lon.min(), centr.lon.min(), 6)
        self.assertAlmostEqual(np.diff(centr.lon).max(), meta['transform'][0])
        self.assertAlmostEqual(np.diff(centr.lat).max(), meta['transform'][4])
        self.assertEqual(geometry.crs, centr.geometry.crs)
コード例 #17
0
 def test_append_pass(self):
     """Append points"""
     centr = Centroids()
     centr.lat, centr.lon, centr.geometry = self.data_vector()
     centr_bis = Centroids()
     centr_bis.set_lat_lon(np.array([1, 2, 3]), np.array([4, 5, 6]))
     with self.assertRaises(ValueError):
         centr_bis.append(centr)
     centr.geometry.crs = {'init': 'epsg:4326'}
     centr_bis.append(centr)
     self.assertAlmostEqual(centr_bis.lat[0], 1)
     self.assertAlmostEqual(centr_bis.lat[1], 2)
     self.assertAlmostEqual(centr_bis.lat[2], 3)
     self.assertAlmostEqual(centr_bis.lon[0], 4)
     self.assertAlmostEqual(centr_bis.lon[1], 5)
     self.assertAlmostEqual(centr_bis.lon[2], 6)
     self.assertTrue(np.array_equal(centr_bis.lat[3:], centr.lat))
     self.assertTrue(np.array_equal(centr_bis.lon[3:], centr.lon))
コード例 #18
0
 def test_elevation_3_pass(self):
     """ test set_elevation """
     centr = Centroids()
     centr.lat, centr.lon, centr.geometry = self.data_vector()
     centr.geometry.crs = DEF_CRS
     centr.set_elevation(product='SRTM3', resampling=Resampling.nearest)
     centr.set_on_land()
     self.assertTrue(np.all(centr.elevation[centr.on_land] > 0))
     self.assertTrue(
         np.all(
             centr.elevation[np.logical_not(centr.on_land)] == DEM_NODATA))
     self.assertEqual(centr.elevation[0], 23)
     self.assertEqual(centr.elevation[1], 92)
     self.assertEqual(centr.elevation[2], 69)
     self.assertEqual(centr.elevation[3], 77)
     self.assertEqual(centr.elevation[4], 133)
     self.assertEqual(centr.elevation[5], 41)
     self.assertEqual(centr.elevation.min(), DEM_NODATA)
コード例 #19
0
 def test_remove_duplicate_pass(self):
     """Test remove_duplicate_points"""
     centr = Centroids()
     centr.lat, centr.lon, centr.geometry = self.data_vector()
     centr.geometry.crs = {'init': 'epsg:4326'}
     # create duplicates manually:
     centr.geometry.values[100] = centr.geometry.values[101]
     centr.geometry.values[120] = centr.geometry.values[101]
     centr.geometry.values[5] = Point([-59.7, 12.5])
     centr.geometry.values[133] = Point([-59.7, 12.5])
     centr.geometry.values[121] = Point([-59.7, 12.5])
     self.assertEqual(centr.size, 296)
     rem_centr = centr.remove_duplicate_points()
     self.assertEqual(centr.size, 296)
     self.assertEqual(rem_centr.size, 292)  # 5 centroids removed
     rem2_centr = rem_centr.remove_duplicate_points()
     self.assertEqual(rem_centr.size, 292)
     self.assertEqual(rem2_centr.size, 292)
コード例 #20
0
 def test_size_pass(self):
     """Test size property"""
     centr = Centroids()
     centr.lat, centr.lon, centr.geometry = self.data_vector()
     centr.geometry.crs = {'init': 'epsg:4326'}
     self.assertEqual(centr.size, 296)
コード例 #21
0
    def test_centroids_check_pass(self):
        """Test vector data in Centroids"""
        data_vec = data_vector()
        centr = Centroids()
        centr.lat, centr.lon, centr.geometry = data_vec
        centr.check()

        self.assertTrue(u_coord.equal_crs(centr.crs, data_vec[2].crs))
        self.assertIsInstance(centr.total_bounds, tuple)
        for i in range(4):
            self.assertEqual(centr.total_bounds[i],
                             data_vec[2].total_bounds[i])

        self.assertIsInstance(centr.lat, np.ndarray)
        self.assertIsInstance(centr.lon, np.ndarray)
        self.assertIsInstance(centr.coord, np.ndarray)
        self.assertTrue(np.array_equal(centr.lat, VEC_LAT))
        self.assertTrue(np.array_equal(centr.lon, VEC_LON))
        self.assertTrue(
            np.array_equal(centr.coord,
                           np.array([VEC_LAT, VEC_LON]).transpose()))
        self.assertEqual(centr.size, VEC_LON.size)

        centr.area_pixel = np.array([1])
        with self.assertRaises(ValueError):
            centr.check()

        centr.area_pixel = np.array([])
        centr.dist_coast = np.array([1])
        with self.assertRaises(ValueError):
            centr.check()

        centr.dist_coast = np.array([])
        centr.on_land = np.array([1])
        with self.assertRaises(ValueError):
            centr.check()

        centr.on_land = np.array([])
        centr.region_id = np.array([1])
        with self.assertRaises(ValueError):
            centr.check()

        centr.region_id = np.array([])
        centr.lat = np.array([1])
        with self.assertRaises(ValueError):
            centr.check()

        centr.lat = np.array([])
        centr.lon = np.array([1])
        with self.assertRaises(ValueError):
            centr.check()

        centr.lon = np.array([])
        centr.geometry = gpd.GeoSeries(np.ones(1))
        with self.assertRaises(ValueError):
            centr.check()

        cen = Centroids()
        cen.meta = {
            'width': 10,
            'height': 20,
            'transform': rasterio.Affine(0.1, 0, 0, 0, 0.1, 0),
            'crs': DEF_CRS,
        }
        with self.assertRaises(ValueError):
            cen.check()