The Military Symbol Marker System enables placing NATO military symbols (APP-6 compatible) on the map from both the Kotlin Android app and the Python MapDatabaseTools.
-
Symbol Selection Dialog
- FAB with a "+" icon opens the Military Symbol Picker
- Grid layout for easy navigation
- Categories: Ground Units, Equipment, Installations, Activities, Unit Size
- Affiliation selection: Friendly (Blue), Hostile (Red), Neutral (Green), Unknown (Yellow)
-
Symbol Placement
- After selecting a symbol: tap the map to place it
- Automatically stored in the
tactical.locationsdatabase - Stores position, symbol type, affiliation, and optional metadata
-
Symbol Display
- Loads all symbols from the DB when the map initializes
- Renders NATO icons with correct color based on affiliation
- Supports various symbol types: Mortar, Missile, Military Police, Bridge/Engineering, etc.
New fields added to LocationEntity:
symbol_set: symbol category (e.g., "ground_unit", "equipment")symbol_entity: specific entity type (e.g., "infantry", "armor", "mortar")symbol_size: unit size (e.g., "squad", "regiment")symbol_affiliation: affiliation ("friendly", "hostile", "neutral", "unknown")symbol_color: background color based on affiliationsymbol_modifier: additional modifiers (JSON)
These fields have sensible defaults to preserve backwards compatibility with older database versions.
-
marker_icons.py updates
TacticalMarkerStyle.get_style()acceptssymbol_affiliationand related parameters- New supported symbols: mortar, missile, mp, bridge, engineer
- Fully compatible with the Kotlin app symbol set
-
markers_database.py updates
Locationdataclass extended with military symbol fields- Supports both new and legacy fields for backward compatibility
-
location_manager.py updates
- Displays military symbols in lists with correct colors
- Allows filtering by
symbol_affiliationand other symbol fields
- Open the Map tab
- Tap the FAB with the "+" icon to open the picker
- Choose an affiliation (Friendly / Hostile / Neutral / Unknown)
- Choose a category and symbol
- Tap the desired position on the map to place the symbol
- The symbol is saved to the database and will appear on map reloads
Symbols are automatically loaded from the shared database and displayed on Folium/Leaflet maps.
from core.markers_database import Location, MarkersDatabase
db = MarkersDatabase("path/to/markers.db")
# Create a new military symbol
location = Location(
name="Enemy SAM Site",
latitude=42.5,
longitude=41.7,
marker_type="tactical_military",
symbol_entity="sam",
symbol_affiliation="hostile",
symbol_color="#FF4444",
description="SA-10 Battery"
)
db.add_location(location)- Mortar
- Missile (Surface-to-Surface)
- SAM Site
- AAA
- Radar
- Tank
- Headquarters
- Supply
- Bridge / Engineering
- Airfield
- Port
- Military Police (MP)
- Medical
- Engineer
- Signal
- Squad
- Platoon
- Company
- Battalion
- Regiment
Android Vector Drawables in app/src/main/res/drawable/:
ic_mapicon_mortar.xmlic_mapicon_missile.xmlic_mapicon_military_police.xmlic_mapicon_bridging.xmlic_mapicon_size_regiment.xmlic_mapicon_size_squad.xml
Additional symbols can be added by converting NATO APP-6 SVGs to Android Vector Drawables.
- Android App: Fully implemented
- Python Tools: Fully compatible
- Database: Shared SQLite database with new fields (defaults provided for backward compatibility)
- Migration: No migration required—the new fields have default values
- Additional NATO APP-6 symbols
- Symbol editing (change position, type)
- Symbol rotation / heading
- Unit size modifier display
- Mobility / status modifiers
- Combat effectiveness indicator