Vous devez répéter à un certain niveau. ( Mise à jour : j'ai édité pour supprimer toutes les boucles "for", à l'exception d'une compréhension de liste )
# imports used throughout this example
from shapely.geometry import Point
from shapely.ops import cascaded_union
from itertools import combinations
# Here are your input shapes (circles A, B, C)
A = Point(3, 6).buffer(4)
B = Point(6, 2).buffer(4)
C = Point(1, 2).buffer(4)
# list the shapes so they are iterable
shapes = [A, B, C]
Vous devez d'abord l'union de toutes les intersections (utilisez une union en cascade ), en utilisant la combinaison de chaque forme. Ensuite, vous supprimez (via difference
) les intersections de l'union de toutes les formes.
# All intersections
inter = cascaded_union([pair[0].intersection(pair[1]) for pair in combinations(shapes, 2)])
# Remove from union of all shapes
nonoverlap = cascaded_union(shapes).difference(inter)
Voici à quoi nonoverlap
ressemble (via JTS Test Builder):