Calcular las coordenadas del cuadro delimitador de un polígono seleccionado con QGIS


17

Acabo de recuperar manualmente las coordenadas del cuadro delimitador para un polígono de condado, que es una selección de una capa más grande de formas de condado. Me gustaría poder usar un complemento QGIS u otra función para calcular esto rápidamente y no a mano. Es casi seguro que esto sea posible, pero no pude encontrar nada con una búsqueda en Google

Respuestas:


26

La siguiente pequeña función de Python generará las coordenadas del cuadro delimitador de la característica actualmente activa:

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

Para definir la función, abra la consola de Python desde el menú Complementos, copie y pegue las tres líneas en la consola y presione Entrar. Luego puede llamar a la función escribiendo printBB()y presionando enter mientras se selecciona la función deseada.


1
Recibo este error cuando intento ejecutar este script: File "<input>", line 4 printBB() ^ SyntaxError: invalid syntax
cbunn

@cbunn, asegúrese de tener la capa seleccionada en las capas / tabla de contenido, ¡es muy sensible a esto!
DPSEspacial

gracias por la ayuda. También me olvidé de presionar enter para definir completamente la función printBB () antes de llamarla.
cbunn

2
Tuve que usar print (feature.geometry (). BoundingBox (). ToString ()) para la línea 3.
cm1

16

QGIS puede hacerlo a través de Polygon desde Layer Extent

Foto de archivo - Herramientas de investigación - Polígono de la capa de extensión

Producirá un nuevo shapefile con atributos como XMIN XMAX YMIN YMAX AREA WIDTH HEIGHT


1
Debe verificar Use only selected obectsy calculate for every objectobtener el resultado deseado.
AndreJ

hmm eso no funcionó para mí, el
archivo de forma generado

1
Solo desea marcar 'Usar solo objetos seleccionados' si tiene objetos seleccionados. Dejé ambos campos sin marcar y obtuve un buen resultado.
Johanna

4

También puede hacer esto usando el complemento PyShp en Python. Es mucho más 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

Puede encontrar más información sobre PyShp y otras funcionalidades aquí .


3

Si necesita muchos cuadros delimitadores de polígonos, puede "Guardar como ..." su capa en GeoJSON con la opción WRITE_BBOX = YES y habrá un solo atributo "bbox" antes de su atributo "geometría", incluso para multipolígonos.

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

1

Tuve que hacer esto para generar un campo que podría importar como una lista en otro lugar.

  1. Instalar el plugin QGIS FieldPyculator
  2. Alternar edición de capa
  3. Crear una nueva columna en la tabla de atributos como una cadena, por ejemplo, bbox (guardar ediciones)
  4. Open FieldPyculator
  5. Establecer campo de actualización en bbox
  6. En la expresión de campo, escriba algo como:

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

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

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

    value = bb

  7. correr

  8. Desactiva la edición y guarda la capa

1

Para un acceso rápido, una opción es mantener las coordenadas de bbox en la tabla de atributos.

  • Modo de edición de Toogle
  • Lanzamiento de la calculadora de campo
  • Establecer crear nuevo campo, establecer nombre (por ejemplo, xmin), tipo (decimal), longitud, (precisión)
  • Expresión: x_min ($ geometry)
  • Obtendrá un nuevo campo en la tabla de atributos con la coordenada IZQUIERDA.

    Repita esto para DERECHA, ABAJO, SUPERIOR con expresiones:

  • x_max ($ geometry)
  • y_min ($ geometría)
  • y_max ($ geometry)
  • Ejemplo del resultado. ingrese la descripción de la imagen aquí

    Luego puede configurar el complemento AutoFields para actualizar automáticamente estos campos cuando se cambia la función.

    Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
    Licensed under cc by-sa 3.0 with attribution required.