Como faço um mapa de calor ou Choropleth que usa polígonos no QGis?

12

Eu tenho brincado com o plugin do heatmap para o QGIS e gostaria de saber se é possível fazer o heatmap usando um plug-in / ferramenta semelhante que use polígonos e também pontos?

Gostaria de obter uma representação da densidade dos dados da mesma maneira que o plugin do heatmap faz com pontos.

A imagem a seguir é um esboço do meu resultado desejado:

insira a descrição da imagem aqui

NWT Adam
fonte
3
Você já pensou em gerar centróides para seus polígonos e construir o mapa de calor a partir deles?
18712 Andytilia
1
Mais alguns detalhes sobre seus dados ajudariam. O que os polígonos representam e como eles são distribuídos? Você pode postar uma foto de amostra?
18712 Andytilia
@andytilia: Centroids não representam com precisão a cobertura dos polígonos. Os polígonos representam o uso de recursos em uma área de 1200m2. Alguns polígonos são minúsculos, representando um bom pedaço de bagas, e outros são enormes, cobrindo os habitats de caribu e alce. Eu estive procurando dividir uma grade hexagonal e depois contando sobreposições ... mas eu sou muito noob, então não consegui encontrar um bom tutorial que eu possa entender sobre esse assunto.
NWT Adam
1
consulte QGIS heatmap plugin qgis.spatialthoughts.com/2012/07/…
rkm
Os valores numéricos têm algum significado para você ou você está apenas procurando uma visualização bonita / clara?
Underdark

Respostas:

5

Talvez você possa gerar um conjunto de pontos aleatórios em seus polígonos, existe uma ferramenta QGIS para isso ? Se você tiver polígonos sobrepostos, terá uma densidade maior deles nessa área. Em seguida, use o mapa de calor para os pontos. Você precisaria executar várias rodadas para encontrar o número ideal de pontos, pois o resultado depende disso.

Se seus dados mostrarem a distribuição de alguns habitats, o que é confuso de qualquer maneira, isso pode ser mais próximo da situação do mundo real, onde um ponto reflete aproximadamente uma amostra.

JaakL
fonte
1
+1 Ótima idéia. A única coisa que gostaria de acrescentar é a Join in Location com os dados dos pontos e polies hexagonais, livrar-se de quaisquer recursos não correspondentes e gerar pontos nisso, para que seus pontos únicos não sejam abafados entre todos os outros pontos.
RomaH
Isso parece dar o melhor resultado. Obrigado a todas as pessoas que ofereceram soluções. Eu me sinto mal dando recompensa a apenas uma pessoa, pois parece haver várias boas soluções!
NWT Adam
6

Se entendi sua pergunta corretamente, fiz algo semelhante antes; só tinha que lembrar o que eu fiz.

Isso funcionará se suas políticas estiverem sobrepostas E não forem da mesma camada. Se eles estiverem na mesma camada e for possível, mova-os para camadas separadas; caso contrário, a camada de destino herdará apenas um dos valores.

O principal processo a ser usado é os atributos de junção por local no menu Vetor> Gerenciamento de dados . Aqui, especifique seu campo hexagonal como a camada de destino e a camada de junção como um de seus polígonos. Nomeie a camada resultante e marque o botão de opção Manter todos os registros .

A camada resultante deve ser uma cópia da sua camada hexagonal com todas as células que cruzam sua camada de polígono. Agora, para a interação, use sua última camada resultante como a camada de destino e junte-se à próxima camada de polígono. Pegue o lasyer resultante e junte-se à sua próxima camada até juntar todas as suas camadas.

Sua camada final deve ter herdado todos os campos de atributo das camadas anteriores e grande parte pode dizer NULL.

É aqui que temos que tocar algumas das entranhas de um shapefile, portanto, se você não salvou a camada como um shapefile, faça isso agora. E remova a camada do seu espaço de trabalho no QGIS.

Abra os arquivos * .dbf do shapefile no OpenOffice Calc, NÃO use o Excel. Ele irá alterar o arquivo e, inútil, aprendeu da maneira mais difícil. E não reordene os dados, eles também são muito específicos na ordem das linhas no arquivo. Verifique se os NULLs agora são zeros, se não forem, substitua-os com cuidado.

Agora insira o shapefile no QGIS e abra a tabela de atributos . Agora ele deve mostrar zeros em vez de NULL. Use a Calculadora de campos e some os campos que são realçados para o seu trabalho em uma nova coluna.

Agora você tem um campo resumido que deve mostrar com um grau de precisão os valores de todas as coleções de recursos que se sobrepõem ao campo de destino. Você pode usar a função Simbologia para colorir seus polígonos com base no valor do seu campo somado para um bom mapa de coropletas.

Se você deseja se livrar de todo o campo não utilizado no arquivo. Basta abrir o arquivo dbf novamente no Calc e excluir as colunas indesejadas à vontade. Pessoalmente, aconselho a aprender a se sentir confortável entrando em um shapefile dessa maneira, como faço frequentemente.

