[general]
name=YF GIS Amazonia Tools
qgisMinimumVersion=3.22
qgisMaximumVersion=3.99
description=Professional GIS toolkit for cadastral regularization, surveying, GNSS post-processing, agroforestry management, visual layer comparison and coordinate navigation in the Peruvian Amazon.
version=2.0.2
author=Yuri Fabian Caller Cordova
email=yuricaller@gmail.com

about=Unified plugin integrating eight specialized tools for Peruvian Amazon surveying and forestry professionals.
    CADASTRAL: Automatic technical memoir (memoria descriptiva) generator for rural land regularization; Parcel segmenter with azimuth and angle calculations; Coordinate, vertex, area and perimeter calculator (YF Tools Plus).
    GEODESY / GNSS: PPK and PPP post-processing with RTKLIB, PDF technical reports, .cor output files for IGN Peru submissions.
    AGROFORESTRY: Agroforestry system (SAF) generator with unique plant identification and multiple spatial distribution methods.
    SEARCH AND ANALYSIS: Advanced multi-layer attribute search with report generation and visualization.
    VISUAL COMPARISON (NEW): Swipe Tool ArcGIS Pro-style with interactive draggable divider, magnifier mode, adjustable transparency, PNG/PDF export. Supports raster, vector, WMS/XYZ and mesh layers.
    NAVIGATION (NEW): Go-To Tool with separate input fields per format (DD/DMS/UTM/MGRS), auto-detection of UTM zone from project CRS, smart paste from Excel/WhatsApp, multi-coordinate paste to create N markers at once, Nominatim geocoder, persistent bookmarks, animated ArcGIS-style flash marker, conversion to GeoPackage/memory layer.
    REQUIREMENTS: python-docx (required for memoir generation). Optional: pandas, matplotlib, reportlab for reports. Install via OSGeo4W Shell: python -m pip install python-docx pandas matplotlib reportlab. RTKLIB binaries are required separately for GNSS processing.
    Designed for forestry, cadastre, topography and environmental monitoring professionals in Peru and Latin America.

tracker=https://github.com/YuriCaller/YF_GIS_AMAZONIA/issues
repository=https://github.com/YuriCaller/YF_GIS_AMAZONIA
homepage=https://github.com/YuriCaller/YF_GIS_AMAZONIA

category=Plugins
icon=icons/main_icon.png
license=GPL-3.0-or-later

experimental=False
deprecated=False
server=False
hasProcessingProvider=no

tags=amazonia,peru,cadastre,cadastral,surveying,topography,gnss,ppk,ppp,rtklib,geodesy,memoria descriptiva,atlas,word,docx,agroforestry,forestry,saf,attribute search,azimuth,vertices,coordinates,polygon,excel,swipe,compare,arcgis,goto,navigate,marker,magnifier,multi-paste

