| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- """Test GEOS predicates"""
- import unittest
- import pytest
- import shapely
- from shapely import geos_version
- from shapely.geometry import Point, Polygon
- class PredicatesTestCase(unittest.TestCase):
- def test_binary_predicates(self):
- point = Point(0.0, 0.0)
- point2 = Point(2.0, 2.0)
- assert point.disjoint(Point(-1.0, -1.0))
- assert not point.touches(Point(-1.0, -1.0))
- assert not point.crosses(Point(-1.0, -1.0))
- assert not point.within(Point(-1.0, -1.0))
- assert not point.contains(Point(-1.0, -1.0))
- assert not point.equals(Point(-1.0, -1.0))
- assert not point.touches(Point(-1.0, -1.0))
- assert point.equals(Point(0.0, 0.0))
- assert point.covers(Point(0.0, 0.0))
- assert point.covered_by(Point(0.0, 0.0))
- assert not point.covered_by(point2)
- assert not point2.covered_by(point)
- assert not point.covers(Point(-1.0, -1.0))
- def test_unary_predicates(self):
- point = Point(0.0, 0.0)
- assert not point.is_empty
- assert point.is_valid
- assert point.is_simple
- assert not point.is_ring
- assert not point.has_z
- def test_binary_predicate_exceptions(self):
- p1 = [
- (339, 346),
- (459, 346),
- (399, 311),
- (340, 277),
- (399, 173),
- (280, 242),
- (339, 415),
- (280, 381),
- (460, 207),
- (339, 346),
- ]
- p2 = [
- (339, 207),
- (280, 311),
- (460, 138),
- (399, 242),
- (459, 277),
- (459, 415),
- (399, 381),
- (519, 311),
- (520, 242),
- (519, 173),
- (399, 450),
- (339, 207),
- ]
- g1 = Polygon(p1)
- g2 = Polygon(p2)
- assert not g1.is_valid
- assert not g2.is_valid
- if geos_version < (3, 13, 0):
- with pytest.raises(shapely.GEOSException):
- g1.within(g2)
- else: # resolved with RelateNG
- assert not g1.within(g2)
- def test_relate_pattern(self):
- # a pair of partially overlapping polygons, and a nearby point
- g1 = Polygon([(0, 0), (0, 1), (3, 1), (3, 0), (0, 0)])
- g2 = Polygon([(1, -1), (1, 2), (2, 2), (2, -1), (1, -1)])
- g3 = Point(5, 5)
- assert g1.relate(g2) == "212101212"
- assert g1.relate_pattern(g2, "212101212")
- assert g1.relate_pattern(g2, "*********")
- assert g1.relate_pattern(g2, "2********")
- assert g1.relate_pattern(g2, "T********")
- assert not g1.relate_pattern(g2, "112101212")
- assert not g1.relate_pattern(g2, "1********")
- assert g1.relate_pattern(g3, "FF2FF10F2")
- # an invalid pattern should raise an exception
- with pytest.raises(shapely.GEOSException, match="IllegalArgumentException"):
- g1.relate_pattern(g2, "fail")
|