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

boulder_ruby
la source

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.

Jake
la source
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

Jorge Santos
la source
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 .

Akhil
la source
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": ...
thadk
la source
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
Ben
la source
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.

    jurajb
    la source