Version: [5896] GeoInterpolation Analyst 1.8.4

1.8.4: Reorganizacion interna de archivos, sin cambios de
funcionalidad ni de comportamiento para el usuario final (todas las
herramientas, menus y dialogos quedan identicos). El plugin pasaba de
tener sus ~20 modulos Python sueltos en la carpeta raiz a 3
subpaquetes por función: core/ (motores compartidos:
smart_kriging_engine.py, contour_tools.py, interpolation_metrics.py,
statistics_engine.py, field_type_compat.py), algorithms/ (los 9
algoritmos de Processing y su provider.py), y ui/ (los 3 dialogos y el
archivo .ui). icon.png se mueve a resources/icon.png (metadata.txt
actualiza icon=resources/icon.png). En la raiz solo quedan los
archivos que QGIS exige ahi (__init__.py, metadata.txt) mas los dos
puntos de entrada (geointerpolation_analyst.py, plugin_stub.py),
README.md y LICENSE. Se actualizaron los ~20 imports relativos
afectados por el traslado (p.ej. 'from .interpolation_metrics import
...' pasa a 'from ..core.interpolation_metrics import ...' en los
algoritmos que quedaron en un subpaquete distinto al de sus
dependencias) y las 3 rutas que resuelven icon.png/el .ui via
os.path.dirname(__file__), que cambian de profundidad al moverse los
archivos que las usan. Se corrige ademas un 'except Exception: pass'
real en geokriging_analyst_dialog.py (limpieza del directorio temporal
al presionar 'Reiniciar todo') detectado por el validador de
plugins.qgis.org ('Try, Except, Pass detected'): ahora registra la
excepcion con el mismo helper _log_warning() que ya usa el resto del
archivo desde la v1.7.0, en vez de tragarla en silencio; no cambia el
comportamiento (la limpieza sigue sin interrumpir al usuario si
falla). Los otros 3 bloques except...pass del proyecto no se tocaron
porque ya usan tipos de excepcion acotados (OSError/PermissionError,
TypeError/ValueError, etc.) en vez de 'Exception' generico, que es lo
que ese validador especifico señala. Verificado con py_compile de los
24 modulos, una resolucion estatica (AST) de cada import relativo
contra la nueva estructura de carpetas (confirma que los ~32 imports
internos apuntan a un modulo y un nombre que realmente existen ahi), y
un barrido AST de todo el arbol que confirma que no queda ningun
'except Exception: pass' (ni 'except: pass' desnudo) sin loguear;
igual que en versiones anteriores, no hay una instalacion real de QGIS
en este entorno para confirmar la carga end-to-end del plugin, asi que
se recomienda una instalacion de prueba antes de publicar. Se corrigen
tambien 2 problemas mas detectados por el validador de
plugins.qgis.org al subir esta version: (1) F811 (redefinicion de
nombre no usado) en kriging_algorithm.py --
'QgsProcessingParameterExtent' estaba importado 2 veces en el mismo
bloque 'from qgis.core import (...)' (bug preexistente a esta
reorganizacion, no introducido por ella), se saca la segunda; (2) 14
enums sin calificar detectados por el analizador de compatibilidad Qt6
del validador, mismo tipo de hallazgo que ya se habia corregido
parcialmente en la v1.7.0 pero con otros 14 casos que quedaron sin
tocar entonces: Qgis.Warning -> Qgis.MessageLevel.Warning (4 casos:
__init__.py x2, geokriging_analyst_dialog.py, contour_tools.py),
QgsProcessingAlgorithm.FlagNoThreading -> .Flag.FlagNoThreading (5
casos: kriging_algorithm.py, kriging_variogram.py,
inverse_boxcox_algorithm.py, idw_loocv_algorithm.py,
rbf_loocv_algorithm.py), QgsFeatureSink.FastInsert -> .Flag.FastInsert
(1 caso, reclassify_polygonize_algorithm.py),
QgsProcessingParameterNumber.Integer -> .Type.Integer (2 casos, mismo
archivo) y QgsVectorFileWriter.NoError -> .WriterError.NoError (2
casos: idw_loocv_algorithm.py, rbf_loocv_algorithm.py); la forma
calificada ya la usaba el resto del plugin desde la v1.7.0 (ver
QgsVectorFileWriter.WriterError.NoError en geointerpolation_analyst.py
y QgsProcessingParameterNumber.Type.Integer en
kriging_variogram.py/contour_algorithm.py), asi que estos 14 eran los
rezagados. Verificado con py_compile y pyflakes (0 avisos F8xx) sobre
los 24 modulos y un barrido con regex/grep confirmando que no queda
ninguna forma sin calificar de estos 5 enums en todo el arbol. /
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.

yes

geomaticape2030

2026-09-20T00:14:07.986624+00:00

3.28.0

4.99.0

None

no

Version management

Plugin details