[general]
name=GeoInterpolation Analyst
qgisMinimumVersion=3.28
qgisMaximumVersion=4.99
description=Exploratory spatial data analysis, geostatistics, and advanced spatial interpolation (IDW, RBF, Ordinary Kriging) with LOOCV cross-validation optimization, plus GeoKriging Analyst (Beta), a full 11-step guided geostatistics workflow with 6 variogram models (all from gstat's real catalog), outlier detection, 3 interpolation-area modes (points/mask/custom), resolution/area reporting and contour-line generation (major/minor levels, Surfer-style), now also available as a standalone Post-Processing tool for the raster output of any interpolation method. / Análisis exploratorio de datos, geoestadística e interpolación espacial con LOOCV, más GeoKriging Analyst (Beta), un flujo guiado completo de 11 pasos con 6 modelos de variograma (todos del catálogo real de gstat), detección de outliers, 3 modos de área de interpolación (puntos/máscara/personalizada), reporte de resolución y área, y generación de curvas de nivel (maestras/intermedias, estilo Surfer), ahora también disponible como herramienta independiente de Post-Procesamiento para el raster resultante de cualquier método de interpolación.
version=1.8.3
author=GEOMATICA
email=nino@geomatica.pe
about=QGIS plugin for exploratory data analysis, Voronoi (Thiessen) polygons, and advanced spatial interpolation methods (IDW, RBF, Ordinary Kriging) with automated Leave-One-Out Cross-Validation (LOOCV) hyperparameter optimization. Includes GeoKriging Analyst (Beta), a new and separate guided tool (Preparar-Explorar-Estructura espacial-Smart Model-Validar-Seleccionar-Interpolar-Calidad-Resultados-Informe-Curvas de Nivel) for transparent, defensible variogram modeling, model selection, final interpolation, contour-line generation and reporting (HTML/PDF/Excel), with 6 variogram models, all from gstat's real catalog. In Post-Processing there is now also a standalone 'Curvas de Nivel (raster)' tool that generates the same contour lines and styling from the raster produced by IDW, RBF, Ordinary Kriging, GeoKriging Analyst, or any other raster loaded in the project. / Plugin para análisis estadístico de datos espaciales, polígonos de Voronoi e interpolación espacial avanzada (IDW, RBF, Kriging Ordinario) con optimización mediante validación cruzada (LOOCV). Incluye GeoKriging Analyst (Beta), una herramienta nueva y separada con flujo guiado completo (Preparar-Explorar-Estructura espacial-Smart Model-Validar-Seleccionar-Interpolar-Calidad-Resultados-Informe-Curvas de Nivel) para un modelamiento de variograma, selección de modelo, interpolación final, generación de curvas de nivel y generación de informes (HTML/PDF/Excel) transparente y defendible, con 6 modelos de variograma, todos del catálogo real de gstat. En Post-Procesamiento ahora también hay una herramienta independiente 'Curvas de Nivel (raster)' que genera las mismas curvas y simbología a partir del raster de IDW, RBF, Kriging Ordinario, GeoKriging Analyst, o cualquier otro raster cargado en el proyecto.
tracker=https://github.com/Ninobravo55/Geointerpolation_analyst/issues
repository=https://github.com/Ninobravo55/Geointerpolation_analyst
category=Analysis
changelog=1.8.3: Se corrige un bug real reportado por un usuario que podía dejar QGIS entero sin soporte de Python ("No se pudo cargar PyQGIS"), no solo este plugin. __init__.py detecta y borra copias de numpy/scipy duplicadas en la carpeta de perfil de QGIS (shadowean a las que QGIS ya trae incluidas y rompen su import con errores de import circular). El problema: 'numpy' casi siempre YA está cargado en el proceso quando esta limpieza corre, porque qgis.core lo importa al arrancar QGIS, antes que el classFactory de cualquier plugin -- en Windows un archivo/DLL en uso no se puede borrar, así que ese borrado fallaba silenciosamente (solo quedaba en el panel de mensajes de QGIS) y el aviso que SÍ veía el usuario decía igual "se limpiaron paquetes conflictivos, reiniciá QGIS", dando a entender que la corrección había quedado completa. El usuario reinició confiando en ese mensaje y en el reinicio siguiente QGIS ya no pudo cargar PyQGIS en absoluto, porque la copia de numpy (la que de verdad importa) seguía intacta y además estaba incompleta/incompatible. Ahora __init__.py distingue lo que sí se pudo limpiar de lo que quedó sin poder limpiarse (comprobando antes de intentar el borrado si el paquete ya está en sys.modules, en vez de intentar un borrado condenado a fallar) y, si algo queda sin limpiar, el plugin nunca dice "reiniciá y listo": muestra automáticamente (apenas carga, sin que el usuario tenga que buscar el menú) instrucciones de borrado manual con la ruta absoluta exacta, con prioridad sobre cualquier otro aviso. Verificado reproduciendo el escenario exacto del usuario (numpy ya importado, scipy no) con un perfil de QGIS simulado. / 1.8.2: Cuando faltan dependencias, el plugin ya no se queda solo con un aviso pasivo en la barra de mensajes de QGIS que el usuario tiene que notar y luego ir a buscar manualmente el menú 'Instalar Dependencias' (varios usuarios lo interpretaban como "el plugin está roto" en vez de "hay un paso de instalación pendiente"). Ahora, apenas termina de cargar el stub liviano (plugin_stub.py), se ofrece automáticamente instalar lo que falta con un QMessageBox de Sí/No -- no una instalación silenciosa, porque pip descarga paquetes de internet y modifica el entorno Python del usuario, así que se pide confirmación en vez de arrancar sin avisar -- y si acepta se abre directo el instalador (install_deps_dialog.py, ya existía desde antes) con el progreso en pantalla. Si dice que no, el aviso en la barra de mensajes y las opciones del menú siguen disponibles para reintentarlo cuando quiera. Mismo tratamiento para el otro caso que usa este stub (limpieza de numpy/scipy duplicados que pide reinicio de QGIS): el aviso de reinicio ahora también aparece automáticamente en vez de esperar a que el usuario lo abra desde el menú. Ninguno de estos cambios afecta el caso normal (dependencias ya instaladas): ahí __init__.py carga directo el plugin completo, sin pasar por este stub. / 1.8.1: Se corrige una regresión real introducida por la v1.8.0 que rompía el plugin en QGIS 3.28-3.37 (el rango explícitamente soportado, ver qgisMinimumVersion=3.28 en esta version): la v1.8.0 reemplazo 'QgsField(nombre, QVariant.Double)' por 'QgsField(nombre, QMetaType.Type.Double)' en 3 archivos (geointerpolation_analyst.py, idw_loocv_algorithm.py, rbf_loocv_algorithm.py) para arreglar QGIS 4.x, pero el overload de QgsField que acepta QMetaType.Type recien se agrego en QGIS 3.38 -- en 3.28 a 3.37 esa llamada lanza en tiempo de ejecucion 'TypeError: QgsField(): arguments did not match any overloaded call, argument 2 has unexpected type Type' (mismo error ya reportado en otro plugin de QGIS sobre 3.34.4, ver github.com/coolzhao/Geo-SAM/issues/60), rompiendo 'Análisis Estadístico > capa espacial' y las capas de residuos de IDW/RBF con LOOCV en cualquier instalacion de QGIS anterior a 3.38. Se corrige con un modulo nuevo (field_type_compat.py) que elige en tiempo de ejecucion QVariant.Type si esta disponible (QGIS 3.0 hasta el ultimo release con PyQt5 -- sigue funcionando ahi, solo deprecado desde 3.38, no removido) y QMetaType.Type unicamente si QVariant ya no existe (PyQt6 / QGIS 4.x), en vez de asumir un solo enum para todo el rango soportado; verificado con una simulacion de ambos escenarios (modulos qgis.PyQt.QtCore falsos con y sin QVariant) ya que este entorno no tiene una instalacion real de QGIS. Se corrigen ademas dos bugs menores encontrados en la misma revision: (1) el mensaje final de 'Interpolación IDW con LOOCV' escribia literalmente el texto '{html_path}' en vez de la ruta real, por un f-string con llaves dobles de mas (idw_loocv_algorithm.py); (2) en 'Transformación Inversa Box-Cox', los píxeles fuera del dominio de la formula (λ·Y+1 ≤ 0) se filtraban comparando el valor ya transformado contra el centinela de NoData en vez de usar la mascara de dominio ya calculada -- funcionaba en la practica pero podia perder en silencio un pixel valido si su resultado coincidia por casualidad con el valor de NoData del raster de entrada; ahora usa la mascara directamente. / 1.8.0: Compatibilidad con QGIS 4.x (Qt6), pedido explicito: se agrega qgisMaximumVersion=4.99 en metadata.txt para que el plugin aparezca listado tanto en QGIS 3.x como en QGIS 4.x (no se sube qgisMinimumVersion -- seguir soportando 3.x no cuesta nada porque los cambios de codigo son compatibles con ambas ramas). Se corrigen 3 rupturas reales de Qt6 que iban mas alla de los enums de la v1.7.0: (1) QVariant fue eliminado de la API publica de PyQt6 -- el import 'from qgis.PyQt.QtCore import QVariant' rompia la carga completa de geointerpolation_analyst.py, idw_loocv_algorithm.py, rbf_loocv_algorithm.py y kriging_algorithm.py bajo QGIS 4.x (no solo una funcion, el modulo entero fallaba al importarse); se reemplaza por QMetaType.Type (Double/Int/QString), que ademas es la forma no-deprecada del constructor de QgsField desde la v3.38 de QGIS. (2) QAction se movio de QtWidgets a QtGui en Qt6; se agrega un import con fallback (intenta QtGui, si falla usa QtWidgets) en geointerpolation_analyst.py y plugin_stub.py para funcionar sin cambios en ambas ramas. (3) Advertencia de alcance: igual que el resto de este proyecto, no hay una instalacion real de QGIS 4.x/PyQt6 en este entorno para confirmar que el plugin carga de punta a punta -- estos 3 cambios se verificaron contra la documentacion oficial de PyQt6/QGIS 4.0 (QVariant removido de PyQt6, QMetaType.Type como reemplazo documentado desde QGIS 3.38, QAction reubicado a QtGui) y no se agrego el flag 'supportsQt6', que la propia documentacion de QGIS marca como removido y sin efecto. Se recomienda una instalacion de prueba en QGIS 4.x real antes de publicar. / 1.7.0: Curvas de nivel disponibles tambien como herramienta independiente de Processing ('Post-Procesamiento > Curvas de Nivel (raster)'), que acepta el raster de CUALQUIER metodo de interpolacion del plugin (IDW, RBF, Kriging Ordinario, GeoKriging Analyst) o cualquier otro raster cargado en QGIS -- mismo criterio de niveles y misma simbologia (menores finas / maestras gruesas etiquetadas con su cota) que ya usaba GeoKriging Analyst en su pestana '11 Curvas de Nivel', ahora compartidos en un solo modulo (contour_tools.py) en vez de duplicados. Changelog reorganizado a una linea por version anterior (historial completo de cada release en GitHub) para que sea legible desde el dialogo de complementos de QGIS. Ademas, los bloques 'except Exception: pass' detectados por el linter (silenciaban fallas de widgets/etiquetado/logo opcionales sin dejar rastro) ahora registran la excepcion en el panel de mensajes de QGIS en vez de tragarla en silencio, sin cambiar el comportamiento -- esas operaciones siguen sin interrumpir al usuario si fallan. Se corrigen ademas 9 enums sin calificar detectados por el linter (QgsProcessingParameterNumber.Double/Integer, QgsMapLayerProxyModel.PointLayer/PolygonLayer, QgsFieldProxyModel.Numeric, QgsUnitTypes.DistanceMeters) por su forma calificada (.Type.Double, .Filter.PointLayer, .DistanceUnit.DistanceMeters, etc.), requerida por PyQt6 en QGIS 3.40+; el resto del plugin ya usaba la forma calificada, estos eran los unicos rezagados. / 1.6.0: Nueva pestana '11 Curvas de Nivel' en GeoKriging Analyst: genera curvas menores/mayores del raster de prediccion con estadistica real, histograma y sugerencia automatica de niveles, estilo Surfer. / 1.5.2: Catalogo de variograma de GeoKriging Analyst reducido a los 6 modelos reales de gstat (se quitan Quadratic, Cubic y Rational Quadratic, que no eran de esa fuente). / 1.5.1: Rediseno del informe de GeoKriging Analyst (HTML/PDF/Excel): tabla LOOCV completa en los 3 formatos, cobertura de todas las etapas del flujo, identidad visual de marca y logo cargable. / 1.5.0: GeoKriging Analyst: deteccion de outliers (IQR/Z-score), invalidacion automatica de resultados al cambiar Box-Cox/outliers, 3 modos de area de interpolacion (puntos/mascara/personalizada) y reporte de resolucion/area. / 1.4.0: GeoKriging Analyst completo: variograma logaritmico y pestanas Interpolar/Calidad/Resultados/Informe. Corrige un bug numerico grave del LOOCV (predicciones absurdas sin error visible) en Kriging, Variograma y RBF. / 1.3.0: Nueva herramienta GeoKriging Analyst (Beta): flujo guiado de geoestadistica (Proyecto-Explorar-Estructura espacial-Smart Model-Validar-Seleccionar), separado de las herramientas de Processing existentes. / 1.2.0: Correcciones de validacion extendidas a IDW y RBF; corrige fuga de datos en el LOOCV de IDW. / 1.1.0: Correcciones de validacion en Kriging Ordinario (NSE vs R2 de Pearson, deteccion de coordenadas duplicadas, diagnostico de calibracion de incertidumbre). / 1.0.1: Reorganizacion del menu principal y empaquetado.
tags=statistics, analysis, interpolation, idw, rbf, kriging, geostatistics, voronoi, loocv
homepage=https://github.com/Ninobravo55/Geointerpolation_analyst
icon=icon.png

