Calculer les coordonnées de la boîte englobante d'un polygone sélectionné avec QGIS


17

Je viens de récupérer manuellement (et de façon quelque peu inexacte je suis sûr) les coordonnées du cadre de délimitation pour un polygone de comté, qui est une sélection à partir d'une plus grande couche de formes de comté. J'aimerais pouvoir utiliser un plugin QGIS ou une autre fonction pour calculer cela rapidement et pas à la main. C'est presque certainement possible, mais je n'ai rien trouvé avec une recherche Google

Réponses:


26

La petite fonction Python suivante affichera les coordonnées du cadre de sélection de la fonction actuellement active:

def printBB():
    feature = iface.activeLayer().selectedFeatures()[0]
    print feature.geometry().boundingBox().toString()

Pour définir la fonction, ouvrez la console Python depuis le menu Plugins, copiez et collez les trois lignes dans la console et appuyez sur Entrée. Vous pouvez ensuite appeler la fonction en tapant printBB()et en appuyant sur Entrée pendant que la fonction souhaitée est sélectionnée.


1
File "<input>", line 4 printBB() ^ SyntaxError: invalid syntax
J'obtiens

@cbunn assurez-vous que le calque est sélectionné dans les calques / table des matières - il est très sensible à cela!
DPSSpatial

Merci pour l'aide. J'oubliais également d'appuyer sur Entrée pour définir complètement la fonction printBB () avant de l'appeler.
cbunn

2
J'ai dû utiliser print (feature.geometry (). BoundingBox (). ToString ()) pour la ligne 3.
cm1

17

QGIS peut le faire via Polygon from Layer Extent

Banque d'images - Outils de recherche - Polygone From Layer Extent

Produira un nouveau fichier de formes avec des attributs comme XMIN XMAX YMIN YMAX AREA WIDTH HEIGHT


1
Vous devez vérifier Use only selected obectset calculate for every objectobtenir le résultat souhaité.
AndreJ

hmm qui n'a pas fonctionné pour moi, le fichier de formes en sortie était essentiellement vide
boulder_ruby

1
Vous souhaitez uniquement cocher «Utiliser uniquement les objets sélectionnés» si vous avez sélectionné des objets. J'ai laissé ces deux champs incontrôlés et j'ai obtenu un bon résultat.
Johanna

4

Vous pouvez également le faire en utilisant le plugin PyShp en Python .. C'est beaucoup plus simple ...

import shapefile

sf = shapefile.Reader("Path to shapefile...") 
shapes = sf.shapes() 
bbox = shapes[0].bbox # Retrieves the bounding box of the first shape

print bbox # Will print the bounding box coordinates

Plus d'informations sur PyShp et d'autres fonctionnalités peuvent être trouvées ici .


3

Si vous avez besoin de plusieurs boîtes englobantes de polygone, vous pouvez "Enregistrer sous ..." votre couche dans GeoJSON avec l'option WRITE_BBOX = YES et il y aura un seul attribut "bbox" avant votre attribut "geometry", même pour les multipolygones.

..., "bbox": [ -70.062408006999874, 12.417669989000046, -69.876820441999939, 12.632147528000104 ], "geometry": ...

1

J'ai dû le faire pour générer un champ que je pouvais importer sous forme de liste ailleurs.

  1. Installer le plugin QGIS FieldPyculator
  2. Basculer l'édition du calque
  3. Créer une nouvelle colonne dans la table attributaire sous forme de chaîne, par exemple bbox (enregistrer les modifications)
  4. Ouvrir FieldPyculator
  5. Définir le champ de mise à jour sur bbox
  6. Dans l'expression de champ, tapez quelque chose comme:

    bb = $geom.boundingBox().toString()

    bb = bb.replace(' ','')

    bb = bb.replace(':',',')

    value = bb

  7. Courir

  8. Désactiver l'édition et enregistrer le calque

1

Pour un accès rapide, une option consiste à conserver les coordonnées de la bbox dans la table attributaire.

  • Mode d'édition de Google
  • Lancer le calculateur de champ
  • Définir créer un nouveau champ, définir le nom (par exemple xmin), le type (décimal), la longueur (précision)
  • Expression: x_min ($ geometry)
  • Vous obtiendrez un nouveau champ dans la table attributaire avec les coordonnées GAUCHE.

    Répétez cette opération pour DROITE, BAS, HAUT avec les expressions:

  • x_max ($ geometry)
  • y_min ($ géométrie)
  • y_max ($ geometry)
  • Exemple du résultat entrez la description de l'image ici

    Vous pouvez ensuite configurer le plug-in AutoFields pour mettre automatiquement à jour ces champs lorsque la fonctionnalité est modifiée.

    En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
    Licensed under cc by-sa 3.0 with attribution required.