[general]
name=Hotspot Analysis v4
qgisMinimumVersion=3.22
qgisMaximumVersion=4.99
description=LISA statistics for geographical cluster detection (Getis-Ord Gi*, Local Moran's I, Bivariate Local Moran's I) — Processing framework, QGIS 3.22+ and 4.x.
version=4.0.0
author=Abimael Cereda Junior
email=ceredajunior@geografiadascoisas.com.br

about=Computes Local Indicators of Spatial Association (LISA) via the QGIS Processing framework. Three algorithms are available: Getis-Ord Gi* (Getis & Ord 1992; Ord & Getis 1995), Univariate Local Moran's I (Anselin 1995), and Bivariate Local Moran's I (Anselin et al. 2002). Built on libpysal/esda. Aligned with GeoDa conventions: Gi* uses star=True, p-values are one-tailed. User-selectable parameters: spatial weights type, binary vs continuous weights, distance metric (Euclidean/Manhattan), row standardization, and permutation count.

    Dependencies: libpysal and esda (Python packages). QGIS 3.30+ installs them automatically via the Plugin Manager. For older QGIS versions or manual installation on Windows, open the OSGeo4W Shell and run: pip install libpysal esda. See the README for full instructions.

tracker=https://github.com/geografiadascoisas/HotSpotAnalysis_Plugin/issues
repository=https://github.com/geografiadascoisas/HotSpotAnalysis_Plugin
homepage=https://github.com/geografiadascoisas/HotSpotAnalysis_Plugin

changelog=
    4.0.0
        - Complete migration to QGIS Processing framework (QgsProcessingAlgorithm)
        - Three independent algorithms in the Processing Toolbox, Graphical Modeler, and batch mode
        - Compatible with QGIS 3.22+ and 4.x via qgis.PyQt — no custom dialog required
        - Provider structure: Hotspot Analysis v4 > LISA (extensible for future methods)
        - Fixed: G_Local now uses star=True — correct Gi* definition; previous versions
          computed Gi (star=False), a different statistic
        - Fixed: p-values use 1-Phi(|Z|) — one-tailed with absolute Z-score, aligned with
          GeoDa and Ord & Getis (1995); previous versions used signed Z causing cold spots
          to be invisible in output styles
        - Fixed: removed Z-score sign flip for datasets with negative mean — methodological
          bug present since v1 with no reference implementation support
        - Fixed: output field names changed from hyphens (Z-score, p-value, q-value) to
          underscores (Z_score, p_value, q_value) — hyphens broke QML filter expressions
          silently, causing Moran styles to never work in any prior release
        - New parameter: binary vs continuous spatial weights (binary=True/False)
        - New parameter: distance metric — Euclidean (p=2) or Manhattan (p=1)
        - New parameter: Two-tailed p-value checkbox for v1/v3.x backward compatibility
        - Automatic threshold detection using maximum nearest-neighbour distance (KDTree)
        - Automatic threshold range derivation when optimization fields are left empty
        - StylePostProcessor pattern for correct QML application after layer load
        - QML styles: classification by p_value (primary) + sign(Z_score) (direction),
          aligned with GeoDa and Anselin (1995); thresholds 0.005 / 0.025 / 0.050
        - QML styles: RdYlBu ColorBrewer palette for Gi*; GeoDa LISA convention for Moran
        - Full scientific documentation in README.md including methodology audit comparing
          v1, GeoDa, ArcGIS, and original literature with full references
        - Removed legacy build tools: Makefile, pb_tool.cfg, plugin_upload.py,
          i18n/, help/, scripts/

    3.0.2
        - Special thanks to Prof. Edson Augusto Melanda (UFSCar-Brazil) for testing
          and suggestions
        - Added full dependency guard for libpysal/esda with blocking behavior
          (plugin no longer loads the dialog when required libraries are missing)
        - Detailed cross-platform installation guidance for missing dependencies
          (Windows OSGeo4W Shell, macOS QGIS Python, Linux QGIS Python)
        - Added validation of project layers before opening the dialog: plugin blocks
          execution when no shapefile (.shp) vector layers are present in the project
        - Introduced user-facing message explaining the shapefile requirement
        - Hardened run() workflow to prevent silent failures and guarantee proper
          preconditions before statistical computation
        - Minor GUI and UX refinements aligned with QGIS interaction patterns
        - Codebase cleanup and normalization of early-return logic

    3.0.1
        - Modernization to libpysal/esda (replacement of deprecated PySAL imports)
        - Rewritten Z-score and p-value computation for Getis-Ord Gi* and Local Moran
        - Correct handling of two-tailed p-values and removal of sign artifacts
        - q-value applied only for Local Moran analyses (never for Gi*)
        - New KDTree-based distance threshold computation with O(n2) fallback
        - Stabilized construction of KNN and Queen weights and standardization modes
        - Improved write_file(): safer attribute output, NaN checks, encoding fixes
        - Added stdout/stderr guards to avoid QGIS crashes on Windows systems
        - GUI fixes and attribute filtering to show only numeric fields when required
        - General code cleanup and removal of obsolete legacy paths

    2.0.0
        - Port to PySAL 2
        - Data import fix for QGIS 3.16

    1.0.4
        - Port to PySAL 2

    1.0.3
        - Code cleaning

    1.0.2
        - Enhancements to Gi* computation with negative values
        - Icon fixed

    1.0.1
        - QGIS 3 plugin version
        - Minor bugs fixed

    0.3
        - Enabled K-nearest neighbors spatial weights matrix
        - Minor bugs fixed

    0.2
        - Enabled Anselin Local Moran's I and Bivariate Local Moran computation

license=GPL-3.0
pip_dependencies=libpysal,esda

tags=hotspot, spatial analysis, LISA, cluster detection, Moran, Getis-Ord, libpysal, esda, GeoDa, processing
category=Vector
icon=hotspot.png

experimental=False
deprecated=False
