Militaerschiff-Datenbank mit Bildern + Klassifizierung

Neue Datei milship_db.py:
- MMSI-Laenderzuordnung (200+ Laendercodes)
- Schiffsklassen-Datenbank (Nimitz, Arleigh-Burke, Gorshkov,
  Type 052D, Queen Elizabeth, F125, Charles de Gaulle)
- Bilder aus Wikimedia Commons (frei lizenziert)
- Klassifizierung nach MMSI-Prefix + Schiffsname

Klick auf Militaerschiff zeigt:
- Foto der Schiffsklasse (wenn verfuegbar)
- Klassenname und Schiffstyp
- Herkunftsland (aus MMSI)
- MMSI, SOG, COG, Heading

API: GET /api/ships/military liefert alle Militaerschiffe
mit Klassifizierung und Bild-URLs.
Dieser Commit ist enthalten in:
Claude Dev
2026-03-24 23:27:32 +01:00
Ursprung 4b731823e6
Commit bfa74ec992
3 geänderte Dateien mit 243 neuen und 5 gelöschten Zeilen

Datei anzeigen

@@ -7,6 +7,7 @@ import time
import websockets
from fastapi import APIRouter
from milship_db import get_country_from_mmsi, classify_military_ship
logger = logging.getLogger("globe.ships")
router = APIRouter()
@@ -135,6 +136,25 @@ async def get_ships():
ships_out.append(ship)
return {"ships": ships_out, "total": len(ships_out), "connected": _connected}
@router.get("/ships/military")
async def get_military_ships():
"""Alle Militaerschiffe mit Klassifizierung und Bildern."""
mil_ships = []
for s in _store.values():
if s.get("ship_type") == 35 or (isinstance(s.get("ship_type"), int) and 30 <= s["ship_type"] <= 39):
info = classify_military_ship(s.get("mmsi"), s.get("name",""))
mil_ships.append({
"mmsi": s["mmsi"],
"name": s.get("name", ""),
"lat": s["lat"], "lon": s["lon"],
"sog": s["sog"], "cog": s["cog"],
"country": info["country"],
"ship_class": info["class"],
"ship_type_detail": info["type"],
"image": info["image"],
})
return {"ships": mil_ships, "total": len(mil_ships)}
@router.get("/ships/dark")
async def get_dark_ships():
dark = _detect_dark_ships()