Algoritmos
<-- Voltar à página hierarquicamente anterior
Os 19 Algoritmos principais para trabalhar com camadas vetoriais
Apresenta-se aqui uma pequena descrição dos algoritmos mais relevantes para o trabalho com camadas vetoriais, nomeadamente para o cálculo de perímetros urbanos:
Agregar / Dissolver
Agregar (menu "Vetor / Ferramentas de geoprocessamento / Dissolver...", em inglês chama-se "Dissolve") itens de uma camada:
- Se não se escolher nenhum campo no "Dissolver campos" então agrega todos os itens da camada de entrada criando uma nova camada com um único item que contém a geometria correspondente à agregação das geometrias dos itens originais. Atenção que na tabela de atributos resultante, que só tem uma única linha, muitas das colunas provavelmente irão conter dados errados (sugere-se que a seguir se apague essas colunas ou se corrija os seus valores).
- Pode-se igualmente agregar "dissolvendo" um ou mais campos, nesse caso todos os itens que tenham o mesmo valor para esses atributos são agregados (por exemplo numa camada que contenha concelhos e freguesias mandar agregar por concelho)
Exemplo utilização: se tivermos o CAOP com os dados das freguesias de Portugal Continental e usarmos dissolver sem escolher nenhum campo obtemos uma camada vetorial com um único item na tabela de atributos e que na componente de geometria contém os contornos da fronteira de Portugal. Se fizermos o mesmo e selecionarmos o campo concelho para dissolver obtemos 278 itens (um por concelho) e na componente de geometria obtemos os contornos de cada concelho. É importante realçar que em ambos os casos alguns dos campos na tabela de atributos ficam com valores inválidos (por exemplo o campo freguesia se se dissolver por concelho) e esses campos devem ser apagados.
Buffer (contorno exterior)
Buffer (contorno exterior) (menu "Vetor / Ferramentas de geoprocessamento / Buffer..." sendo que aparece o nome "Contorno exterior" em vez de "Buffer" nalgumas versões do QGIS, por exemplo aparece "Contorno exterior" na versão 3.16.5 mas já aparece "Buffer" na versão 3.16.12): permite criar uma nova camada com um multi-polígono à volta dos elementos da camada de entrada (input) até à distância definida. Normalmente só se quer definir a camada de entrada, a distância em metros, e costuma-se querer que a checkbox "Resultado da agregação" esteja marcada de modo a obter-se como resultado um único item (uma única linha na tabela de atributos).
NOTA: quando se tem problemas com a geometria (geometria inválida) pode-se também usar este algoritmo, só que desta vez com uma distância de zero metros, isso elimina a parte do polígono com problemas de geometria (em vez de tentar criar um novo polígono o mais parecido possível com o original), a seguir pode-se comparar o resultado obtido com o que se encontra na camada que tem a geometria inválida.
Exemplo utilização: Dependendo das circunstâncias devemos usar a distância ou metade dela. Se quisermos saber que edifícios se encontram a menos de 50 metros uns dos outros devemos criar um buffer usando metade da distância (25 metros). Se quisermos descobrir o que é que se encontra a uma distância inferior a 1000 metros de um conjunto de cemitérios criamos um buffer usando a camada vetorial dos cemitérios como camada de entrada, na distância colocamos 1000 metros e normalmente ativamos a checkbox "Resultado da agregação". Se quisermos saber o que é que se encontra a uma distância inferior a 1000 metros de um cemitério "e" a uma distância inferior a 1500 metros de um campo de jogos fazemos o acima descrito para o cemitério e a seguir fazemos o mesmo para o campo de jogos, e depois usamos o algoritmo intersecção para obter a geometria dos locais que verificam ambas as condições. Deve-se a seguir na tabela de atributos eliminar as colunas que fiquem com valores inválidos.
Centróide
Centróide (menu "Vetor / Ferramentas de geometria / Centróides"): permite converter um polígono num ponto colocado no seu centro geométrico. Cria uma nova camada de pontos, com um ponto a representar o centróide da geometria associada a cada polígono. Os atributos associados a cada ponto na camada de saída são os mesmos que estão associados aos elementos originais.
Contar pontos em polígonos
Contar pontos em polígonos (menu "Processamento / Ferramenta de processamento / Análise vetorial / Contar pontos em polígonos"): a partir de uma camada de pontos e de uma camada de polígonos conta quantos pontos existem em cada polígono. Uma nova camada de polígonos é gerada, com exatamente o mesmo conteúdo da camada de polígonos de entrada, mas contendo um campo adicional com a contagem de pontos correspondente a cada polígono. Escolher como camada "Polígonos" a camada que contenha os polígonos, escolher como camada dos "Pontos" a camada que contenha os pontos (por exemplo pode ser uma camada que contenha centróides), aceitar que o resultado venha no atributo "NUMPOINTS". Opcionalmente um campo de peso pode ser usado para atribuir pesos a cada ponto, se configurado, a contagem gerada será a soma do campo de peso para cada ponto contido pelo polígono. Opcionalmente também se pode definir um campo de classe exclusivo, se definido os pontos são classificados com base no atributo selecionado, e se vários pontos com o mesmo valor de atributo estiverem dentro do polígono, apenas um deles é contado; a contagem final do ponto em um polígono é, portanto, a contagem das diferentes classes nele encontradas.
Contar quantos elementos existem dentro de um dado polígono
- Garantir que a camada possui um campo, por exemplo "oID" que estabelece que elementos dessa camada pertencem ao mesmo polígono
- Criar um novo atributo "qtd" com por exemplo a expressão
count( $id ,"oID" )
(tendo o cuidado de isto ser feito sem ter nenhum elemento selecionado), desta forma contando quantos elementos diferentes ("$id") possuem o mesmo "oID" (isto é, estão agrupados pelo "oID")
NOTA: pode demorar bastante tempo a calcular depois de se premir OK se a tabela tiver muitos elementos
Cortar um polígono em dois
Selecionar o polígono a cortar, usar a ferramenta "Barra de digitalização avançada / Dividir elementos (5º ícone a contar da direita)", a seguir desenhar uma linha (conjunto de segmentos de reta) que atravesse o polígono da forma que pretendermos, terminar clicando com o botão da direita para cortar de acordo com a linha divisória desenhada (a seguir se for esse o objetivo pode-se apagar a metade do polígono que não nos interessa)
Diferença
Diferença (menu "Vetor / Ferramentas de geoprocessamento / Diferença...", em inglês chama-se "Difference"): dá como resultado as geometrias da camada de entrada que caiem fora ou só se sobrepõem parcialmente com as geometrias da camada de sobreposição. Atenção que se usarmos as camadas na ordem errada o resultado vai ser uma camada vazia, se isso acontecer experimentar trocar a ordem das camadas. Ver também exemplo visual da diferença simétrica versus diferença (assimétrica).
Diferença Simétrica
Diferença simétrica (menu "Vetor / Ferramentas de geoprocessamento / Diferença simétrica...", em inglês chama-se "Symmetrical Difference"): extrai as partes das geometrias das camadas de entrada e de sobreposição que não se sobrepõem, as áreas sobrepostas entre as duas camadas são removidas. A tabela de atributos da camada resultante irá conter os atributos originais das camadas de entrada e de sobreposição, neste caso a ordem das camadas (isto é, qual é a camada de entrada e qual é a camada de sobreposição) é irrelevante.
Na tabela de atributos do resultado uma parte das linhas só tem dados relativos aos atributos que vieram da camada de entrada (os das colunas da camada de sobreposição estão a NULL), as linhas restantes só têm dados relativos aos atributos que vieram da camada de sobreposição (os das colunas da camada de entrada estão a NULL). Ver também exemplo visual da diferença simétrica versus diferença (assimétrica)
NOTA: sempre que queremos saber se duas camadas são iguais em termos da área ocupada basta:
- Calcular a diferença simétrica
- Se der um resultado com zero elementos é porque são iguais
- Se não der devemos a seguir agregar o resultado (o que devolve um único item) e a seguir calcular a área desse item e ver quanto é que ela vale, se for um número muito pequeno provavelmente representa somente erros de arredondamento e as áreas na verdade são iguais.
Eliminar buracos
Eliminar buracos (menu "Processamento / Ferramentas de processamento / Geometria vetorial / Eliminar buracos", em inglês chama-se "Delete holes"): pega numa camada que contenha polígonos e remove os buracos que se encontrem dentro de polígonos. Cria uma nova camada vetorial na qual os polígonos com buracos foram substituídos por polígonos com apenas o anel externo, os atributos não são alterados. Um parâmetro opcional de área mínima permite remover apenas os buracos que são mais pequenos do que essa área, se a área mínima for definida como 0.0 todos os buracos serão removidos.
Envoltória côncava (vizinho k mais próximo)
Envoltória côncava (vizinho k mais próximo) (menu "Processamento / Ferramentas de processamento / Geometria vetorial / Envoltória côncava (vizinho k mais próximo)" (na versão 3.22.6 o nome é "Limite côncavo (k-nearest neighbor)", em inglês chama-se "Concave hull (k-nearest neighbor)"): gera um polígono côncavo a partir de um conjunto de pontos (se a camada de entrada tiver uma geometria do tipo linha ou do tipo polígono usa os respetivos vértices). O número de vizinhos a considerar determina a concavidade do polígono de saída, um número menor resultará em um polígono côncavo que segue os pontos muito de perto, enquanto que um número maior terá uma forma mais suave. O número mínimo de pontos vizinhos a considerar é 3. Opcionalmente pode-se também definir um campo que se quer usar para agrupar, nesse caso para cada valor único desse campo será gerado um polígono côncavo com os pontos das geometrias correspondentes. Normalmente quer-se usar um campo para agrupar, se por exemplo ao calcular os polígonos urbanos nos esquecermos de escolher o campo para agrupar o algoritmo vai demorar um tempo excessivo e irá dar um resultado errado, nesse caso é provavelmente necessário abortar a execução do algoritmo.
Interseção
Interseção (menu "Vetor / Ferramentas de geoprocessamento / Interseção...", em inglês chama-se "Intersection"): interseta 2 camadas de uma forma simétrica, tanto faz intersetar a camada "A" com a camada "B" como fazê-lo na ordem inversa. Este algoritmo extrai as partes sobrepostas das geometrias dos itens nas camadas de entrada e de sobreposição, às geometrias que ficam na camada de interseção de saída são associados os atributos dos recursos sobrepostos das camadas de entrada e de sobreposição. Ver também diferença entre intersectar e recortar
Juntar atributos por localização
Juntar atributos por localização (menu "Vetor / Ferramentas de gestão de dados / Juntar atributos por localização...", em inglês chama-se "Join Attributes by location"): pega uma camada vetorial de entrada e cria uma nova camada vetorial que é uma versão estendida da camada de entrada, com atributos adicionais na sua tabela de atributos. Os atributos adicionais e os seus valores são obtidos de uma segunda camada vetorial, um critério espacial é aplicado para selecionar os valores da segunda camada que são adicionados a cada recurso da primeira camada na camada resultante (ver exemplos visuais de critérios espaciais em Selecionar por localização).
Juntar camadas vetoriais
Juntar camadas vetoriais (menu "Vetor / Ferramentas de gestão de dados / Juntar camadas vetoriais...", em inglês chama-se "Merge vector layers"): combina (agrega) várias camadas vetoriais do mesmo tipo de geometria (por exemplo não se pode juntar camadas com geometria Ponto com camadas com geometria Polígono) numa só camada, se as tabelas de atributos forem diferentes, a tabela de atributos da camada resultante irá conter os atributos de todas as camadas de entrada. Normalmente só se tem de escolher que camadas vetoriais se quer juntar, para isso clica-se nas reticências das "Camadas de entrada" e depois ativa-se as checkboxes correspondentes, quando se terminar de escolher as camadas clica-se na seta a azul no topo que permite voltar para a janela principal.
Múltiplas partes para partes únicas
Múltiplas partes para partes únicas (menu "Vetor / Ferramentas de geometria / Múltiplas partes para partes únicas...", em inglês chama-se "Multipart to Singleparts"): pega numa camada vetorial com geometrias multi-partes e gera uma nova camada vetorial na qual todas as geometrias contêm uma parte única. Os elementos com geometrias multi-parte são divididos em tantos elementos diferentes quantas as partes que a geometria contém, e são utilizados os mesmos atributos para cada um deles. Portanto o número de itens (linhas) na tabela de atributos irá aumentar.
NOTA: o caminho inverso obtém-se recorrendo ao algoritmo "Agregar / Dissolver"
Pontos aleatórios dentro de polígonos
Pontos aleatórios dentro de polígonos (menu "Vetor / Ferramentas de investigação / Pontos aleatórios dentro de polígonos...", em inglês chama-se "Random points inside polygons"): permite gerar um conjunto de pontos aleatórios dentro de polígonos, usado por exemplo para detectar geometrias inválidas (porque os pontos não são gerados dentro das geometrias inválidas). Basta dizer quantos pontos se quer ("Point count or density", por exemplo 10000).
Recortar
Recortar (menu "Vetor / Ferramentas de geoprocessamento / Recortar...", em inglês chama-se "Clip"): recorta uma camada vetorial de entrada usando os recursos da camada poligonal de sobreposição. Apenas as partes dos recursos na Camada de entrada que caem dentro dos polígonos da Camada de sobreposição serão adicionadas à camada resultante. Os atributos dos recursos não são modificados, embora propriedades como área ou comprimento dos recursos sejam modificados pela operação de recorte. Se tais propriedades forem armazenadas como atributos, esses atributos terão que ser atualizados manualmente. Ver também diferença entre intersectar e recortar
Selection toolbar / Selecionar elementos pela expressão (select features using an expression)
Selection toolbar / Selecionar elementos pela expressão (select features using an expression): (é o 2º ícone dessa toolbar) permite selecionar os elementos para os quais uma dada expressão dá resultado verdadeiro:
- Escolha dos campos ou dos valores: no painel do meio expandir "Campos e valores" e selecionar o campo relevante, a seguir no painel da direita usar "Todos os únicos" para perceber que valores esse campo contém, usar duplo click para transferir o nome do campo (colocando-lhe automaticamente as aspas duplas) ou para transferir um valor do campo (colocando-lhe automaticamente as aspas simples) para o painel da esquerda
- Escolha dos operadores: no painel do meio expandir "Operadores", clicar uma vez sobre um deles para ver a respetiva documentação no painel da direita, fazer duplo click para o colocar no painel da esquerda
- Reutilizar uma expressão recentemente utilizada: no painel do meio expandir "Recente (selection)" que contém as últimas 20 expressões utilizadas e fazer duplo click sobre a expressão relevante
- Gravar uma expressão atribuindo-lhe um nome (isto é, criar expressões do utilizador): tendo uma expressão válida no painel da esquerda premir o ícone com a disquete (gravar), aparece uma janela "Store Expression" onde se pode definir o nome da expressão em "Etiqueta" e o texto de ajuda em "Help text". As expressões gravadas podem ser reusadas expandindo "Expressões do Utilizador" no painel do meio.
- Exportar as expressões do utilizador para as levar para outro computador: usar o ícone com uma seta para cima a amarelo no topo do painel da esquerda para fazer a exportação, escolher o nome do ficheiro (cria um ficheiro JSON). Depois, no computador de destino, fazer a operação inversa usando o ícone com uma seta para baixo a azul para realizar a importação desse ficheiro
- Utilizações mais sofisticadas: no painel do meio expandir outros nomes, por exemplo "Agregados", "Camadas do Mapa" (interessa o 2º), "Condicionais", "Geometria", "Matemática" ou "Texto" e ver a respetiva documentação
Selection toolbar / Selecionar por localização
Selection toolbar / Selecionar por localização: (é o 4º ícone dessa toolbar) permite selecionar os elementos de uma dada camada para os quais a sua geometria "intersecta/intersect, toca/touch, contém/contain, sobrepõe/overlap, é separado/disjoint, está contido/are within, igual/equal, cruza/cross" ao comparar com os elementos de uma outra camada (podendo-se opcionalmente aplicar esta operação somente aos elementos que estavam selecionados).
Neste exemplo, o conjunto de dados do qual queremos selecionar (a camada "Selecionar elementos de") consiste nos círculos verdes, o retângulo laranja é o conjunto de dados com o qual está sendo comparado (a camada "Ao comparar com os elementos de"):
- intersecta / intersect: testa se uma geometria se cruza com outra. Retorna verdadeiro se as geometrias se cruzam espacialmente (compartilham qualquer parte do espaço - se sobrepõem ou se tocam) e falso se não. Na imagem os círculos 1, 2 e 3 são selecionados.
- toca / touch: testa se uma geometria toca outra. Retorna verdadeiro se as geometrias têm pelo menos um ponto em comum, mas seus interiores não se cruzam. Apenas o círculo 3 é selecionado.
- contém / contain: retorna verdadeiro se e somente se nenhum ponto de b estiver no exterior de a, e pelo menos um ponto do interior de b estiver no interior de a. Na imagem, nenhum círculo é selecionado, mas o retângulo seria se se trocasse a ordem das camadas, pois contém um círculo completamente. Isso é o oposto de "está contido".
- sobrepõe / overlap: testa se uma geometria se sobrepõe a outra. Retorna verdadeiro se as geometrias compartilham algum espaço, são da mesma dimensão, mas não estão completamente contidas entre si. Apenas o círculo 2 é selecionado.
- é separado / disjoint: retorna verdadeiro se as geometrias não compartilham nenhuma parte do espaço (sem sobreposição, sem tocar). Apenas o círculo 4 é selecionado.
- está contido / are within: testa se uma geometria está dentro de outra. Retorna verdadeiro se a geometria a estiver completamente dentro da geometria b. Apenas o círculo 1 é selecionado.
- igual / equal: retorna verdadeiro se e somente se as geometrias forem exatamente iguais. Nenhum círculo é selecionado.
- cruza / cross: retorna verdadeiro se as geometrias fornecidas têm alguns, mas não todos, pontos internos em comum e se o cruzamento é feito numa dimensão inferior ao da geometria mais alta fornecida. Por exemplo, uma linha cruzando um polígono cruzará como uma linha (selecionada). O cruzamento de duas linhas se cruzará como um ponto (selecionado). Dois polígonos se cruzam como um polígono (não selecionado). Nenhum círculo é selecionado.
A explicação em inglês encontra-se aqui
Selection toolbar / Inverter Seleção dos Elementos
Selection toolbar / Inverter Seleção dos Elementos: (é uma das opções do 2º ícone dessa toolbar que também contém "Selecionar elementos pela expressão") se numa dada camada um conjunto de elementos estavam selecionados inverte essa seleção, ficando selecionados somente os elementos que não estavam selecionados