def test_fail_list_of_multipolygons(): """A list of multipolygons is not a valid multipolygon ctor argument""" multi = MultiPolygon( [ ( ((0.0, 0.0), (0.0, 1.0), (1.0, 1.0), (1.0, 0.0)), [((0.25, 0.25), (0.25, 0.5), (0.5, 0.5), (0.5, 0.25))], ) ] ) with pytest.raises(ValueError): MultiPolygon([multi])
def test_numpy_object_array(): geom = MultiPolygon( [ ( ((0.0, 0.0), (0.0, 1.0), (1.0, 1.0), (1.0, 0.0)), [((0.25, 0.25), (0.25, 0.5), (0.5, 0.5), (0.5, 0.25))], ) ] ) ar = np.empty(1, object) ar[:] = [geom] assert ar[0] == geom
def test_shape_empty(): empty_mp = MultiPolygon() empty_json = mapping(empty_mp) empty_shape = shape(empty_json) assert empty_shape.is_empty
def test_empty_multipolygon(self): assert MultiPolygon([]).is_empty
def test_multipolygon(self): # From coordinate tuples coords = [ ( ((0.0, 0.0), (0.0, 1.0), (1.0, 1.0), (1.0, 0.0)), [((0.25, 0.25), (0.25, 0.5), (0.5, 0.5), (0.5, 0.25))], ) ] geom = MultiPolygon(coords) assert isinstance(geom, MultiPolygon) assert len(geom.geoms) == 1 assert dump_coords(geom) == [ [ (0.0, 0.0), (0.0, 1.0), (1.0, 1.0), (1.0, 0.0), (0.0, 0.0), [(0.25, 0.25), (0.25, 0.5), (0.5, 0.5), (0.5, 0.25), (0.25, 0.25)], ] ] # Or from polygons p = Polygon( ((0, 0), (0, 1), (1, 1), (1, 0)), [((0.25, 0.25), (0.25, 0.5), (0.5, 0.5), (0.5, 0.25))], ) geom = MultiPolygon([p]) assert len(geom.geoms) == 1 assert dump_coords(geom) == [ [ (0.0, 0.0), (0.0, 1.0), (1.0, 1.0), (1.0, 0.0), (0.0, 0.0), [(0.25, 0.25), (0.25, 0.5), (0.5, 0.5), (0.5, 0.25), (0.25, 0.25)], ] ] # Or from another multi-polygon geom2 = MultiPolygon(geom) assert len(geom2.geoms) == 1 assert dump_coords(geom2) == [ [ (0.0, 0.0), (0.0, 1.0), (1.0, 1.0), (1.0, 0.0), (0.0, 0.0), [(0.25, 0.25), (0.25, 0.5), (0.5, 0.5), (0.5, 0.25), (0.25, 0.25)], ] ] # Sub-geometry Access assert isinstance(geom.geoms[0], Polygon) assert dump_coords(geom.geoms[0]) == [ (0.0, 0.0), (0.0, 1.0), (1.0, 1.0), (1.0, 0.0), (0.0, 0.0), [(0.25, 0.25), (0.25, 0.5), (0.5, 0.5), (0.5, 0.25), (0.25, 0.25)], ] with pytest.raises(IndexError): # index out of range geom.geoms[1] # Geo interface assert geom.__geo_interface__ == { "type": "MultiPolygon", "coordinates": [ ( ((0.0, 0.0), (0.0, 1.0), (1.0, 1.0), (1.0, 0.0), (0.0, 0.0)), ((0.25, 0.25), (0.25, 0.5), (0.5, 0.5), (0.5, 0.25), (0.25, 0.25)), ) ], }
def test_numpy_object_array(): geoms = [Point(), GeometryCollection()] arr = np.empty(2, object) arr[:] = geoms def test_shape_empty(): empty_mp = MultiPolygon() empty_json = mapping(empty_mp) empty_shape = shape(empty_json) assert empty_shape.is_empty @pytest.mark.parametrize( "geom", [ Point(), LineString(), Polygon(), MultiPoint(), MultiLineString(), MultiPolygon(), GeometryCollection(), LinearRing(), ], ) def test_empty_geometry_bounds(geom): """The bounds of an empty geometry is a tuple of NaNs""" assert len(geom.bounds) == 4 assert all(math.isnan(v) for v in geom.bounds)
def test_point(): assert bool(Point()) is False def test_geometry_collection(): assert bool(GeometryCollection()) is False geometries_all_types = [ Point(1, 1), LinearRing([(0, 0), (1, 1), (0, 1), (0, 0)]), LineString([(0, 0), (1, 1), (0, 1), (0, 0)]), Polygon([(0, 0), (1, 1), (0, 1), (0, 0)]), MultiPoint([(1, 1)]), MultiLineString([[(0, 0), (1, 1), (0, 1), (0, 0)]]), MultiPolygon([Polygon([(0, 0), (1, 1), (0, 1), (0, 0)])]), GeometryCollection([Point(1, 1)]), ] @pytest.mark.parametrize("geom", geometries_all_types) def test_setattr_disallowed(geom): with pytest.raises(AttributeError): geom.name = "test" @pytest.mark.parametrize("geom", geometries_all_types) def test_comparison_notimplemented(geom): # comparing to a non-geometry class should return NotImplemented in __eq__ # to ensure proper delegation to other (eg to ensure comparison of scalar # with array works)