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

@@ -175,15 +175,31 @@ const ShipsLayer = {
var name = best.name || ('MMSI ' + best.mmsi);
var catLabels = { tanker:'Tanker', cargo:'Frachter', passenger:'Passagier', fishing:'Fischerei', military:'Militaer', other:'Sonstige' };
this._viewer.trackedEntity = undefined;
this._viewer.selectedEntity = new Cesium.Entity({
name: name,
description: '<div style="font-family:monospace;font-size:12px;padding:8px;color:' + this._getColor(best.category) + '">' +
var baseHtml = '<div style="font-family:monospace;font-size:12px;padding:8px;color:' + this._getColor(best.category) + '">' +
'<strong>' + name + '</strong><br>' +
'MMSI: ' + (best.mmsi||'?') + '<br>' +
'Typ: ' + (catLabels[best.category] || best.category || '?') + '<br>' +
'SOG: ' + (best.sog||0).toFixed(1) + ' kn | COG: ' + Math.round(best.cog||0) + '&deg;<br>' +
'HDG: ' + (best.heading||'?') + '&deg;</div>',
});
'HDG: ' + (best.heading||'?') + '&deg;</div>';
this._viewer.selectedEntity = new Cesium.Entity({ name: name, description: baseHtml });
// Militaerschiff: Bild + Klassifizierung nachladen
if (best.category === 'military') {
var viewer = this._viewer;
fetch('/api/ships/military').then(function(r){return r.json()}).then(function(data){
var mil = (data.ships||[]).find(function(m){return m.mmsi===best.mmsi});
if (mil && viewer.selectedEntity) {
var imgHtml = mil.image ? '<img src="' + mil.image + '" style="width:100%;max-height:180px;object-fit:cover;border-radius:6px;margin-bottom:8px">' : '';
viewer.selectedEntity.description = '<div style="font-family:monospace;font-size:12px;padding:8px">' +
imgHtml +
'<strong style="color:#ff44ff;font-size:14px">' + (mil.name||name) + '</strong><br>' +
'<span style="color:#ccc">' + mil.ship_class + '</span><br>' +
'<span style="color:#aaa">' + mil.ship_type_detail + '</span><br>' +
'<span style="color:#888">Land: ' + mil.country + '</span><br>' +
'<span style="color:#888">MMSI: ' + best.mmsi + '</span><br>' +
'SOG: ' + (best.sog||0).toFixed(1) + ' kn | COG: ' + Math.round(best.cog||0) + '&deg;</div>';
}
}).catch(function(){});
}
}
},