changelog=Version 2.0.2 (2026-05-12):
 - SECURITY FIX (detect-secrets false positive): MGRS letter constants in coord_parser.py were flagged as high-entropy Base64 strings by detect-secrets scanner. Replaced literal alphabet strings with computed constants using string.ascii_uppercase filtered for MGRS-excluded letters (I, O). Functionally identical, semantically clearer, and bypasses the false positive without compromising the scanner.

 Version 2.0.1 (2026-05-12):
 - SECURITY FIX (Bandit B602): removed shell=True from GNSS subprocess calls in ppk_processor and ppp_processor. Now uses subprocess.run with command list (shell=False default), which is safer and equally compatible with paths containing spaces on Windows. Python automatically quotes list arguments. For logging, uses subprocess.list2cmdline() to show the command without security risk. This was the blocker preventing publication to plugins.qgis.org.
 - REMOVED: manual shell string construction (' '.join with quotes) — no longer needed since subprocess.run handles list arguments correctly on Windows.

 Version 2.0.0 (2026-05-12):
 NEW MAJOR FEATURES:
 - VISUAL COMPARISON: Swipe Tool integrated. ArcGIS Pro-style draggable divider (horizontal/vertical), magnifier circle mode, adjustable transparency (0-100 percent), PNG/JPG/PDF export, keyboard shortcuts (arrows, +/-, Ctrl+S), QSettings persistence. Works with raster, vector, WMS/XYZ and mesh layers.
 - NAVIGATION: Go-To Tool integrated. Separate input fields per coordinate format (DD/DMS/UTM/MGRS) with live conversion. Auto-detects UTM zone from project CRS (32717/32718/32719 for Peru). Smart paste directly into UTM fields (resolves Qt SpinBox paste bug). Multi-paste dialog for creating N markers from free text (Excel/WhatsApp). Animated ArcGIS-style flash marker. Nominatim geocoder with LATAM country filters. Persistent bookmarks with QSettings. Markers as ephemeral graphics (no TOC pollution) with conversion to GeoPackage or memory layer.
 - About dialog redesigned with TUCSA branding, services info, and contact links.
 - Core utilities expanded: coord_parser.py (USGS UTM algorithm), paste_helpers.py (smart text parsing), smart_widgets.py (paste-aware SpinBoxes).

 Version 1.0.8 (2026-04-16):
 - GNSS CRITICAL FIX: normalize all file paths with os.path.normpath() before passing to RTKLIB. Mixed forward/backward slashes (D:/YURI TRABAJOS/...\PPK.conf) caused RTKLIB to fail with "no obs data" on Windows. This was the ROOT CAUSE of all processing failures.

 Version 1.0.6 (2026-04-16):
 - GNSS CRITICAL FIX: replaced subprocess.Popen with subprocess.run for RTKLIB execution. Popen with shell=True in QThread on Windows was silently failing to quote paths with spaces, causing 'no obs data' errors. subprocess.run is more reliable in threaded Qt contexts.
 - GNSS: added explicit [CMD] log line showing the actual quoted command sent to RTKLIB for debugging.
 - GNSS: skip logging thousands of 'processing' progress lines, show summary count instead.
 - GNSS: detect 'no obs data' error and report clear message.

 Version 1.0.5 (2026-04-16):
 - GNSS CRITICAL FIX: posmode mapping was completely wrong. static was mapped to 0 (Single/autonomous) instead of 3 (Static relative). kinematic was 1 (DGPS) instead of 2 (Kinematic). PPP modes were also wrong (4/5 instead of 7/6). This caused RTKLIB to run in Single mode ignoring the base station, producing 0 solutions.
 - Correct mapping: static=3, kinematic=2, movbase=4, fixed=5, ppp-static=7, ppp-kinematic=6.

 Version 1.0.4 (2026-04-16):
 - GNSS FIX: rnx2rtkp binary search now checks three locations: plugin root/rtklib_bin/, tools/gnss_postprocess/rtklib_bin/, and system PATH. Previously only checked plugin root, causing 'not found' when binary was in the gnss_postprocess subfolder.

 Version 1.0.3 (2026-04-16):
 - GNSS CRITICAL FIX: paths with spaces (e.g. 'D:/YURI TRABAJOS/WORK GIS/...') now work correctly on Windows. Previously RTKLIB received broken arguments and silently failed (showed help screen instead of processing).
 - GNSS FIX: base RINEX file now passed as positional argument (not with -r flag which is for ECEF coordinates). Correct rnx2rtkp syntax: rover.obs base.obs nav.nav.
 - GNSS: added detection of RTKLIB help screen output to report clear error instead of silent zero fix/float.
 - Same fixes applied to PPP processor for consistency.

 Version 1.0.2 (2026-04-16):
 - GNSS: file dialogs now accept year-based RINEX extensions (.26o, .26n, .26l, .26g, .25o, .25n, etc.) in addition to .obs/.nav/.rnx.
 - GNSS: auto-detection of navigation files when rover observation file is selected.
 - GNSS: GLONASS nav filter updated.

 Version 1.0.1 (2026-04-14):
 - Security: validated URL scheme in RTKLIB installer (Bandit B310).

 Version 1.0.0 (2026-04-13):
 - Initial unified release integrating six previously separate plugins.
 - Top-level menu YF GIS Amazonia with thematic submenus.
 - Memoria Descriptiva v3.2 (three modes), Segmenter, YF Tools Plus v2.3.
 - GNSS Post-Process v2.0 with RTKLIB integration.
 - SAF Generator v2.1 with six spatial distribution methods.
 - Attribute Search v1.1 with SQL injection fix.
 - Core infrastructure: lazy-loaded tool registry, PyQt5/PyQt6 compatibility, shared CRS utilities, unified logger.
