test_parallel_offset.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import unittest
  2. import pytest
  3. from shapely.geometry import LinearRing, LineString
  4. from shapely.testing import assert_geometries_equal
  5. @pytest.mark.parametrize("distance", [float("nan"), float("inf")])
  6. def test_non_finite_distance(distance):
  7. g = LineString([(0, 0), (10, 0)])
  8. with pytest.raises(ValueError, match="distance must be finite"):
  9. g.parallel_offset(distance)
  10. class OperationsTestCase(unittest.TestCase):
  11. def test_parallel_offset_linestring(self):
  12. line1 = LineString([(0, 0), (10, 0)])
  13. left = line1.parallel_offset(5, "left")
  14. assert_geometries_equal(left, LineString([(0, 5), (10, 5)]))
  15. right = line1.parallel_offset(5, "right")
  16. assert_geometries_equal(right, LineString([(10, -5), (0, -5)]), normalize=True)
  17. right = line1.parallel_offset(-5, "left")
  18. assert_geometries_equal(right, LineString([(10, -5), (0, -5)]), normalize=True)
  19. left = line1.parallel_offset(-5, "right")
  20. assert_geometries_equal(left, LineString([(0, 5), (10, 5)]))
  21. # by default, parallel_offset is right-handed
  22. assert_geometries_equal(line1.parallel_offset(5), right)
  23. line2 = LineString([(0, 0), (5, 0), (5, -5)])
  24. assert_geometries_equal(
  25. line2.parallel_offset(2, "left", join_style=3),
  26. LineString([(0, 2), (5, 2), (7, 0), (7, -5)]),
  27. )
  28. assert_geometries_equal(
  29. line2.parallel_offset(2, "left", join_style=2),
  30. LineString([(0, 2), (7, 2), (7, -5)]),
  31. )
  32. # offset_curve alias
  33. assert_geometries_equal(
  34. line1.offset_curve(2, quad_segs=10),
  35. line1.parallel_offset(2, "left", resolution=10),
  36. )
  37. assert_geometries_equal(
  38. line1.offset_curve(-2, join_style="mitre"),
  39. line1.parallel_offset(2, "right", join_style=2),
  40. )
  41. def test_parallel_offset_linear_ring(self):
  42. lr1 = LinearRing([(0, 0), (5, 0), (5, 5), (0, 5), (0, 0)])
  43. assert_geometries_equal(
  44. lr1.parallel_offset(2, "left", resolution=1),
  45. LineString([(2, 2), (3, 2), (3, 3), (2, 3), (2, 2)]),
  46. )
  47. # offset_curve alias
  48. assert_geometries_equal(
  49. lr1.offset_curve(2, quad_segs=1),
  50. lr1.parallel_offset(2, "left", resolution=1),
  51. )