RomaH
fonte
Infelizmente, tenho centenas de polígonos sobrepostos na mesma camada. Você consegue ver uma maneira de contornar isso sem separá-los em algumas centenas de camadas?
NWT Adam
1
Você pode criar uma sobreposição de polígono com o PostGIS (se você usá-lo), que divide suas políticas sobrepostas. gis.stackexchange.com/questions/83/… Talvez alguém com melhor SQL-fu possa nos ajudar aqui e como fazer com que as políticas resultantes herdem seus valores, não sou muito bom nisso.
23912 RomaH
1
Outra opção, que eu sugeriria também, talvez seja a hora de repensar sua abordagem exata do seu problema. Quais dados você está tentando mapear? Existe uma razão para supor que o valor seria homogêneo nos polígonos? O polígono sobreposto teria efeitos acumulativos? A menos que você tenha boas evidências para sugerir essas coisas, o uso desse mapa para qualquer tipo de modelagem preditiva pode estar em terreno instável. Apenas pense bem, você pode ter a solução correta, mas pode descobrir uma maneira melhor de modelá-la ou mapeá-la.
23912 RomaH
1
Obrigado pela sugestão PostGIS. Vou dar uma olhada, mas estou começando a saber como usar o PostGIS. Quanto a reavaliar a pergunta ... Entendo o que você quer dizer, mas não sei de que outra forma eu poderia visualizar o que estamos tentando expressar. Nossos dados representam todas as áreas que os idosos da comunidade e os usuários de recursos mapeiam como produtivos ou importantes do ponto de vista cultural. Entendemos que o mapa de valores não é homogêneo em todo o polígono, mas é próximo o suficiente para o ponto que queremos expressar com o mapa.
NWT Adam
1
Polegares para baixo para qualquer coisa manual no qgis - especialmente quando você começa a lidar com toneladas de arquivos de forma, você pode acabar em uma posição realmente frustrante. Você não se arrependerá de usar seu SQL-fu, seja com o plugin postGIS ou GRASS (veja minha resposta abaixo: gis.stackexchange.com/a/42188/7689 ).
egbutter
4

Este é um fluxo de trabalho geral usando rasters. Eu não sei os detalhes específicos para realizá-lo no QGIS.

  1. Use a ferramenta de interseção para criar uma nova camada vetorial das áreas de sobreposição de polígonos
  2. Converta suas camadas de vetor, incluindo a camada de sobreposição, em rasters
  3. Use aritmética raster (provavelmente adição) para combinar as rasters
  4. O resultado deve ser uma varredura que se parece com um mapa de calor

Valores alfa / nulo e / ou transparência da camada permitiriam sobrepor a varredura em qualquer mapa base.


fonte
Depois de passar por esse fluxo de trabalho, fiquei com um grande bloco cinza cobrindo a extensão da nova varredura. Como faço para que isso pareça um mapa de calor?
NWT Adam
1
Existem valores diferentes atribuídos aos pixels na varredura final? Algumas reflexões: Talvez você precise especificar uma resolução mais fina (mais pixels) ao criar as rasters; os raspadores devem ter o mesmo tamanho e resolução; pode ser necessário esticar ou modificar o mapa de cores da varredura resultante para mostrar cores mais brilhantes para valores maiores.
Ok, eu tenho o mapa de cores configurado, mas só consigo obter duas cores azul (valor 0) e valor vermelho (2); o valor vermelho cobre a área das camadas originais do meu vetor e a camada sobreposta. Estou supondo que as camadas recebam um valor de 1 em vez de cada polígono quando foram rasterizadas. Então, quando os rasters foram adicionados, o valor total foi igual a 2. Como os valores são mantidos / adicionados no nível do polígono, e não no nível da camada?
NWT Adam
o raster resolução mais fina deve ajudar
Como faço uma resolução mais fina de varredura?
NWT Adam
4

Tente isso em vez disso, se ele atender aos seus requisitos, não será uma solução computacional para o conjunto de dados, mas se você estiver procurando simplesmente uma solução infográfico, poderá tentar isso.

Associe atributos por local, com suas células heaxgonais como destino e seus dados de pontos como junção. Escolha manter todos os recursos. Defina a simbologia para as células com o valor herdado na cor desejada e defina a transparência para algo como 50%.

Em seguida, em sua camada com os polys do círculo, defina sua simbologia para a mesma cor e transparência. Coloque o círculo poli na frente da célula poli. Isso dará a ilusão de maior saturação à medida que o valor aumenta.

Se desejar, você também pode extrair as linhas de todos os polis e sobreposições na parte superior, para que os contornos de subcamada não pareçam ser coloridos pelas outras camadas.

Você terá que brincar com as cores e a transparência para encontrar a melhor solução. Acho que as mesmas cores parecem melhores, mas experimentam.

RomaH
fonte
4

Sugiro que você use o plug-in GRASS - o QGIS possui uma funcionalidade bastante limitada (e por que reinventar a roda em python quando já existe um software como o GRASS?):

v.in.ogr.qgis

[as próximas duas linhas podem ser necessárias, dependendo se seus polígonos já têm um valor]

v.db.addcol 
v.db.update_const 

é aqui que somamos a sobreposição nos polígonos e fazemos a varredura com base nessas colunas

v.to.db ... qcolumns=sum(col_with_polygon_value)
v.to.rast.attr

v.out.ogr [r.out.ogr]
egbutter
fonte
3

Com o QGIS simples, pode ser complicado, você pode precisar de scripts personalizados ou usar bancos de dados espaciais como PostGIS ou Spatialite. Eu criaria uma grade regular de pontos com o PostGIS ou geraria como arquivo de texto CSV e importaria isso. Em seguida, desenhe um círculo em torno de cada ponto com st_buffer ou retângulos com ST_MakeEnvelope e conte todas as áreas sobrepostas de cada buffer. Então você provavelmente deseja remover todos os valores 0, se significa "sem dados". Finalmente, você pode criar um mapa de calor para a grade, usando o contador como campo Peso.

Você precisa experimentar diferentes resoluções de grade para encontrar uma ótima. Em essência, é muito semelhante à abordagem raster sugerida por Kevin, apenas permanecendo no mundo dos vetores.

JaakL
fonte