def test_convert_to_geometry_coordinates_multipolygon(self): p1 = 'Polygon ((-116.94238466549290933 52.12861711455555991, -82.00526805089285176 61.59075286434307372, -59.92695130138864101 31.0207758265680269, -107.72286778108455962 22.0438778075388484, -122.76523743459291893 37.08624746104720771, -116.94238466549290933 52.12861711455555991))' p2 = 'Polygon ((-63.08099655131782413 21.31602121140134898, -42.70101185946779765 9.42769680782217279, -65.99242293586783603 9.912934538580501, -63.08099655131782413 21.31602121140134898))' p1 = wkt.loads(p1) p2 = wkt.loads(p2) mp1 = MultiPolygon([p1, p2]) mp2 = mp1.buffer(0.1) geoms = [mp1, mp2] gvar = GeometryVariable(name='gc', value=geoms, dimensions='gd') # Test the element node connectivity arrays. results = [] for pack in [False, True]: gc = gvar.convert_to(pack=pack) self.assertEqual(gc.dimension_map.get_driver(), DriverKey.NETCDF_UGRID) self.assertTrue(gc.has_multi) self.assertIn(OcgisConvention.Name.MULTI_BREAK_VALUE, gc.cindex.attrs) # Test multi-break values are part of the element node connectivity arrays. actual = gc.cindex.get_value() for idx, ii in enumerate(actual.flat): self.assertGreater( np.sum(ii == OcgisConvention.Value.MULTI_BREAK_VALUE), 0) results.append(actual) self.assertIsNotNone(gc.x.get_value()) self.assertIsNotNone(gc.y.get_value()) maxes = [] for ii in actual.flat: maxes.append(ii.max()) actual_max = max(maxes) for c in [gc.x, gc.y]: self.assertEqual(c.size - 1, actual_max) geoms = list(gc.iter_geometries()) for ctr, g in enumerate(geoms): self.assertIsInstance(g[1], BaseMultipartGeometry) self.assertEqual(ctr, 1) self.assertPolygonSimilar(geoms[0][1], mp1) self.assertPolygonSimilar(geoms[1][1], mp2) for idx in range(len(results[0])): self.assertNumpyAll(results[0][idx], results[1][idx])
def test_convert_to_geometry_coordinates_multipolygon(self): p1 = 'Polygon ((-116.94238466549290933 52.12861711455555991, -82.00526805089285176 61.59075286434307372, -59.92695130138864101 31.0207758265680269, -107.72286778108455962 22.0438778075388484, -122.76523743459291893 37.08624746104720771, -116.94238466549290933 52.12861711455555991))' p2 = 'Polygon ((-63.08099655131782413 21.31602121140134898, -42.70101185946779765 9.42769680782217279, -65.99242293586783603 9.912934538580501, -63.08099655131782413 21.31602121140134898))' p1 = wkt.loads(p1) p2 = wkt.loads(p2) mp1 = MultiPolygon([p1, p2]) mp2 = mp1.buffer(0.1) geoms = [mp1, mp2] gvar = GeometryVariable(name='gc', value=geoms, dimensions='gd') # Test the element node connectivity arrays. results = [] for pack in [False, True]: gc = gvar.convert_to(pack=pack) self.assertEqual(gc.dimension_map.get_driver(), DriverKey.NETCDF_UGRID) self.assertTrue(gc.has_multi) self.assertIn(OcgisConvention.Name.MULTI_BREAK_VALUE, gc.cindex.attrs) # Test multi-break values are part of the element node connectivity arrays. actual = gc.cindex.get_value() for idx, ii in enumerate(actual.flat): self.assertGreater(np.sum(ii == OcgisConvention.Value.MULTI_BREAK_VALUE), 0) results.append(actual) self.assertIsNotNone(gc.x.get_value()) self.assertIsNotNone(gc.y.get_value()) maxes = [] for ii in actual.flat: maxes.append(ii.max()) actual_max = max(maxes) for c in [gc.x, gc.y]: self.assertEqual(c.size - 1, actual_max) geoms = list(gc.iter_geometries()) for ctr, g in enumerate(geoms): self.assertIsInstance(g[1], BaseMultipartGeometry) self.assertEqual(ctr, 1) self.assertPolygonSimilar(geoms[0][1], mp1) self.assertPolygonSimilar(geoms[1][1], mp2) for idx in range(len(results[0])): self.assertNumpyAll(results[0][idx], results[1][idx])
def test_convert_to_geometry_coordinates_points(self): pt1 = Point(1, 2, 3) pt2 = Point(3, 4, 4) pt3 = Point(5, 6, 5) pt4 = Point(7, 8, 6) crs = WGS84() value = [pt1, pt2, pt3, pt4] mask = [True, False, True, False] gvar = GeometryVariable(value=value, dimensions='ngeom', crs=crs, mask=mask) gvar_mask = gvar.get_mask().tolist() self.assertEqual(mask, gvar_mask) actual = gvar.convert_to() self.assertEqual(actual.get_mask().tolist(), gvar_mask) for actual_geom, desired_geom in zip(actual.get_geometry_iterable(use_mask=False), value): self.assertEqual(actual_geom[1], desired_geom) self.assertEqual(actual.crs, crs)
def test_convert_to_geometry_coordinates_points(self): pt1 = Point(1, 2, 3) pt2 = Point(3, 4, 4) pt3 = Point(5, 6, 5) pt4 = Point(7, 8, 6) crs = WGS84() value = [pt1, pt2, pt3, pt4] mask = [True, False, True, False] gvar = GeometryVariable(value=value, dimensions='ngeom', crs=crs, mask=mask) gvar_mask = gvar.get_mask().tolist() self.assertEqual(mask, gvar_mask) actual = gvar.convert_to() self.assertEqual(actual.get_mask().tolist(), gvar_mask) for actual_geom, desired_geom in zip( actual.get_geometry_iterable(use_mask=False), value): self.assertEqual(actual_geom[1], desired_geom) self.assertEqual(actual.crs, crs)