Bạn cần phải lặp đi lặp lại ở một số cấp độ. ( Cập nhật : Tôi đã chỉnh sửa để xóa tất cả các vòng lặp "cho", ngoại trừ việc hiểu một danh sách )
# 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]
Trước tiên, bạn cần liên kết của tất cả các giao điểm (sử dụng liên kết theo tầng ), sử dụng cặp kết hợp của mỗi hình dạng. Sau đó, bạn loại bỏ (thông qua difference
) các giao điểm từ sự kết hợp của tất cả các hình dạng.
# 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)
Đây là những gì nonoverlap
trông giống như (thông qua JTS Test Builder):