Filtragem Geométrica
Filtre feições com base em seus relacionamentos espaciais com outras geometrias usando os predicados geométricos e o seletor de camada de referência da aba FILTRAGEM.
Visão Geral
A filtragem geométrica no FilterMate permite selecionar feições com base em seus relacionamentos espaciais com uma camada de referência. Isso é configurado na mesma aba FILTRAGEM onde você configura filtros de atributos.
Componentes principais na Aba FILTRAGEM:
- Predicados Espaciais: Seleção múltipla de relacionamentos geométricos (Intercepta, Contém, Dentro, etc.)
- Camada de Referência: Escolher qual camada comparar
- Operador de Combinação: Usar E/OU quando múltiplos predicados são selecionados
- Integração de Buffer: Combinar com zonas de buffer para análise de proximidade
Seleção múltipla de predicados espaciais na aba FILTRAGEM
Selecionar camada de referência para comparação espacial
Escolher E/OU para combinar múltiplos predicados
Casos de Uso Comuns
- Contenção: Encontrar parcelas dentro de um município
- Interseção: Identificar estradas cruzando uma planície de inundação
- Proximidade: Selecionar edifícios perto de uma estação de transporte (com buffer)
- Adjacência: Encontrar polígonos vizinhos
Toda filtragem geométrica é configurada na aba FILTRAGEM, junto com filtros de atributos. Não confunda com a aba EXPLORAÇÃO, que é para visualizar e selecionar feições da camada atual.
Predicados Espaciais
Intercepta
Feições que compartilham qualquer espaço com a geometria de referência.
Exemplos de Casos de Uso:
- Estradas cruzando um distrito
- Propriedades tocando um rio
- Parcelas dentro ou sobrepondo uma zona
Expressão:
intersects($geometry, geometry(get_feature('zones', 'id', 1)))
Contém
Geometria de referência contém completamente a feição (feição está inteiramente dentro).
Exemplos de Casos de Uso:
- Edifícios inteiramente dentro de uma parcela
- Parques completamente dentro dos limites da cidade
- Pontos dentro de polígonos
Expressão:
contains(
geometry(get_feature('parcels', 'id', @selected_parcel_id)),
$geometry
)
Dentro
Feição está completamente dentro da geometria de referência (inverso de Contém).
Exemplos de Casos de Uso:
- Encontrar em qual distrito um ponto está
- Propriedades inteiramente dentro de uma zona
- Feições contidas por um limite
Expressão:
within($geometry, geometry(get_feature('districts', 'name', 'Centro')))
Sobrepõe
Feições que se sobrepõem parcialmente (alguma área compartilhada, mas nenhuma contém a outra).
Exemplos de Casos de Uso:
- Zonas de uso do solo sobrepostas
- Reivindicações de propriedade conflitantes
- Limites administrativos cruzados
Expressão:
overlaps($geometry, geometry(get_feature('zones', 'type', 'comercial')))
Toca
Feições que compartilham um limite mas não se sobrepõem.
Exemplos de Casos de Uso:
- Parcelas adjacentes
- Unidades administrativas vizinhas
- Segmentos de estrada conectados
Expressão:
touches($geometry, geometry(get_feature('parcels', 'id', @parcel_id)))
Disjunto
Feições que não compartilham nenhum espaço (completamente separadas).
Exemplos de Casos de Uso:
- Feições fora de uma área restrita
- Regiões não adjacentes
- Feições isoladas
Expressão:
disjoint($geometry, geometry(get_feature('restricted', 'id', 1)))
Cruza
Uma linha cruza através de um polígono ou outra linha.
Exemplos de Casos de Uso:
- Estradas cruzando limites de distrito
- Tubulações passando através de zonas
- Trilhas cruzando rios
Expressão:
crosses($geometry, geometry(get_feature('districts', 'name', 'Industrial')))
Funções Geométricas
Cálculos de Distância
-- Feições dentro de 500 metros
distance($geometry, geometry(get_feature('stations', 'id', 1))) < 500
-- Encontrar feições mais próximas
distance($geometry, @reference_geom) < @max_distance
Área e Comprimento
-- Polígonos grandes (área em unidades do mapa)
area($geometry) > 10000
-- Estradas longas (comprimento em unidades do mapa)
length($geometry) > 1000
-- Perímetro
perimeter($geometry) > 500
Operações de Centroide
-- Feições cujo centroide está em um polígono
within(
centroid($geometry),
geometry(get_feature('zones', 'type', 'residencial'))
)
-- Distância do centroide
distance(
centroid($geometry),
make_point(lon, lat)
) < 1000
Combinando Filtros
Espacial + Atributo
-- Edifícios residenciais perto de transporte
zone_type = 'residencial'
AND distance($geometry, geometry(get_feature('transit', 'id', 1))) < 500
Múltiplas Condições Espaciais
-- Dentro do distrito mas não em zona restrita
within($geometry, geometry(get_feature('districts', 'id', 5)))
AND disjoint($geometry, geometry(get_feature('restricted', 'id', 1)))
Cenários Complexos
-- Propriedades perto do rio mas fora da planície de inundação
distance($geometry, geometry(get_feature('rivers', 'name', 'Rio Principal'))) < 200
AND NOT within($geometry, geometry(get_feature('floodplain', 'risk', 'alto')))
AND property_type = 'residencial'
Exemplo de Fluxo de Trabalho: Filtragem Geométrica
Fluxo de trabalho completo para encontrar edifícios perto de estradas com buffer:
Passo a Passo: Filtro Geométrico Completo
Cenário: Encontrar edifícios a menos de 200m de estradas
1. Abrir aba FILTRAGEM, interface pronta
2. Selecionar camada "edifícios" no seletor de camadas
3. Verificar info da camada: Spatialite, 15.234 feições, EPSG:4326
4. Selecionar "Intercepta" no seletor múltiplo de predicados espaciais
5. Selecionar "estradas" como camada de referência (camada distante)
6. Definir buffer: Distância=200, Unidade=metros
7. Escolher tipo de buffer: Standard
8. Ver indicadores ativos: geo_predicates, buffer_value, buffer_type
9. Clicar no botão FILTRAR (ícone filter.png)
10. Barra de progresso mostra processamento backend (PostgreSQL⚡ ou Spatialite)
11. Mapa exibe feições filtradas: 3.847 edifícios a menos de 200m de estradas
Combinando Múltiplos Predicados
Quando você seleciona múltiplos predicados espaciais, use o Operador de Combinação para especificar como eles devem ser combinados:
Selecionar E ou OU para combinar predicados
Exemplo - Parcelas que Interceptam OU Tocam uma Zona Protegida:
1. Selecionar ambos predicados "Intercepta" E "Toca"
2. Escolher "OU" no menu suspenso do operador de combinação
3. Indicador "Tem Operador de Combinação" ativa (add_multi.png)
4. Selecionar "zonas_protegidas" como camada de referência
5. Aplicar filtro: 1.834 parcelas encontradas
6. Parcelas destacadas no mapa (interceptando OU tocando zona)
Lógica do Operador de Combinação:
- E: Feição deve satisfazer TODOS os predicados selecionados
- OU: Feição deve satisfazer PELO MENOS UM predicado
-- Exemplo E: Deve interceptar E tocar
ST_Intersects(geom, ref) AND ST_Touches(geom, ref)
-- Exemplo OU: Pode interceptar OU tocar
ST_Intersects(geom, ref) OR ST_Touches(geom, ref)
Comportamento Específico do Backend
PostgreSQL (Mais Rápido)
-- Usa índice espacial GIST
ST_Intersects(geometry, reference_geometry)
- ✅ Suporte completo a índice espacial
- ✅ Otimizado para grandes conjuntos de dados
- ✅ Aceleração por hardware
Spatialite (Rápido)
-- Usa índice espacial R-tree
ST_Intersects(geometry, reference_geometry)
- ✅ Índice espacial R-tree
- ✅ Bom desempenho para conjuntos de dados médios
- ⚠️ Mais lento que PostgreSQL para consultas complexas
OGR (Fallback)
-- Sem índice espacial
-- Escaneia todas as feições
- ❌ Sem índice espacial
- ⚠️ Desempenho degrada com tamanho
- ✓ Compatibilidade universal
Para grandes conjuntos de dados com consultas espaciais frequentes, use PostgreSQL com índices GIST para melhor desempenho.
Exemplos Práticos
Planejamento Urbano
Encontrar Parcelas Perto de Transporte
-- Dentro de 400m de distância a pé
distance(
centroid($geometry),
geometry(get_feature('metro_stations', 'line', 'Vermelha'))
) < 400
AND land_use = 'não desenvolvido'
Identificar Oportunidades de Desenvolvimento
-- Parcelas grandes, não em áreas protegidas
area($geometry) > 5000
AND disjoint($geometry, geometry(get_feature('protected_areas', 'status', 'ativo')))
AND zone = 'uso misto'
Análise Ambiental
Impacto de Áreas Protegidas
-- Projetos interceptando zonas protegidas
intersects(
$geometry,
geometry(get_feature('protected', 'category', 'vida selvagem'))
)
AND project_status = 'proposto'
Análise de Bacia Hidrográfica
-- Propriedades dentro da bacia hidrográfica
within(
$geometry,
geometry(get_feature('watersheds', 'name', 'Bacia Principal'))
)
AND distance($geometry, geometry(get_feature('rivers', 'id', 1))) < 100
Serviços de Emergência
Análise de Cobertura
-- Áreas NÃO cobertas por estações de bombeiros (>5km)
distance(
centroid($geometry),
aggregate('fire_stations', 'collect', $geometry)
) > 5000
Rotas de Evacuação
-- Estradas dentro da zona de evacuação
intersects(
$geometry,
buffer(geometry(get_feature('hazard', 'type', 'inundação')), 1000)
)
AND road_type IN ('rodovia', 'principal')
Otimização de Desempenho
1. Usar Índices Espaciais
Garanta que índices espaciais existam:
PostgreSQL:
CREATE INDEX idx_geom ON table_name USING GIST (geometry);
Spatialite:
SELECT CreateSpatialIndex('table_name', 'geometry');
2. Simplificar Geometrias de Referência
-- Simplificar antes de filtrar (mais rápido)
intersects(
$geometry,
simplify(geometry(get_feature('complex_polygon', 'id', 1)), 10)
)
3. Filtrar Atributos Primeiro
-- ✅ Rápido: Filtrar por atributo primeiro
status = 'ativo'
AND intersects($geometry, @reference_geom)
-- ❌ Mais lento: Filtro espacial primeiro
intersects($geometry, @reference_geom)
AND status = 'ativo'
4. Usar Verificações de Caixa Delimitadora
-- Verificação rápida de caixa delimitadora antes de operação espacial cara
bbox($geometry, @reference_geom)
AND intersects($geometry, @reference_geom)
Solução de Problemas
Geometrias Inválidas
-- Verificar validade da geometria
is_valid($geometry)
-- Reparar geometrias inválidas (se necessário)
make_valid($geometry)
Reprojeção SRC
FilterMate lida automaticamente com transformações de sistema de referência de coordenadas (SRC) ao filtrar camadas com projeções diferentes.
Comportamento Automático:
- Camadas alvo e de referência podem usar SRC diferentes
- FilterMate reprojeta em tempo real para operações espaciais
- Você verá o indicador 🔄 nos logs quando reprojeção ocorrer
Melhores Práticas:
- Usar SRC projetado para cálculos de distância precisos (ex: EPSG:3857, zonas UTM locais)
- Evitar SRC geográfico (EPSG:4326) para operações de buffer - usar metros em vez de graus
- Verificar resultados após reprojeção com inspeção visual
Exemplo:
Camada A: EPSG:4326 (WGS84) - Coordenadas globais
Camada B: EPSG:31983 (SIRGAS 2000 UTM 23S) - Projeção Brasil
FilterMate: Reprojeta automaticamente para comparação ✓
Transformações SRC frequentes podem desacelerar operações em grandes conjuntos de dados. Para melhor desempenho, garanta que suas camadas compartilhem o mesmo SRC antes de filtrar.
Resultados Vazios
- Verificar compatibilidade SRC - Garantir que camadas usem projeções compatíveis (veja Reprojeção SRC)
- Verificar geometria de referência - Confirmar que feição de referência existe
- Testar predicados mais simples - Tentar
intersectsantes decontains - Inspecionar geometrias - Verificar geometrias NULL ou inválidas
Problemas de Desempenho
- Verificar índices espaciais - Verificar se índices existem e estão atualizados
- Simplificar geometrias - Reduzir contagem de vértices se possível
- Usar backend apropriado - PostgreSQL para grandes conjuntos de dados
- Quebrar consultas complexas - Dividir em múltiplos filtros mais simples
Tópicos Relacionados
- Operações de Buffer - Configurar zonas de buffer na aba FILTRAGEM para análise de proximidade
- Noções Básicas de Filtragem - Combinar filtros geométricos com filtros de atributos
- Visão Geral da Interface - Guia completo de componentes da aba FILTRAGEM
- Exportar Feições - Exportar resultados filtrados da aba EXPORTAÇÃO
A aba FILTRAGEM combina três tipos de filtros:
- Filtros de atributos - Construtor de expressões (veja Noções Básicas de Filtragem)
- Filtros geométricos - Predicados espaciais + camada de referência (esta página)
- Operações de buffer - Zonas de distância (veja Operações de Buffer)
Os três podem ser usados juntos em uma única operação de filtragem.
Próximos Passos
- Operações de Buffer - Adicionar zonas de proximidade baseadas em distância a filtros geométricos
- Exportar Feições - Salvar resultados filtrados em vários formatos
Fluxo de Trabalho Completo: Veja Guia do Primeiro Filtro para um exemplo completo combinando filtros de atributos, geométricos e buffers.