[general]
name=Military Cartography Tools
qgisMinimumVersion=3.44.0
qgisMaximumVersion=4.99.0
description=Military cartography, MIL-STD-2525D/E and APP-6D/E tactical graphics, MGRS, and terrain analysis tools for QGIS. Runs fully offline - no external services, no data ever leaves your machine.
author=Praveen Kumar
license=GPL-2.0+
email=kattapraveen.kr@gmail.com
version=1.3.0

changelog=1.3.0
    - Sensor Coverage: plot several sensors at low, medium or high
      level and see each level's combined coverage as a single merged
      perimeter. Every sensor carries its own height, detection
      ceiling, maximum range, MIL-STD-2525 affiliation and
      designation, plus its latitude, longitude and MGRS position
      filled in automatically and kept up to date as it moves.
    - Detection height is measured from the antenna, not from sea
      level, so siting a sensor higher raises the whole band of
      airspace it covers. A target is modelled flying level at a fixed
      altitude rather than at a fixed height above whatever ground is
      underneath it, so terrain taller than the target genuinely hides
      what is behind it.
    - Coverage merges only between sensors on the same side: two
      friendly radars fuse into one perimeter, a friendly and a
      hostile one stay two overlapping shapes. Each sensor is
      labelled along its own stretch of the outline.
    - Coverage is drawn as a perimeter rather than a filled shape, so
      it never washes out the terrain being judged against it. Low,
      medium and high are told apart by line weight and dash pattern.
    - Coverage redraws whenever a sensor points layer is saved, and a
      new Regenerate Sensor Coverage action redraws every level on
      demand - after reopening a project, say, or after pointing a
      laydown at a different DEM.
    - Radar propagation uses the 4/3-earth refraction model rather
      than the optical coefficient Line of Sight and Viewshed use.
    - Viewshed's maximum distance raised from 50 km to 500 km.
    - Fixed: Viewshed and Sensor Coverage both computed visibility
      past the edge of the DEM, reporting the NoData padding beyond it
      as visible ground. Both are now bounded by the terrain actually
      loaded.

    1.2.0
    - Every NATO symbol other than lines and areas can now be rotated
      (a Rotation field, degrees clockwise from north) and resized (a
      Scale field, percent of its own default size) - added to every
      point-symbol layer in the plugin. Rotating or scaling a symbol
      carries its own amplifiers (echelon ticks, unique designation
      text) along with it as one picture.
    - Trip Wire and Abatis (Obstacle Control Measures) are now point
      symbols - a fixed page size with their own Rotation field,
      instead of a shape that grew or shrank with however long a line
      you digitized. An existing project with either digitized as a
      line will need those two features re-drawn as points; nothing
      else on that layer is affected.
    - Widened the lines milsymbol draws inside its own icons - some,
      like Checkpoint and the Observation Post family, were thin
      enough to be hard to read at working scales. Every milsymbol-
      rendered icon in the plugin is affected; the plugin's own hand-
      built lines and areas (control measure lines, obstacle belts,
      and similar) are unchanged.
    - Corrected several symbol-drawing issues found in a full pass
      against the standard: Position Area For Artillery's designator
      label now always stays on the polygon's own perimeter, including
      on irregular shapes; Limited Access Area's unique designation is
      now masked like every other area's; Radiation Dose Rate Contours
      now suffixes "cGy" to the typed number automatically; Minimum
      Safe Distance Zone's concentric-ring labels no longer overlap or
      hide each other; the Dummy Minefield's decoy chevron sits closer
      to the minefield it belongs to; Electro-Optical Intercept's "O"
      label no longer shows a leaked dot from the line underneath; and
      Mission Task Fix's kinks and letter now shrink to fit a short
      digitized line instead of disappearing entirely.
    - Alphabetised the NATO Symbols and Control Measures menus - both
      had followed the standard's own printed table order, which has
      no reason to survive into a plain "pick one of many" dropdown.
    - Renamed "Supply Points" to "Supply Control Measures" in the
      Control Measures menu, matching the naming convention every
      other entry that adds more than one layer type already uses (it
      adds three: Points, Lines and Areas).
    - Newly-added symbology layers now insert collapsed in the Layers
      panel rather than expanded - one click routinely adds two or
      more layers at once, and an expanded legend for each stacks up
      fast.
    1.1.0
    - Renamed in two Entity dropdowns: what the Land Installation and
      Activities layers called "Law Enforcement Vessel" is Coast Guard,
      which is what the standard prints for that code and what the
      plugin has always drawn. If you picked that entry before, your
      symbol is unchanged and was always correct - only the name in the
      list was wrong. The genuine Law Enforcement Vessel, on the Sea
      Surface layer, is untouched.
    - Land Equipment's law-enforcement entities were missing eight of
      their twelve: ATF, Department of Justice, FBI, Police, Secret
      Service, TSA, Coast Guard and US Marshals Service have been
      added alongside the Border Patrol, Customs and DEA entries that
      were already there.
    - Land Installation gained the two it was missing, ATF and Police,
      completing that layer's law-enforcement list as well.
    - Corrected two names that read "Agency" where the standard reads
      "Administration" - Drug Enforcement Administration (DEA) and
      Transportation Security Administration (TSA). Symbols unchanged.
    - The test suite now runs against QGIS 4.2.1 alongside 3.44.12.
    - Added MIL-STD-2525E and APP-6E tactical graphics support, alongside
      the existing MIL-STD-2525D/APP-6D symbology, via a new "Symbology
      Edition" toolbar menu. This picks which standard NEWLY added
      symbology layers are built against; a layer already in a project
      is never changed by switching it, and a layer created before this
      existed keeps working exactly as before (it is read as 2525D,
      which is what it always was). Adding the same layer type under
      both editions now works side by side in one project - they get
      distinct names, e.g. "Air (2525D/6D)" and "Air (2525E/6E)".
    - Land Unit's own Sector 1/Sector 2 modifier dropdowns are now
      available on the Land Unit layer (133 codes), matching the
      existing modifier dropdowns already on Land Civilian, Equipment
      and Installation.
    - Fixed a real, if narrow, correctness bug in a third-party library
      this plugin bundles: 8 of Land Unit's own Sector 1 modifiers
      (Airmobile/Air Assault, Node Center, Sensor Control Module, Single
      Shelter Switch, Accident, Other, Civilian, Antisubmarine Warfare)
      were drawing the wrong icon under MIL-STD-2525D. Picking one of
      these from the dropdown now draws the icon its own name describes.
    - Fixed the Boundary line's echelon marker (C2 Measures): choosing
      an echelon without also typing a unit designation used to leave
      it undrawn entirely, and choosing it alongside only one
      designation could draw it on the wrong side of the line. It now
      always appears where the standard's own template puts it.
    - Two label corrections: the Activities layer's "Law Enforcement"
      entity now reads "Law Enforcement Operation", matching the
      standard's own wording; several MIL-STD-2525E "(Generic)" entries
      that rendered as an unhelpful blank circle with nothing to
      distinguish them have been removed from the Entity dropdowns they
      appeared in.
    - Under MIL-STD-2525E, every Sector 1/Sector 2 Modifier dropdown
      that already existed now also offers that standard's 93 "common"
      modifiers (things like Robotic, Cargo or Command Post Node, which
      apply across many symbol types rather than one) alongside the
      symbol's own list. A symbol set with no MIL-STD-2525E modifiers of
      its own still has no dropdown, same as before.
    - Added an "Insert Symbol" button to every print layout window's own
      toolbar: pick an Affiliation, Symbol Set and Entity and it places
      that symbol directly on the layout page as a normal, draggable
      picture item - for a legend key or callout, without needing a
      georeferenced feature on the map.
    1.0.3
    - Correctness fix: the drawn UTM/GZD grid now honours the two
      exceptions the standard itself makes. Over south-west Norway
      (band V) zone 31V is 3 degrees wide and 32V is 9, not 6 each;
      over Svalbard (band X) zones 32X, 34X and 36X do not exist at
      all, with 31X, 33X, 35X and 37X widened to cover that ground.
      MGRS coordinate conversion already applied both, so the grid
      layer and the plugin's own MGRS readings had disagreed with
      each other in those two regions.
    - Three fixes to the GZD labels: they no longer pile up on top of
      one another at world scale and bury the grid lines; they no
      longer disappear when you pan inside a zone larger than the
      map view; and they no longer overhang into the neighbouring
      zone when only a narrow strip of a zone is on screen. Where a
      label switches placement is now decided from each cell's own
      size rather than one global scale for the whole world.
    - The user guide's "Getting a DEM" section now covers GMRT for
      bathymetry, including what to expect from below-sea-level
      elevations once loaded.
    1.0.2
    - The Bandit suppression added in 1.0.1 for the mine-scatter random
      number generator was one line too high to take effect, so that
      false positive came back on upload. Moved onto the flagged line
      itself, and the whole set verified by running Bandit locally
      rather than by another upload round-trip.
    1.0.1
    - Fixed the findings from 1.0.0's automated Plugin Repository
      review: the milsymbol.js bridge now imports QJSEngine through
      qgis.PyQt rather than PyQt5/PyQt6 directly, so it resolves to
      whichever Qt binding the running QGIS was built against. The
      remaining scanner findings were false positives (a deterministic,
      seeded random generator used for mine-symbol scatter, and four
      MIL-STD-2525D entity names containing the word "Secret" - the US
      Secret Service - read as credentials by keyword heuristics); each
      is now annotated in place rather than silently left to re-flag.
    1.0.0
    - First stable release. The plugin is no longer marked experimental.
    - Complete MIL-STD-2525D / APP-6 tactical graphics (Phase 10): the
      full control-measure set - manoeuvre, offensive, defensive,
      obstacle, fire support, target acquisition, airspace, maritime,
      CBRN defence, deception, intelligence, sustainment, command and
      control, field fortification, and mission tasks - plus entity
      symbols across the land, air, sea surface, subsurface, space,
      cyberspace, SIGINT and activities layers, all keyed to their own
      SIDC. Drawn as real QGIS symbology (geometry generators, data-
      defined properties, rule-based labelling), not stamped images, so
      every symbol scales, rotates and prints correctly at any map
      scale.
    - Viewshed gained a coverage colour picker and an outline-only
      rendering option, so several observers' coverage can be told
      apart and laid over terrain without hiding it.
    - Tanaka Contours now carries a caution about generation time,
      which can be long on a large DEM at a fine contour interval.
    0.3.0
    - New navigation and production tools (Phase 9): a Bearing/Range tool,
      GPX/KML waypoint import/export, and Map Sheet Series - batch-generate
      a numbered series of print sheets tiling a large area, each sheet
      named after the real UTM/MGRS grid square it falls in, not an
      invented numbering scheme.
    - Every print layout now includes an automatic grid-position diagram
      showing where the map sits in the UTM/MGRS grid hierarchy, with the
      map's own footprint outlined to scale.
    - Line of Sight and Viewshed dialogs now show MGRS alongside latitude/
      longitude.
    - Hypsometric Tint gained an optional stepped/discrete colour ramp
      (in addition to the existing smooth gradient), and the shared
      colour ramp it uses with Tanaka Contours was warmed from a dusty
      rose toward a proper orange/brown hue in the mid-to-high elevation
      bands.
    0.2.1
    - Fixed Plugin Repository validator findings from the 0.2.0 upload:
      3 Qt6 forward-compatibility enum-scoping errors in the new
      Line of Sight/Viewshed marker code, and a security finding
      (insecure tempfile.mktemp() usage, 9 call sites across the new
      terrain analysis modules) - all Processing algorithm outputs now
      use QgsProcessing.TEMPORARY_OUTPUT instead.
    0.2.0
    - New terrain analysis toolset (Phase 8), all fully offline/local:
      Tanaka (illuminated) contours, Hypsometric Tint, Line of Sight,
      Combined Hillshade, and Viewshed (dead-ground analysis) - each
      driven entirely by local GDAL/QGIS Processing against your own
      DEM, with no network access of any kind.
    0.1.2
    - Fixed MGRS 100km grid labels landing in the wrong square at some
      zoom levels, and the print-layout scale bar rendering too large
      at close-in scales (e.g. 1:1,000-1:2,000).
    0.1.1
    - Fixed Plugin Repository validator findings: fully-scoped QGIS enum
      access (Qt6 forward-compatibility) and one Flake8 lambda-assignment
      finding.
    0.1.0
    - Initial release: MGRS conversion, coordinate probe, military grid
      generation (UTM/GZD, MGRS 100km, 10/5/1km sub-grids), automated
      print-layout production, grid convergence and magnetic declination
      (WMM2025) expression functions.

