[general]
name=LVT4U
qgisMinimumVersion=3.16
qgisMaximumVersion=4.99
description=All-in-one GIS toolkit: thematic maps, lot labels, MBTiles (multi-layer + canvas export), KML/KMZ, basemaps, font conversion, CRS tools (batch set), map layouts, Excel-to-GIS, EUDR export, topology fix, CAD converter, and satellite image download.
version=2.7.9
author=Loc Vu Trung
email=locvutrung@gmail.com

about=LVT4U is a comprehensive QGIS plugin suite designed for Vietnamese forestry, land management, and international compliance workflows.

    Key Features:
    • Thematic Map — Generate categorized/graduated maps from attribute data
    • Lot Labels — Create parcel labels for cadastral maps
    • MBTiles — Export map tiles for offline mobile use
    • KML/KMZ — Convert layers to Google Earth format with styled popups
    • Excel to GIS — Import Excel/CSV spreadsheets as GIS layers
    • Basemap — Load Google Maps, Satellite, Hybrid, OpenStreetMap tiles
    • Font Converter — Convert between Unicode, TCVN3, and VNI encodings
    • CRS Tools — Transform coordinates with VN-2000 province support
    • Map Layout — Template-driven A5–A0 print/slide layouts with grid
    • EUDR Export — Generate GeoJSON compliant with EU Regulation 2023/1115
    • Satellite Downloader — Download Sentinel-2, Landsat 8/9, Sentinel-1 SAR, MODIS imagery (free, no auth)

    Built with cartographic science and international standards.
    Supports Vietnamese and English interface.

tracker=https://github.com/locvutrunglvt/LVT-QGIS/issues
repository=https://github.com/locvutrunglvt/LVT-QGIS
homepage=https://github.com/locvutrunglvt/LVT-QGIS

tags=vietnam,forestry,thematic,layout,kml,eudr,geojson,mbtiles,crs,vn2000,basemap,font,cadastral,land,excel,topology,topofix,flycam,photos,drone,exif,geotagged,satellite,sentinel,landsat,ndvi,gee,remote-sensing

category=Vector
icon=icon.png

experimental=False
deprecated=False

hasProcessingProvider=no
server=False

changelog=
    2.7.7 - KML: Gộp SHP→KML — unified multi-layer export (xóa tab trùng)
          - KML: Conditional Polygon Colors — tô màu polygon theo điều kiện
          - KML: Config Save/Load/Reset cho tab SHP→KML
          - MBTiles: Multi-layer export — chọn nhiều layer xuất 1 MBTiles
          - MBTiles: Canvas → MBTiles — xuất toàn bộ màn hình biên tập
          - CRS Tools: Batch Set CRS — đặt CRS đồng loạt cho tất cả layers
          - Metadata: Tương thích QGIS 3.16 → 4.99
    2.7.6 - FIX: KML Export crash trên QGIS 3.32 (Python 3.9 f-string backslash)
          - Tương thích Python 3.9 – 3.12+
    2.7.5 - FIX: Satellite search 403 Forbidden — chuyển từ OData sang STAC API
          - Satellite: hỗ trợ search ảnh lịch sử (mọi năm) không cần auth
          - FIX: Layer Editor — QgsSingleSymbolRenderer UnboundLocalError
    2.7.4 - CAD → SHP Converter: DWG + DXF + DGN → Shapefile
          - DXF/DGN: đọc trực tiếp qua GDAL OGR (mọi phiên bản)
          - DWG: hỗ trợ R2000 trực tiếp, AutoCAD 2010+ qua QGIS Import
          - DGN: hỗ trợ Microstation DGN v7/v8
          - GPKG: đọc trực tiếp GeoPackage (từ QGIS DWG Import)
          - VN-2000 (34 zones) + CRS tùy chỉnh + WGS84
          - Quét layers CAD, expand blocks, tách SHP theo geometry type
          - Tự động mở QGIS Import DWG khi cần
          - Song ngữ Việt/Anh, progress per-layer
    2.7.2 - NEW: GPKG WAL Checkpoint — flush SQLite WAL trước mỗi export/copy (ngăn mất dữ liệu)
          - NEW: OneDrive Safety — retry logic cho file bị lock, phát hiện file dehydrated
          - NEW: Pre-flight Validation — kiểm tra project trước export (layers valid, unsaved edits, OneDrive)
          - NEW: Per-Layer Export Config — chọn layers nào export bằng checkbox trong Sync tab
          - NEW: Two-Level Progress — hiện "Layer X/N: tên lớp" trong progress bar
          - Fix: MBTiles — dùng processingRegistry() thay algorithmHelp() để tìm thuật toán
          - Fix: KML/KMZ — streaming write (giảm RAM), gộp 2 Placemark/polygon thành 1 (giảm 50%% file size)
          - Fix: GPKG Export — proper temp layer cleanup với setDataSource + gc.collect()
          - Utility: shared/file_utils.py — safe_copy_file, compute_file_checksum, safe_remove_tree
    2.7.1 - Fix: Reset button now refreshes layer list from current project
          - Fix: KML — _reset_config() calls _load_current_layers()
          - Fix: MBTiles — _reset_defaults() calls _refresh_layers()
          - Fix: Layout — _reset_defaults() calls refresh_layers()
          - Fix: PolyFix — _set_state('scan') calls refresh_layers()
    2.7.01 - Fix: Lint F821 — missing QgsCoordinateReferenceSystem, QgsMarkerSymbol, QgsPointXY imports
           - Fix: Lint F401/F811 — removed duplicate QgsSingleSymbolRenderer import
           - Fix: Lint F821 — undefined 'W' replaced with QgsWkbTypes in poly_fix
           - Fix: Lint E302/E122/E125 — blank lines and indentation
    2.7.0 - Compatibility: Full QGIS 3.16 → 4.x support (Python 3.9+)
          - Feature: WkbCompat shim — QgsWkbTypes replaced with future-proof compat layer
          - Fix: 10 multiline f-string expressions collapsed for Python 3.9 compat
          - Fix: 18 files migrated from QgsWkbTypes to WkbCompat (QGIS 4.x ready)
          - Fix: crs_tools, font_converter, kml, layout, map_packager, tt16_dialog
          - Metadata: qgisMaximumVersion raised from 3.99 → 4.99
          - Verified: 0 compile errors, 0 Python 3.10+ syntax across 100+ files
    2.6.9 - Fix: Lint cleanup for QGIS Plugin Repository compliance\n    2.6.8 - Fix: Package Map (GPKG) — GPKG source layers now packaged correctly
          - Fix: Package Map (GPKG) — MapInfo TAB files recognized and converted
          - Fix: Package Map (GPKG) — CRS preserved after packaging
          - Fix: Package Map (GPKG) — Correct GPKG table name mapping via GDAL
          - Fix: Camera Trap — Red screen eliminated (rubber band cleanup)
          - Fix: Camera Trap — Drawing overlay changed from red to blue
          - Feature: Camera Trap — Clear drawn area button added
          - Improvement: Camera Trap — Robust map tool cleanup on close/reject
    2.6.3 - Flycam: Merge View/Update tabs into Import tab (4→2 tabs, cleaner UI)
          - Flycam: Photo renderer uses QML style (ImportPhotos approach) for stability
          - Flycam: MapTip shows photo name + thumbnail on hover (file:/// prefix)
          - Flycam: Thumbnail generation (128px JPEG) during import for map display
          - Flycam: Bilingual help EN/VN updated for new 2-tab layout
    2.6.2 - Fix: Satellite search/download broken — API URLs had spaces (404 errors)
          - Fix: Copernicus OData, STAC, AUTH endpoints restored
          - Fix: PocketBase Sync API endpoints restored
          - Fix: GDAL dataset handles restored (preview reliability)
          - Fix: GEE cloud masking and index computation restored
    2.6.1 - Fix: Download crash when COG not yet uploaded to AWS S3 (recent images)
          - Feature: HEAD request URL check before GDAL download — clear error message
          - Feature: True Color fallback — if TCI.tif unavailable, auto-download R/G/B bands separately
          - Feature: Per-item error handling — failed images skipped, batch continues
          - Feature: Multi-band stack for False Color, SWIR, Agriculture selections
          - Fix: "visual" asset always present → was overriding all band selections to single-band
    2.6.0 - Fix: Satellite Downloader — Multi-satellite download now works for all 5 types
          - Feature: NDVI/EVI/NDWI index computation (numpy + GDAL) for S2/L8/L9
          - Fix: Band selection correctly maps display names to STAC asset keys
          - Fix: Landsat 8/9 download via AWS COG (was hardcoded to Sentinel-2)
          - Fix: Sentinel-1 SAR download via AWS COG
          - Fix: MODIS NDVI download via Element84 STAC API
          - Improvement: Search retry with bbox on CDSE API timeout/400 error
          - Improvement: Timeout increased 60s→90s for CDSE OData queries
          - Internal: _BAND_MAP per-satellite asset resolution table
          - Internal: _resolve_bands() fuzzy matching for band key names
    2.5.0 - Feature: Multi-satellite support (S2, L8, L9, S1, MODIS)
          - Feature: STAC search engine for MODIS (Element84 API)
          - Feature: stac_download_batch worker with GDAL crop
          - Improvement: Preview routing extended for STAC sources
          - Improvement: Layer search auto-bbox for >50 vertex polygons
    2.4.0 - Stable release (same as 2.3.1)
    2.3.1 - Fix: Preview self-healing when quicklook URL missing
          - Improvement: Real percentage progress bar for search + download
          - Fix: Layer search auto-converts polygon to bbox for performance
    2.3.0 - New: Satellite Downloader — download satellite imagery (free via Copernicus + AWS)
          - Feature: Sentinel-2 L2A, Landsat 8/9, Sentinel-1 SAR, MODIS NDVI support
          - Feature: Band composites (True Color, False Color, NDVI, EVI, NDWI, SWIR, Agriculture)
          - Feature: Cloud masking (S2 SCL, Landsat QA_PIXEL)
          - Feature: Date range, max cloud %%, resolution selection
          - Feature: AOI from QGIS layer, map extent, or GEE Asset
          - Feature: GeoTIFF and PNG export with auto-add to QGIS canvas
          - Feature: Preview thumbnail before download
          - Feature: Background thread for non-blocking GEE calls
          - Feature: IPv4 fix for networks without IPv6 routing
    2.2.18b - Feature: Map Layout — Legend (Chú dẫn) now available in Slide mode
            - Legend checkbox stays visible when switching to Slide layout
            - Full legend customization (layers, symbols, fonts, columns) works in both Print and Slide
    2.2.17b - New: Merge SHP → KML — combine multiple SHP files into a single KML/KMZ
            - Feature: Independent label/popup/style config per geometry type (Point/Line/Polygon)
            - Feature: Auto-detect geometry type on SHP import
            - Feature: Per-type field union from all loaded SHP files
            - Feature: Full bilingual UI (Vietnamese/English)
    2.2.15b - New: Flycam Photos module — import geotagged drone photos as GIS point layers
            - Feature: EXIF + DJI XMP GPS/altitude/azimuth extraction (exifread + Pillow)
            - Feature: Interactive PhotoViewer with zoom, pan, rotate, and image filters
            - Feature: Click-on-map tool to view photos at point locations
            - Feature: Sync/Update layer with photo directory changes
            - Feature: Bulk export photos from layer to folder
            - Feature: 6 output formats (GPKG, SHP, GeoJSON, CSV, KML, TAB)
            - Feature: Map tooltip with photo thumbnail preview
            - Feature: Full bilingual UI (Vietnamese/English)
    2.2.14a - UX: Map Layout — Print (full frame) now default mode
            - UX: Map Layout — Separated Predefined Size vs Draw Map Frame
            - UX: Map Layout — Added animated step arrows between tabs
            - UX: Map Layout — Inspirational quote in General tab
    2.2.13a - Content: Legal Documents — Added QĐ 689/QĐ-TCLN-KL (2013) forest map guide (26→27 docs)
    2.2.12a - Improvement: Legal Documents — 26 docs converted to embedded HTML (offline, -75%% size)
            - Improvement: Legal Documents — Removed all broken external URLs (thuvienphapluat.vn)
            - Improvement: Legal Documents — Restored 18 missing files from legacy plugin
            - Fix: Plugin reload — Clean toolbar/dialog detachment prevents widget duplication
    2.2.12 - Fix: Font Converter — CRS not applied to output (was using source CRS)
           - Fix: Font Converter — TCVN3→Unicode chain collision (ã→ó→ú→ỳ)
           - Improvement: Positional scan algorithm replaces text.replace() chain
    2.2.11 - New: TopoFix module — 11 topology check & fix algorithms
           - Feature: Duplicates, Invalid, Multipart, Overlaps, Gaps detection
           - Feature: Must-Not-Overlap smart cut, Sliver, Redundant Vertices
           - Feature: Unclosed Rings, Missing Nodes, Tiny Polygon merge
           - Feature: Background QThread processing with progress bar
           - Feature: Highlight errors on map with colored memory layers
           - Feature: Sequential fix pipeline (output N = input N+1)
           - Feature: Full bilingual UI (Vietnamese/English)
           - Author: Loc Vu Trung tong hop vi dam me cung ban!
    2.2.10 - New: Layer Editor module — manage, rename, group, style layers
           - Feature: Auto-group layers by geometry (Polygon/Line/Point/Raster)
           - Feature: Display name suggestions (Vietnamese/English)
           - Feature: Style from QGIS Style Manager filtered by geometry type
           - Feature: Raster presets (NDVI, Hillshade, RGB, False Color)
           - Feature: Save/Load layer configuration presets
           - Feature: Group layers in Panel by geometry type
    2.2.9 - Fix: Layout self.lang crash → use current_language()
          - Fix: Layout self.cmb_orient crash → use radio buttons
          - Fix: Thematic Map self.lang crash on dialog open
          - Fix: OGR type mismatch in categorized renderer (int vs string)
          - Fix: Label round() on text fields (Cannot convert to double)
          - Fix: QVariant import path (qgis.PyQt.QtCore)
          - Feature: LDLR fields auto-uppercase in label expressions
    2.2.8 - Security: Fix Bandit B608 false positives in help_content.py
          - Lint: Remove unused imports (QTextEdit, get_help, get_guide)
          - Lint: Fix blank line violations across all modules
          - Lint: Add missing QHBoxLayout import in legal_docs
          - i18n: Bilingual progress dialogs in map_packager
    2.2.7 - EUDR: Add Species, FarmerID, DataCollectionDate, ProducerCountry fields
          - EUDR: Geometry validation with detailed bilingual error dialog
          - EUDR: Reject unsupported geometry types (LineString, GeometryCollection)
          - EUDR: Comprehensive bilingual help rewrite (8-section guide)
          - EUDR: Help button (❓) added to shared help system
          - Fix: Basemap toolbar button not working in Vietnamese mode
    2.2.6 - Maintenance: Fix W504 and E501 lint errors
    2.2.5 - Maintenance: Fix W503 lint errors
    2.2.4 - Coord Converter: Auto-trigger conversion when clicking Zoom/Marker/Add
    2.2.3 - MBTiles: add basemap toggle (uncheck to export without background)
    2.2.2 - Label: add decimal rounding spinbox (num/den, -1=off)
          - MBTiles: rename Apply→Set Up, bilingual Export button
    2.2.1 - Legend margins now configurable via spinbox (left + bottom)
          - KML dialog: hide LIVE PREVIEW panel on KML→SHP tab
          - Code cleanup: removed duplicate method, fixed all lint warnings
    2.2.0 - KML/KMZ to SHP: complete rewrite with geometry-type-split strategy
          - KML field selection: scan fields with sample data before export
          - Legend block fix: proper sizing, z-order, precise positioning
          - Legend margins: 3mm left from frame, 6mm above sig/frame bottom
          - First-run language selection dialog on initial install
          - Engine: remove template legends before adding native legend
          - Error logging for legend creation failures (QGIS Log panel)
    2.0.7 - Restore 12 missing TCVN codes (39-47, 89-91): total 110 codes
          - Pattern symbology: DT2 triangles, DT1/BC dots, DKH crosshatch
          - Border default 0.1mm black, outline color pure black
          - Fraction labels: Tk.khoanh.lo / Ldlr, dtich (7pt Arial)
          - Field auto-detect: ldlr/LDLR → LDLR_VT mapping
          - Popup "Thiết lập hoàn thành" after Apply
          - QML labeling embedded in all 8 style files
    2.0.2 - Fixed ALL num_codes to match TCVN 11565 Appendix E (was offset)
          - Fixed 12 HEX colors: DKH, DT2, BC1, TXDG, RLB1, RLK, DT1
          - Fixed appendix_e.json duplicate RNP1 -> RNN1
          - 3-way audit: 0 errors (TCVN vs TT33 vs TT16)
    2.0.1 - Full bilingual UI for thematic map dialog (VN/EN)
          - Radio buttons: TT 33/2018 replaces TCVN 11565 label
          - Dynamic tab titles: LDLR_Ref(55/98), Phụ lục/Appendix 1
          - Regenerated 8 QML files: 55 cats (TT16) + 98 cats (TT33)
          - Fixed 8 empty name_en: TXDG, RNM, RNP, RTNC, CDC, TGNN, TCDD
          - Appendix tab rebuilds on standard toggle
    2.0.0 - TT16/2023 migration: dual-standard support
          - New ldlr_tt16.json: 55 official TT16 codes with color mapping
          - Updated ldlr_master.json: 98 FRMS TT33 codes (was 93)
          - Added 5 missing TT33 codes: NRLG, NRLB, NRLN, NRLK, NRLP
          - Fixed 13 renamed TT33 symbols (RNMG→NMG, RNN→NN, etc.)
          - Dialog: auto-switches data source (55 vs 98) by standard
          - Appendix tab: 15 TT16 groups / 12 TT33 groups
    1.9.9 - Bundle local TCVN PDFs, deprecate external links
          - Responsive 90%% screen height for MBTiles/EUDR/KML dialogs
          - Fix OpenSans font 404 in tcvn11565_style.xml
    1.9.0 - Comprehensive plugin suite with 10 integrated modules
          - Thematic Map: categorized/graduated map generation
          - Lot Labels: parcel labeling for cadastral maps
          - MBTiles: offline tile export
          - KML/KMZ: Google Earth export with styled popups
          - Excel to GIS: spreadsheet import
          - Basemap: Google/OSM tile loading
          - Font Converter: Unicode/TCVN3/VNI conversion for MapInfo
          - CRS Tools: VN-2000 coordinate transformation
          - Map Layout: template-driven A5-A0 layouts
          - EUDR Export: EU deforestation regulation compliance
    1.0.0 - Initial release: umbrella plugin framework

