| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- import numpy as np
- import pytest
- import shapely
- from shapely import GeometryCollection, LineString, Point, wkt
- from shapely.geometry import shape
- @pytest.fixture()
- def geometrycollection_geojson():
- return {
- "type": "GeometryCollection",
- "geometries": [
- {"type": "Point", "coordinates": (0, 3, 0)},
- {"type": "LineString", "coordinates": ((2, 0), (1, 0))},
- ],
- }
- @pytest.mark.parametrize(
- "geom",
- [
- GeometryCollection(),
- GeometryCollection([]),
- shape({"type": "GeometryCollection", "geometries": []}),
- wkt.loads("GEOMETRYCOLLECTION EMPTY"),
- ],
- )
- def test_empty(geom):
- assert geom.geom_type == "GeometryCollection"
- assert geom.is_empty
- assert len(geom.geoms) == 0
- assert list(geom.geoms) == []
- def test_empty_subgeoms():
- geom = GeometryCollection([Point(), LineString()])
- assert geom.geom_type == "GeometryCollection"
- assert geom.is_empty
- assert len(geom.geoms) == 2
- parts = list(geom.geoms)
- if shapely.geos_version < (3, 9, 0):
- # the accessed empty 2D point has a 3D coordseq on GEOS 3.8
- parts[0] = shapely.force_2d(parts[0])
- assert parts == [Point(), LineString()]
- def test_child_with_deleted_parent():
- # test that we can remove a collection while keeping
- # children around
- a = LineString([(0, 0), (1, 1), (1, 2), (2, 2)])
- b = LineString([(0, 0), (1, 1), (2, 1), (2, 2)])
- collection = a.intersection(b)
- child = collection.geoms[0]
- # delete parent of child
- del collection
- # access geometry, this should not seg fault as 1.2.15 did
- assert child.wkt is not None
- def test_from_numpy_array():
- geoms = np.array([Point(0, 0), LineString([(1, 1), (2, 2)])])
- geom = GeometryCollection(geoms)
- assert len(geom.geoms) == 2
- np.testing.assert_array_equal(geoms, geom.geoms)
- def test_from_geojson(geometrycollection_geojson):
- geom = shape(geometrycollection_geojson)
- assert geom.geom_type == "GeometryCollection"
- assert len(geom.geoms) == 2
- geom_types = [g.geom_type for g in geom.geoms]
- assert "Point" in geom_types
- assert "LineString" in geom_types
- def test_geointerface(geometrycollection_geojson):
- geom = shape(geometrycollection_geojson)
- assert geom.__geo_interface__ == geometrycollection_geojson
- def test_len_raises(geometrycollection_geojson):
- geom = shape(geometrycollection_geojson)
- with pytest.raises(TypeError):
- len(geom)
- def test_numpy_object_array():
- geom = GeometryCollection([LineString([(0, 0), (1, 1)])])
- ar = np.empty(1, object)
- ar[:] = [geom]
- assert ar[0] == geom
|