{"name": "GeoInterpolation Analyst", "package_name": "GeoInterpolation_Analyst", "version": "1.8.4", "experimental": false, "qgis_min": "3.28.0", "qgis_max": "4.99.0", "downloads": 191, "uploaded_by": "geomaticape2030", "upload_datetime": "2026-09-19T19:14:07.986624", "changelog": "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\u00f3n: 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\u00f1ala. 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\u00eda 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\u00e1 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\u00ed que ese borrado fallaba silenciosamente (solo quedaba en el panel de mensajes de QGIS) y el aviso que S\u00cd ve\u00eda el usuario dec\u00eda igual \"se limpiaron paquetes conflictivos, reinici\u00e1 QGIS\", dando a entender que la correcci\u00f3n hab\u00eda quedado completa. El usuario reinici\u00f3 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\u00eda intacta y adem\u00e1s estaba incompleta/incompatible. Ahora __init__.py distingue lo que s\u00ed se pudo limpiar de lo que qued\u00f3 sin poder limpiarse (comprobando antes de intentar el borrado si el paquete ya est\u00e1 en sys.modules, en vez de intentar un borrado condenado a fallar) y, si algo queda sin limpiar, el plugin nunca dice \"reinici\u00e1 y listo\": muestra autom\u00e1ticamente (apenas carga, sin que el usuario tenga que buscar el men\u00fa) 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\u00fa 'Instalar Dependencias' (varios usuarios lo interpretaban como \"el plugin est\u00e1 roto\" en vez de \"hay un paso de instalaci\u00f3n pendiente\"). Ahora, apenas termina de cargar el stub liviano (plugin_stub.py), se ofrece autom\u00e1ticamente instalar lo que falta con un QMessageBox de S\u00ed/No -- no una instalaci\u00f3n silenciosa, porque pip descarga paquetes de internet y modifica el entorno Python del usuario, as\u00ed que se pide confirmaci\u00f3n en vez de arrancar sin avisar -- y si acepta se abre directo el instalador (install_deps_dialog.py, ya exist\u00eda desde antes) con el progreso en pantalla. Si dice que no, el aviso en la barra de mensajes y las opciones del men\u00fa 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\u00e9n aparece autom\u00e1ticamente en vez de esperar a que el usuario lo abra desde el men\u00fa. Ninguno de estos cambios afecta el caso normal (dependencias ya instaladas): ah\u00ed __init__.py carga directo el plugin completo, sin pasar por este stub. / 1.8.1: Se corrige una regresi\u00f3n real introducida por la v1.8.0 que romp\u00eda el plugin en QGIS 3.28-3.37 (el rango expl\u00edcitamente 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\u00e1lisis Estad\u00edstico > 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\u00f3n 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\u00f3n Inversa Box-Cox', los p\u00edxeles fuera del dominio de la formula (\u03bb\u00b7Y+1 \u2264 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.", "external_deps": null, "download_url": "https://plugins.qgis.org/plugins/GeoInterpolation_Analyst/version/1.8.4/download/"}