test_shape.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import pytest
  2. from shapely.geometry import MultiLineString, Point, Polygon, shape
  3. from shapely.geometry.geo import _is_coordinates_empty
  4. @pytest.mark.parametrize(
  5. "geom",
  6. [{"type": "Polygon", "coordinates": None}, {"type": "Polygon", "coordinates": []}],
  7. )
  8. def test_polygon_no_coords(geom):
  9. assert shape(geom) == Polygon()
  10. def test_polygon_empty_np_array():
  11. np = pytest.importorskip("numpy")
  12. geom = {"type": "Polygon", "coordinates": np.array([])}
  13. assert shape(geom) == Polygon()
  14. def test_polygon_with_coords_list():
  15. geom = {"type": "Polygon", "coordinates": [[[5, 10], [10, 10], [10, 5]]]}
  16. obj = shape(geom)
  17. assert obj == Polygon([(5, 10), (10, 10), (10, 5)])
  18. def test_polygon_not_empty_np_array():
  19. np = pytest.importorskip("numpy")
  20. geom = {"type": "Polygon", "coordinates": np.array([[[5, 10], [10, 10], [10, 5]]])}
  21. obj = shape(geom)
  22. assert obj == Polygon([(5, 10), (10, 10), (10, 5)])
  23. @pytest.mark.parametrize(
  24. "geom",
  25. [
  26. {"type": "MultiLineString", "coordinates": []},
  27. {"type": "MultiLineString", "coordinates": [[]]},
  28. {"type": "MultiLineString", "coordinates": None},
  29. ],
  30. )
  31. def test_multilinestring_empty(geom):
  32. assert shape(geom) == MultiLineString()
  33. @pytest.mark.parametrize("coords", [[], [[]], [[], []], None, [[[]]]])
  34. def test_is_coordinates_empty(coords):
  35. assert _is_coordinates_empty(coords)
  36. def test_feature_from_geo_interface():
  37. # https://github.com/shapely/shapely/issues/1814
  38. class Feature:
  39. @property
  40. def __geo_interface__(self):
  41. return {
  42. "type": "Feature",
  43. "geometry": {"type": "Point", "coordinates": [0, 0]},
  44. }
  45. expected = Point([0, 0])
  46. result = shape(Feature())
  47. assert result == expected