Gostaria de obter a interseção de vários polígonos. Usando o shapely
pacote do Python , posso encontrar a interseção de dois polígonos usando a intersection
função Existe uma função eficiente semelhante para obter a interseção de vários polígonos?
Aqui está um trecho de código para entender o que quero dizer:
from shapely.geometry import Point
coord1 = ( 0,0 )
point1 = Point(coord1)
circle1 = point1.buffer(1)
coord2 = ( 1,1 )
point2 = Point(coord2)
circle2 = point2.buffer(1)
coord3 = ( 1,0 )
point3 = Point(coord3)
circle3 = point3.buffer(1)
Uma interseção de dois círculos pode ser encontrada por circle1.intersection(circle2)
. Eu posso encontrar a interseção dos três círculos por circle1.intersection(circle2).intersection(circle3)
. No entanto, essa abordagem não é vendável para um grande número de polígonos, pois requer cada vez mais código. Eu gostaria de uma função que pega um número arbitrário de polígonos e retorna sua interseção.
Respostas:
Uma abordagem possível seria considerar a combinação de pares de polígonos, suas interseções e, finalmente, a união de todas as interseções por meio de uma união em cascata (como sugerido aqui ):
Uma abordagem mais eficiente deve usar um índice espacial, como Rtree , para lidar com muitas geometrias (não o caso dos três círculos):
fonte
Por que não usar uma iteração ou recursividade? algo como :
fonte
Teste este código. é bastante simples em conceito e acredito que você recebe o que procura.
e se você deseja que a saída seja armazenada como um arquivo shapefile, use fiona:
isso gera -
fonte
k
ev
são más escolhas para nomes de variáveis em suasdict
compreensões. Essas variáveis se referem a diferentes elementos dedic.items()
, e não a um par de valores-chave. Algo comoa, b
seria menos enganador.