Полезно знать:
Вы можете применять те же методы «Предикаты и взаимосвязи» к многополигонам, которые вы можете применять к любому другому геометрическому объекту в форме ( см. Документацию ).
Проверка на перекрытие:
Чтобы проверить, перекрываются ли два мультиполигона, вы можете использовать object.intersects(other)
.Посмотрите этот пример (но не мультиполигоны с вашей картинки):
from shapely.geometry import MultiPolygon
a = [(0, 0), (0, 1), (1, 1), (1, 0), (0, 0)]
b = [(1, 1), (1, 2), (2, 2), (2, 1), (1, 1)]
multi1 = MultiPolygon([[a, []], [b, []]])
c = [(0, 1.5), (1.5, 1.5), (1.5, 3), (0, 3), (1.5, 3)]
d = [(1.5, 1.5), (1.5, 0), (3, 0), (3, 1.5), (1.5, 1.5)]
multi2 = MultiPolygon([[c, []], [d, []]])
print(multi1.intersects(multi2))
print(multi2.intersects(multi1))
Возвращает
>>>True
>>>True
Редактировать:
Очевидно, что OPне заинтересован в наложении, но "пытается выяснить, имеет ли красный [мульти] многоугольник те же координаты, что и части желтого".
В этом случае вы можете перебирать отдельные полигоны и проверятьесли они равны одному из целевых полигонов:
from shapely.geometry import MultiPolygon
#target multipolygon
a = [(0, 0), (0, 1), (1, 1), (1, 0), (0, 0)]
b = [(1, 1), (1, 2), (2, 2), (2, 1), (1, 1)]
c = [(2, 1), (3, 1), (3, 0), (2, 0), (2, 1)]
multi_target = MultiPolygon([[a, []], [b, []], [c, []]])
#test multipolygon with two polygons that match a target polygon
a = [(0, 0), (0, 1), (1, 1), (1, 0), (0, 0)]
b = [(1, 1), (1, 2), (2, 2), (2, 1), (1, 1)]
multi_test1 = MultiPolygon([[a, []], [b, []]])
#test multipolygon where one polygon does not exactly match a target polygon.
a = [(0, 0.5), (0, 1), (1, 1), (1, 0.5), (0, 0.5)]
b = [(1, 1), (1, 2), (2, 2), (2, 1), (1, 1)]
multi_test2 = MultiPolygon([[a, []], [b, []]])
def check_multipolys(test, target):
for test_poly in test:
exists = False
for target_poly in target:
if test_poly.equals(target_poly):
exists = True
break
if not exists:
return False
return True
>>>check_multipolys(multi_test1, multi_target)
>>>True
>>>check_multipolys(multi_test2, multi_target)
>>>False
На будущее: исходный код был бы более полезным для ответа на ваш вопрос, чем скриншот документации.