Version 2.2.5 | December 2025
FilterMate is a production-ready QGIS plugin that provides advanced filtering and export capabilities for vector data - works with ANY data source!
- ✅ Automatic Geographic CRS Handling - Auto-converts EPSG:4326 to EPSG:3857 for metric operations
- ✅ Accurate Buffer Distances - 50m buffer is always 50 meters regardless of latitude
- ✅ Geographic Zoom Fix - Resolved flickering issues with
flashFeatureIds - ✅ Zero Configuration - Works automatically for all geographic layers
- ✅ Minimal Performance Impact - Only ~1ms per feature transformation
- ✅ Bug Fix - Fixed critical Spatialite expression field name quote handling
- ✅ Enhanced Stability - Improved error handling for case-sensitive fields
- ✅ Better Testing - Comprehensive test suite for expression conversion
- ✅ Increased Reliability - Robust Spatialite backend operations
- ✅ Color Harmonization - Enhanced visual distinction with +300% frame contrast
- ✅ WCAG Accessibility - AA/AAA compliant text contrast (17.4:1 ratio)
- ✅ Reduced Eye Strain - Optimized color palette for long work sessions
- ✅ Enhanced Stability - Improved Qt JSON view crash prevention
- ✅ Better Error Recovery - Robust tab widget and theme handling
- ✅ Complete Multi-Backend - PostgreSQL, Spatialite, and OGR implementations
- ✅ Dynamic UI - Adaptive interface that adjusts to screen resolution
- ✅ Robust Error Handling - Automatic geometry repair and retry mechanisms
- ✅ Theme Synchronization - Matches QGIS interface theme automatically
- ✅ Performance Optimized - 2.5× faster with intelligent query ordering
- 🔍 Intuitive search for entities in any layer
- 📐 Geometric filtering with spatial predicates and buffer support
- 🎨 Layer-specific widgets - Configure and save settings per layer
- 📤 Smart export with customizable options
- 🌍 Automatic CRS reprojection on the fly
- 📝 Filter history - Easy undo/redo for all operations
- 🚀 Performance warnings - Intelligent recommendations for large datasets
- 🎨 Adaptive UI - Dynamic dimensions based on screen resolution
- 🌓 Theme support - Automatic synchronization with QGIS theme
📚 **Documentation** : https://sducournau.github.io/filter_mate
Github repository : https://github.com/sducournau/filter_mate
Qgis plugin repository : https://plugins.qgis.org/plugins/filter_mate
https://www.youtube.com/watch?v=2gOEPrdl2Bo
FilterMate v1.9+ uses a factory pattern for backend selection, automatically choosing the optimal backend for your data source.
modules/backends/
├── base_backend.py # Abstract interface
├── postgresql_backend.py # PostgreSQL/PostGIS backend
├── spatialite_backend.py # Spatialite backend
├── ogr_backend.py # Universal OGR backend
└── factory.py # Automatic backend selection
Automatic Selection Logic:
- Detects layer provider type (
postgres,spatialite,ogr) - Checks PostgreSQL availability (psycopg2 installed?)
- Selects optimal backend with performance warnings when needed
FilterMate automatically selects the best backend for your data source to provide optimal performance.
When used:
- Layer source is PostgreSQL/PostGIS
psycopg2Python package is installed- Best for datasets >50,000 features
Features:
- ✅ Materialized views for ultra-fast filtering
- ✅ Server-side spatial operations
- ✅ Native spatial indexes (GIST)
- ✅ Sub-second response on million+ feature datasets
Installation:
# Method 1: pip (recommended)
pip install psycopg2-binary
# Method 2: QGIS Python console
import pip
pip.main(['install', 'psycopg2-binary'])
# Method 3: OSGeo4W Shell (Windows)
py3_env
pip install psycopg2-binaryWhen used:
- Layer source is Spatialite
- Automatically available (SQLite built-in to Python)
- Good for datasets <50,000 features
Features:
- ✅ Temporary tables for filtering
- ✅ R-tree spatial indexes
- ✅ Local database operations
- ✅ No additional installation required
Note: FilterMate will display an info message when filtering large Spatialite datasets, suggesting PostgreSQL for better performance.
When used:
- Layer source is Shapefile, GeoPackage, or other OGR formats
- Fallback when PostgreSQL is not available
- Works with all data sources
Features:
- ✅ QGIS processing framework
- ✅ Memory-based operations
- ✅ Full compatibility with all formats
⚠️ Slower on large datasets
| Backend | 10k Features | 100k Features | 1M Features | Concurrent Ops |
|---|---|---|---|---|
| PostgreSQL | <1s | <2s | ~10s | Excellent |
| Spatialite | <2s | ~10s | ~60s | Good |
| OGR | ~5s | ~30s | >120s | Limited |
Times are approximate and depend on geometry complexity and system resources
FilterMate includes several automatic optimizations:
- Temporary tables with R-tree indexes: 44.6× faster filtering
- Predicate ordering: 2.3× faster with optimal predicate evaluation
- Automatic spatial index detection: Uses existing indexes when available
- Automatic spatial index creation: 19.5× faster on large datasets
- Large dataset optimization: 3× improvement for >50k features
- Memory-efficient processing: Reduces memory footprint
- Geometry caching: 5× faster for multi-layer operations
- Retry mechanisms: Handles SQLite locks automatically
- Geometry repair: Multi-strategy approach for invalid geometries
from modules.appUtils import POSTGRESQL_AVAILABLE, logger
print(f"PostgreSQL available: {POSTGRESQL_AVAILABLE}")
logger.info("Backend check completed")FilterMate will display info messages indicating which backend is being used:
- "Using Spatialite backend" → Spatialite mode
- No message → PostgreSQL or OGR (check layer type)
FilterMate automatically selects the backend based on:
-
Layer Provider Type: Detected via
layer.providerType()postgres→ PostgreSQL backend (if psycopg2 available)spatialite→ Spatialite backendogr→ OGR backend
-
psycopg2 Availability:
- Available → PostgreSQL enabled for PostGIS layers
- Not available → Spatialite/OGR fallback
-
Feature Count Warnings:
-
50,000 features on Spatialite → Info message suggests PostgreSQL
-
Check if psycopg2 is installed:
try:
import psycopg2
print("✅ psycopg2 installed")
except ImportError:
print("❌ psycopg2 not installed - install it for PostgreSQL support")Common issues:
- Layer is not from PostgreSQL source → Use PostGIS layers
- psycopg2 not in QGIS Python environment → Reinstall in correct environment
- Connection credentials not saved → Check layer data source settings
For large datasets:
- Use PostgreSQL backend (install psycopg2)
- Ensure spatial indexes exist on your tables
- Use server-side filtering when possible
Check spatial indexes:
-- PostgreSQL
SELECT * FROM pg_indexes WHERE tablename = 'your_table';
-- Spatialite
SELECT * FROM sqlite_master WHERE type = 'index' AND name LIKE '%idx%';Recommendations by dataset size:
- <10k features: Any backend works fine
- 10k-50k features: Spatialite or PostgreSQL recommended
- 50k-500k features: PostgreSQL strongly recommended
-
500k features: PostgreSQL required for good performance
- Open QGIS
- Go to
Plugins→Manage and Install Plugins - Search for "FilterMate"
- Click
Install Plugin
- Download latest release from GitHub
- Extract ZIP to QGIS plugins directory:
- Windows:
C:\Users\<username>\AppData\Roaming\QGIS\QGIS3\profiles\default\python\plugins\ - Linux:
~/.local/share/QGIS/QGIS3/profiles/default/python/plugins/ - macOS:
~/Library/Application Support/QGIS/QGIS3/profiles/default/python/plugins/
- Windows:
- Restart QGIS
- Enable plugin in
Plugins→Manage and Install Plugins
# Method 1: pip (recommended)
pip install psycopg2-binary
# Method 2: QGIS Python console
import pip
pip.main(['install', 'psycopg2-binary'])
# Method 3: OSGeo4W Shell (Windows)
py3_env
pip install psycopg2-binary- QGIS: Version 3.0 or higher
- Python: 3.7+ (included with QGIS)
- Optional: PostgreSQL/PostGIS server for optimal performance
- Optional: psycopg2 Python package for PostgreSQL support
- GitHub: https://github.com/sducournau/filter_mate
- Website: https://sducournau.github.io/filter_mate
- Issues: Report bugs
- Documentation Index: docs/INDEX.md - Complete documentation guide
For Users:
- Installation and setup guides (this README)
- Feature overview and usage examples
For Developers:
- Developer Onboarding - Start here!
- Architecture - System design and components
- Backend API - Backend interface reference
- Implementation Status - Current features and performance
For Contributors:
- GitHub Copilot Guidelines - Coding standards
- UI Testing Guide - Testing procedures
- Theme System - Theme development
Archived Documentation:
- Archived Docs - Historical fixes, improvements, and planning
Contributions welcome! See DEVELOPER_ONBOARDING.md for development setup.
Quick Start for Developers:
- Read docs/INDEX.md for documentation overview
- Follow docs/DEVELOPER_ONBOARDING.md for setup
- Review .github/copilot-instructions.md for coding standards
- Check docs/architecture.md to understand the system
FilterMate is released under the GNU General Public License v3.0. See LICENSE file for details.
See CHANGELOG.md for complete version history.
Current Version: 2.1.0 (December 2025)
- Production-ready release
- Complete multi-backend architecture
- Dynamic UI system with adaptive dimensions
- Enhanced theme support and synchronization
- Comprehensive testing and documentation
Previous Versions:
- 2.0.0: Production release with multi-backend
- 1.9.x: Beta releases with Spatialite support
- 1.0.x: Initial PostgreSQL-only releases
Developed by: imagodata
Contact: simon.ducournau+filter_mate@gmail.com
Repository: https://github.com/sducournau/filter_mate
Plugin Page: https://plugins.qgis.org/plugins/filter_mate