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:
@@ -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) + '°<br>' +
|
||||
'HDG: ' + (best.heading||'?') + '°</div>',
|
||||
});
|
||||
'HDG: ' + (best.heading||'?') + '°</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) + '°</div>';
|
||||
}
|
||||
}).catch(function(){});
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren