Como determinar o centróide dos polígonos?

34

Eu tenho um vetor de polígono e quero atingir rapidamente o centróide desse polígono para inserção em um documento de texto. Estou trabalhando com o QGIS. Eu procurei por outras perguntas e, embora algumas sejam um pouco próximas, elas não respondem completamente à minha pergunta.

Idealmente, as coordenadas do centróide estariam na tabela de atributos do polígono e eu poderia apenas copiar e colar as coordenadas.

Não quero criar um arquivo vetorial de ponto separado que represente o centróide e, em seguida, encontre essas coordenadas e copie e cole-as.

David
fonte
Qual é o formato do seu documento de texto?
Nathan W
É um documento do MS Word, mas na verdade poderia ser qualquer coisa.
David

Respostas:

34

Um centróide é por definição uma camada de pontos e não um polígono. Para isso, é necessário criar uma nova camada, que é fácil como torta no QGIS 1.8 e versões posteriores.

  • Carregue seu polígono
  • Vá para o menu -> Vetor -> Ferramentas de geometria -> centróide de polígono e crie uma camada de ponto centróide
  • Exporte as coordenadas do centróide criado para a tabela de atributos clicando em -> Menu vector -> Ferramentas de geometria -> Exportar / adicionar colunas de geometria.

Depois, você pode fazer uma junção espacial para adicionar as colunas dos centróides aos polígonos e excluir a camada de pontos novamente.

Maçarico
fonte
Obrigado pela resposta, agradeço a ajuda. Ainda assim, é muito trabalhoso saber quais são as coordenadas do centróide. Pena que não há uma maneira mais simples no QGIS.
David
Se você ainda deseja mais fácil, consulte o PostGIS e a função ST_Centroid mencionada abaixo. Dessa forma, você não precisa criar arquivos temporários. Como alternativa, você pode escrever um script python para o QGIS ou usar o SEXTANTE Modeler.
Curlew
10

Realmente, criar um novo shapefile é uma das opções mais fáceis. No entanto, você não precisa copiar e colar coordenadas. Fazem isto:

  • Crie o seu arquivo centróide usando a ferramenta Polígono Centroids.
  • Abra a tabela de atributos dos centróides e torne-a editável (ícone de lápis na parte inferior).
  • Abra a calculadora do campo (ícone da calculadora na parte inferior) e escolha a opção Criar novo campo e chame-a de algo significativo (por exemplo, leste).
  • Na lista de funções, expanda o menu Geometria e escolha $ x e repita com uma nova coluna para $ y (chamando-o de Norte, por exemplo).
  • Salve suas edições e agora você tem todas as coordenadas como parte da tabela de atributos, completa com o ID e os atributos originais do polígono, se você usou a ferramenta centróide.

Como alternativa, você precisará importar seus dados para o PostGIS e iterar sobre os polígonos, usando a função ST_Centroid e armazenar o resultado em um novo campo. O trabalho envolvido é praticamente o mesmo, mas a segunda opção significa que você não possui um arquivo de ponto de centróide separado.

MappaGnosis
fonte
Obrigado pela resposta. Eu aprecio sua ajuda. Parece que a resposta de Curlew é um pouco mais fácil para mim. Ainda assim, essas duas respostas são muito mais trabalho do que eu queria. No final, você acaba com vários shapefiles que você precisa nomear, excluir, editar etc.
David
8

Uma alma mais robusta à resposta de Mike: long = toreal(regexp_substr(geom_to_wkt(centroid($geometry)), '(-?\\d+\\.?\\d*) -?\\d+\\.?\\d*')) lat = toreal(regexp_substr(geom_to_wkt(centroid($geometry)), '-?\\d+\\.?\\d* (-?\\d+\\.?\\d*)'))

SzieberthAdam
fonte
1
Resposta subestimada;)
Fernando Irarrázaval G
6

Que tal usar isso na Calculadora de Campo 2.2?

Campo longo = substr (geomToWKT (centróide ($ geometria)), 7, 12)

Campo Lat = substr (geomToWKT (centróide ($ geometria)), strpos (geomToWKT (centróide ($ geometria)), '') +2, 12)

Parece que isso foi resolvido no 2.6 com a opção xmin xmin (centróide ($ geometry))

Mike
fonte
5

Acabei de encontrar este post com quase 5 anos de atraso (!), Mas aqui está o que faço para calcular centróides de polígono na versão 2.18.14:

  1. Comece a editar a camada de polígono
  2. Crie um novo campo de texto, chame-o de centrroidxy
  3. Usando a calculadora de campo, calcule centroidxy = x ($ geometry) || ',' || y ($ geometria)
  4. O resultado é semelhante a: 397640.915545362, 2126924.53637653
  5. Salve suas edições.
  6. Sua camada de polígono agora contém um campo com valores de centróide x, y
Stu Smith
fonte
simples e excelente
Kazuhito
3

Associe a tabela de pontos do centróide com a tabela dos polígonos e depois coloque as coordenadas com o nome e a forma do polígono. Os polígonos não têm um lat por muito tempo

Lewis
fonte
Obrigado pela sua resposta. Sim, eu percebo que os polígonos não têm um lat de comprimento por si só, simplesmente algo que pode ser calculado. Infelizmente, não é mais fácil do que isso no QGIS. Mais uma vez obrigado a todos pelas respostas. E tão rápido também. Obrigado!
David
2

Veio através deste post e foi difícil de seguir, sugeriu atualização:

Nota: Isso calculará a latitude e longitude em suas coordenadas de projeção (que podem ser metros). Se você deseja que as coordenadas em graus decimais (suponha que sim ou sejam ininteligíveis), primeiro salve a camada neste CRS: EPSG: 4326, WGS 84.

  1. Calculadora de campo aberto
  2. Criar novo campo
  3. Digite o nome (latitude ou longitude)
  4. Selecione decimal como tipo de campo de saída
  5. Digite esta expressão para latitude: y ($ geometry) e esta expressão para Longitude: x ($ geometry)
  6. pressione OK
Mark Matthews
fonte
-2

lon = ToReal (regexp_substr (geomToWKT (centroid ($ geometry)), '([\ s]')) lat = ToReal (regexp_substr (geomToWKT (centroid ($ geometry)), '\ s [)]'))

Marco Aurelio
fonte
1
Isso não é resposta. Por favor, visite o tour para obter uma melhor compreensão de como responder a uma pergunta ...
Nightwatch