Suite

Trouver les polygones irréguliers dans QGIS en utilisant Python

Trouver les polygones irréguliers dans QGIS en utilisant Python


J'ai un fichier de formes vectorielles et je veux trouver les polygones irréguliers. Quels sont les paramètres à prendre en compte pour vérifier l'irrégularité des entités surfaciques ?

Le calcul du périmètre et de l'étendue sera utile pour le rectangle, alors comment puis-je trouver les polygones irréguliers dans le fichier de formes de polygones ?

pour f dans layer.getFeatures() : périmètre = feat.geometry().length() bbox = geom.boundingBox() largeur = bbox.xMaximum() - bbox.xMinimum() height = bbox.yMaximum() - bbox. xMinimum()

Moyen facile

Vous n'avez pas besoin d'écrire du code pour cela

  • Vector > Outils de géométrie > Vérifier la validité de la géométrie

vous dira s'il y a des problèmes tels que

  • auto-intersection
  • violations des règles d'enroulement

… bien qu'il ne s'agisse que d'un rapport, cela ne corrigera pas votre géométrie.

Pour les corriger, vous pouvez utiliser v.nettoyer dans Grass, via le Processing Toolkit.

Dans du code

Si vous souhaitez le faire dans le code (par exemple dans le cadre d'un plugin)

  • QGSFeature a une méthode geometry() pour obtenir la QGSGeometry
  • QGSGeometry a une méthode isGeosValid () renvoyant un booléen pour tester la validité

Donc quelque chose comme (non testé)

pour f dans layer.getFeatures() : geom = feat.geometry() si geom.isGeosValid() : # est valide sinon : # non valide

Distance de Hausdorff

En fait quantifier quelle est la régularité d'un polygone, POSTGIS a une implémentation de Hausdorff Distance, ST_HausdorffDistance(geom1,geom2).

Vous pouvez comparer la géométrie du polygone avec quelque chose comme

  • la boîte englobante de votre polygone,
  • le cercle englobant minimum
  • une version simplifiée de votre polygone

par exemple.

n'importe lequel d'entre eux donnerait une mesure objective de l'irrégularité de votre polygone.

Une fois, j'ai utilisé cela sur une carte des comtés américains, pour identifier et regrouper les États en fonction de la similitude de forme avec d'autres comtés. Cela fonctionnait assez bien, même s'il ne reconnaissait les formes comme similaires que lorsque les tailles étaient proches. Mais si vous suivez ma suggestion de comparer avec la boîte englobante, cela ne devrait pas être un problème.


Voir la vidéo: Exemple de script Python sous QGis calculant la position de Chacun des Pixels dun Raster 13