J'essaie de comprendre comment utiliser python pour extraire les polygones d'un vecteur qui se chevauchent de> 90% par un autre vecteur. J'aimerais alors avoir un vecteur / carte qui n'affichera que ces polygones. L'image d'exemple montre mes calques. Je veux tous les polygones gris qui sont> 90% rouges.
J'ai besoin de tout faire via python (ou des méthodes automatisées similaires). J'ai ~ 1000 cartes à traiter de la même manière.
Réponses:
Le code suivant fonctionne dans ma console Python de QGIS. Il produit une couche mémoire avec des polygones qui sont> 90% chevauchés par des zones rouges.
J'ai essayé le code avec ces deux couches vectorielles:
Après avoir exécuté le code sur la console Python de QGIS, pour corroborer les résultats, les index i, j des entités impliquées, les zones d'intersection, l'attribut de champ dans polygons_intersects (1 pour les zones rouges et 2 pour les zones grises) et le critère de chevauchement ont été imprimés. .
La couche de mémoire créée (traits verts) peut être observée à l'image suivante. C'était comme prévu.
la source
Voici une solution qui ne nécessite pas de python.
Ajoutez une nouvelle couche virtuelle avec une requête comme:
Avec :
Basins800 comme couche que vous souhaitez filtrer avec des polygones gris
Gravité: votre couche rouge se chevauche.
Le résultat sera une nouvelle couche avec seulement tous les plolygones gris> 90% chevauchés par des polygones rouges, avec un nouveau champ contenant le pourcentage de chevauchement.
J'espère que cela fonctionne. Je peux ajouter plus de détails sur la requête si nécessaire.
Remarque: Vos données contiennent de très petits polygones (provenant de votre traitement raster et correspondant à un pixel raster (sur l'image, nous pouvons voir 4 polygones mais il y a 25 autres petits polygones). Cela rend la requête très lente à exécuter (fonction Intersection génère une entité pour chaque couple d'entités à partir des deux couches).
la source
Après avoir vu le lien vers les fichiers de formes Severity et Basins800 , j'ai pu comprendre le géoprocessus nécessaire. J'ai modifié le code dans:
Trouver par programme des polygones qui sont> 90% chevauchés par une autre couche de polygones vectoriels en utilisant QGIS?
pour obtenir celui-ci:
Après avoir exécuté le code, avec ces fichiers de formes sur la console Python de QGIS, en quelques minutes, j'ai obtenu un résultat similaire à Pierma ; où la couche mémoire avait 31 entités (différentes des 29 polygones obtenus par lui).
Je ne vais pas déboguer les résultats car il existe des interactions 1901 * 3528 = 6706728 pour les fonctionnalités. Cependant, le code semble prometteur.
la source