def test_shape_availability_exclude_geometry(ref): """ When excluding the quarter of the geometry, the eligible area must be a forth. Test the inverted case too. """ shapes = gpd.GeoSeries([box(X0, Y0, X1, Y1)], crs=ref.crs) exclude = gpd.GeoSeries([box(X0/2+X1/2, Y0/2+Y1/2, X1, Y1)], crs=ref.crs) res = 0.01 excluder = ExclusionContainer(ref.crs, res=res) excluder.add_geometry(exclude) masked, transform = shape_availability(shapes, excluder) area = shapes.geometry[0].area # get area without warning assert isclose(3*area/4, masked.sum() * res ** 2) excluder = ExclusionContainer(ref.crs, res=res) excluder.add_geometry(exclude, invert=True) masked, transform = shape_availability(shapes, excluder) area = shapes.geometry[0].area # get area without warning assert isclose(area/4, masked.sum() * res ** 2)
def test_exclusioncontainer_geometries(): crs = 3035 shapes = gpd.GeoSeries([box(X0, Y0, X1, Y1)], crs=crs) exclude = gpd.GeoSeries([box(X0/2+X1/2, Y0/2+Y1/2, X1, Y1)], crs=crs) res = 0.01 excluder = ExclusionContainer(crs, res=res) excluder.add_geometry(exclude, buffer=1) excluder.open_files() assert (excluder.geometries[0]['geometry'] != exclude).all() excluder.open_files() buffered = excluder.geometries[0]['geometry'] # open again and check that the buffer remains the same assert (excluder.geometries[0]['geometry'] == buffered).all() # should take GeoDataFrames and the result is the same excluder = ExclusionContainer(crs, res=res) excluder.add_geometry(exclude.to_frame('geometry'), buffer=1) excluder.open_files() assert (excluder.geometries[0]['geometry'] == buffered).all()