Estou construindo um script em python usando OGR / GDAL.
Eu tenho um conjunto de shapefiles e um conjunto de arquivos raster GeoTiff.
Eu gostaria que meu script ignorasse os shapefiles se eles não cruzarem com a área raster.
O shapefile não é um retângulo, portanto, não posso simplesmente comparar os valores xmin / xmax, ymin / ymax retornados por layer.GetExtent (). Eu preciso do polígono real que representa sua forma geral e, em seguida, de alguma maneira de determinar se esse polígono cruza com o quadrado raster.
Eu estava pensando que, de alguma forma, poderia mesclar todos os polígonos no arquivo shapefile em um recurso e, em seguida, ler a geometria desse recurso e comparar essas informações na extensão da varredura. No entanto, não tenho certeza de como executar isso.
- Como extrair informações de polígono de borda do shapefile?
- Como determinar se esse polígono cruza uma determinada área quadrada?
Respostas:
O script a seguir determina a caixa delimitadora de uma varredura e cria com base na geometria da caixa delimitadora.
A seguir, é determinada a geometria do polígono do vetor. Isso responde à sua primeira pergunta.
Por fim, a geometria do vetor e da varredura são testadas para interseção (retornos
True
ouFalse
). Isso responde à sua segunda pergunta.fonte
Acho a solução @ustroetz muito útil, mas precisava ser corrigida em dois lugares. Em primeiro lugar, pixelHeight = transform [5] já é um valor negativo, portanto, a equação deve ser
Em segundo lugar, a ordem dos pontos no anel deve ser no sentido anti-horário. Eu estava tendo problemas com isso. A ordem correta é:
fonte