Calcular coordenadas da caixa delimitadora de um polígono selecionado com o QGIS


17

Acabei de recuperar manualmente (e com certa imprecisão certeza) as coordenadas da caixa delimitadora de um polígono do condado, que é uma seleção de uma camada maior de formas do condado. Eu gostaria de poder usar um plug-in QGIS ou outra função para calcular isso rapidamente e não manualmente. Isso é quase certamente possível, mas não consegui encontrar nada com uma pesquisa no Google

Respostas:


26

A seguinte pequena função Python produzirá as coordenadas da caixa delimitadora do recurso ativo no momento:

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

Para definir a função, abra o console do Python no menu Plugins, copie e cole as três linhas no console e pressione enter. Em seguida, você pode chamar a função digitando printBB()e pressionando enter enquanto o recurso desejado está selecionado.


1
Eu recebo este erro quando tento executar este script: File "<input>", line 4 printBB() ^ SyntaxError: invalid syntax
cbunn

@cbunn certifique-se de ter a camada selecionada nas camadas / índice - é muito sensível a isso!
precisa saber é o seguinte

Obrigado pela ajuda. Eu também estava esquecendo de pressionar enter para definir completamente a função printBB () antes de chamá-la.
Cbunn 22/09/2015

2
Eu tive que imprimir uso para a linha 3. (feature.geometry () BoundingBox () toString ()..)
cm1

16

O QGIS pode fazer isso via Polygon a partir do Layer Extent

Imagens - Ferramentas de pesquisa - Polygon From Layer Extent

Produzirá um novo shapefile com atributos como XMIN XMAX YMIN YMAX ÁREA DE LARGURA


1
Você precisa verificar Use only selected obectse calculate for every objectobter o resultado desejado.
precisa saber é

hmm que não funcionou para mim, o shapefile emitido estava em branco, essencialmente
boulder_ruby

1
Você só deseja marcar 'Usar apenas objetos selecionados' se tiver objetos selecionados. Deixei ambos os campos desmarcados e obtive um bom resultado.
Johanna

4

Você também pode fazer isso usando o plugin PyShp no Python. É muito mais simples ...

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

Mais informações sobre PyShp e outras funcionalidades podem ser encontradas aqui .


3

Se você precisar de muitas caixas delimitadoras de polígono, poderá "Salvar como ..." sua camada no GeoJSON com a opção WRITE_BBOX = YES e haverá um único atributo "bbox" antes do atributo "geometria", mesmo para multipolígonos.

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

1

Eu tive que fazer isso para gerar um campo que eu poderia importar como uma lista em outro lugar.

  1. Instalar o plugin QGIS FieldPyculator
  2. Alternar edição da camada
  3. Crie uma nova coluna na tabela de atributos como string, por exemplo, bbox (salve as edições)
  4. Open FieldPyculator
  5. Definir campo de atualização como bbox
  6. Em Expressão de campo, digite algo como:

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

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

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

    value = bb

  7. Corre

  8. Desative a edição e salve a camada

1

Para acesso rápido, uma opção é manter as coordenadas bbox na tabela de atributos.

  • Modo de edição do Toogle
  • Iniciar calculadora de campo
  • Definir criar novo campo, definir nome (por exemplo, xmin), tipo (decimal), comprimento, (precisão)
  • Expressão: x_min ($ geometry)
  • Você receberá um novo campo na tabela de atributos com coordenada ESQUERDA.

    Repita isso para RIGHT, BOTTOM, TOP com expressões:

  • x_max ($ geometria)
  • y_min ($ geometria)
  • y_max ($ geometria)
  • Exemplo do resultado insira a descrição da imagem aqui

    Você pode definir o plug - in AutoFields para atualizar automaticamente esses campos quando o recurso for alterado.

    Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
    Licensed under cc by-sa 3.0 with attribution required.