Calcola le coordinate del rettangolo di selezione di un poligono selezionato con QGIS


17

Ho appena recuperato manualmente (e in qualche modo in modo impreciso sicuro) le coordinate del riquadro di delimitazione per un poligono di contea, che è una selezione da un livello più ampio di forme di contea. Mi piacerebbe essere in grado di utilizzare un plug-in QGIS o un'altra funzione per calcolare questo rapidamente e non a mano. Questo è quasi certamente possibile ma non sono riuscito a trovare nulla con una ricerca su Google

Risposte:


26

La seguente piccola funzione Python genererà le coordinate del riquadro di delimitazione della funzione attualmente attiva:

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

Per definire la funzione, apri la console Python dal menu Plugin, copia e incolla le tre linee nella console e premi invio. Quindi è possibile chiamare la funzione digitando printBB()e premendo Invio mentre è selezionata la funzione desiderata.


1
Ottengo questo errore quando provo a eseguire questo script: File "<input>", line 4 printBB() ^ SyntaxError: invalid syntax
cbunn

@cbunn assicurati di avere il layer selezionato nei layer / sommario - è molto sensibile a questo!
DPSSpatial,

grazie per l'aiuto. Dimenticavo anche di premere Invio per definire completamente la funzione printBB () prima di chiamarla.
cbunn,

2
Ho dovuto usare print (feature.geometry (). BoundingBox (). ToString ()) per la linea 3.
cm1

16

QGIS può farlo tramite Polygon da Layer Extent

Strumenti di ricerca - Polygon From Layer Extent

Produrrà un nuovo shapefile con attributi come XMIN XMAX YMIN YMAX AREA LARGHEZZA ALTEZZA


1
Devi controllare Use only selected obectse calculate for every objectper ottenere il risultato desiderato.
AndreJ,

hmm che non ha funzionato per me, il file di forma emesso era essenzialmente vuoto
boulder_ruby,

1
Devi solo selezionare "Usa solo oggetti selezionati" se hai oggetti selezionati. Ho lasciato entrambi quei campi deselezionati e ho ottenuto un ottimo risultato.
Johanna

4

Puoi anche farlo usando il plugin PyShp in Python .. È molto più semplice ...

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

Ulteriori informazioni su PyShp e altre funzionalità sono disponibili qui .


3

Se hai bisogno di molti riquadri di delimitazione poligonale, puoi "Salva con nome ..." il tuo livello in GeoJSON con l'opzione WRITE_BBOX = YES e ci sarà un singolo attributo "bbox" prima dell'attributo "geometria", anche per i multipoligoni.

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

1

Ho dovuto farlo per generare un campo che potrei importare come elenco altrove.

  1. Installa il plug-in QGIS FieldPyculator
  2. Attiva / disattiva la modifica del livello
  3. Crea una nuova colonna nella tabella degli attributi come stringa ad es. Bbox (salva le modifiche)
  4. Apri FieldPyculator
  5. Imposta il campo di aggiornamento su bbox
  6. Nell'espressione Field digitare qualcosa del tipo:

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

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

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

    value = bb

  7. Correre

  8. Disattiva la modifica e salva il livello

1

Per un accesso rapido, un'opzione è quella di mantenere le coordinate bbox nella tabella degli attributi.

  • Modalità di modifica di Toogle
  • Avvia il calcolatore del campo
  • Imposta crea nuovo campo, imposta nome (ad es. Xmin), tipo (decimale), lunghezza, (precisione)
  • Espressione: x_min ($ geometry)
  • Otterrai un nuovo campo nella tabella degli attributi con coordinate SINISTRA.

    Ripeti l'operazione per DESTRA, INFERIORE, SUPERIORE con le espressioni:

  • x_max ($ geometria)
  • min_y ($ geometria)
  • max_y ($ geometria)
  • Esempio del risultato inserisci qui la descrizione dell'immagine

    È quindi possibile impostare il plug-in AutoFields per aggiornare automaticamente questi campi quando viene modificata la funzione.

    Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
    Licensed under cc by-sa 3.0 with attribution required.