about=Military Cartography Tools (MCT) is a QGIS plugin providing tools for military mapping, including MIL-STD-2525D/E and APP-6D/E tactical graphics (control measures and entity symbols, drawn as real QGIS symbology rather than stamped images, so they scale and print correctly at any map scale, with a per-layer edition switch to choose which standard a symbology layer is built against), MGRS coordinate handling, military grid generation, layout automation, coordinate conversion, cartographic utilities, terrain analysis (illuminated contours, hypsometric tint, line of sight, combined hillshade, and viewshed/dead-ground analysis), and navigation/production tools (bearing/range, GPX/KML waypoint import/export, and batch print-sheet generation tiling a large area). Every tool runs entirely offline against local data - GDAL/QGIS Processing, a bundled World Magnetic Model, and your own DEM - with no external services, API calls, or telemetry of any kind, making it suitable for use with sensitive or classified data.

tracker=https://github.com/kattapraveen/MilitaryCartographyTools/issues
repository=https://github.com/kattapraveen/MilitaryCartographyTools
homepage=https://github.com/kattapraveen/MilitaryCartographyTools

category=Cartography
icon=icons/icon.svg

experimental=False
deprecated=False

hasProcessingProvider=False

tags=MGRS,military,cartography,grid,UTM,coordinates,layout,mapping,terrain,DEM,hillshade,viewshed,line of sight,offline,GPX,KML,waypoints,bearing,range,print layout,MIL-STD-2525,MIL-STD-2525E,APP-6,APP-6E,NATO,tactical graphics,control measures,symbology
