# Datenbankabfragen Diese Notiz beschreibt, wie in diesem Projekt lokale Datenbankabfragen ausgefuehrt werden koennen. ## Zugangsdaten Die Verbindungsdaten liegen in: - `config/database.php` Dort stehen `host`, `dbname`, `user`, `pass` und `charset`. ## Empfohlener Weg Am einfachsten ist eine kurze PHP-Datei oder ein kurzes PHP-Skript, das die vorhandene Projektkonfiguration verwendet. Beispiel: ```php PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ] ); $stmt = $pdo->query("SELECT id, mp_number, designation_text FROM minorplanets_mpc WHERE mp_number = 1 LIMIT 1"); $row = $stmt->fetch(); echo json_encode($row, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); ``` ## Ausfuehrung Wenn `php` nicht im Systempfad liegt, kann die lokale `php.exe` direkt verwendet werden. Beispiel von diesem Rechner: ```powershell C:\laragon\bin\php\php-8.4.5-nts-Win32-vs17-x64\php.exe .codex-temp\check_defaults.php ``` ## Praktische Beispielabfragen `Ceres` pruefen: ```sql SELECT id, mp_number, designation_text, desig_packed FROM minorplanets_mpc WHERE mp_number = 1 LIMIT 1; ``` `Halley` pruefen: ```sql SELECT id, designation_and_name, orbit_type FROM comets_mpc WHERE designation_and_name LIKE '%Halley%' ORDER BY designation_and_name ASC, id ASC LIMIT 10; ``` ## Hinweise - Temporaere Pruefskripte am besten in `.codex-temp/` anlegen und danach wieder loeschen. - Fuer Projektcode immer die vorhandene `config/database.php` verwenden und keine Zugangsdaten hart in Dateien eintragen. - Wenn nur geprueft werden soll, reichen `SELECT`-Abfragen ohne schreibende Operationen. ## Raumsondenbahnen Die Bahndaten fuer `Voyager 1`, `Voyager 2` und `New Horizons` koennen ueber das Importskript direkt aus der `JPL Horizons API` in die Tabelle `spacecraft_tracks` geschrieben werden: ```powershell C:\laragon\bin\php\php-8.4.5-nts-Win32-vs17-x64\php.exe scripts\import\import_spacecraft_tracks.php ``` Die Visualisierung in `public/solarsystem.php` liest diese Daten direkt aus der Datenbank. ### Horizons-Abfragen Die Quelldaten fuer die Datenbank stammen aus der `JPL Horizons API`: - Basis-URL: `https://ssd.jpl.nasa.gov/api/horizons.api` - Format: `format=json` - Ephemeridentyp: `EPHEM_TYPE='VECTORS'` - Zentrum: `CENTER='500@10'` fuer sonnenzentrierte Vektoren - Referenzsystem: `REF_SYSTEM='ICRF'` - Referenzebene: `REF_PLANE='ECLIPTIC'` - Vektortabelle: `VEC_TABLE='2'` - Korrektur: `VEC_CORR='NONE'` - Einheiten: `OUT_UNITS='KM-S'` - Zeittyp: `TIME_TYPE='TDB'` - CSV-Ausgabe: `CSV_FORMAT='YES'` Verwendete Objekt-IDs: - `Voyager 1` = `COMMAND='-31'` - `Voyager 2` = `COMMAND='-32'` - `New Horizons` = `COMMAND='-98'` ### Abfragestrategie Das Importskript verwendet fuer jede Mission zwei Bereiche: - `1 d` Schrittweite, solange die Sonde noch innerhalb der aeusseren Planetenbahnen liegt - danach `1 mo` Schrittweite fuer den restlichen Langzeitverlauf Aktuell verwendete Grenzen: - `Voyager 1`: taeglich bis `1989-12-05 14:00:00` - `Voyager 2`: taeglich bis `1993-03-20 16:29:00` - `New Horizons`: taeglich bis `2017-10-19 19:52:00` ### Beispiel einer monatlichen Abfrage Beispiel fuer `Voyager 1`: ```text https://ssd.jpl.nasa.gov/api/horizons.api?format=json&COMMAND='-31'&OBJ_DATA='NO'&MAKE_EPHEM='YES'&EPHEM_TYPE='VECTORS'&CENTER='500@10'&REF_SYSTEM='ICRF'&REF_PLANE='ECLIPTIC'&VEC_TABLE='2'&VEC_CORR='NONE'&OUT_UNITS='KM-S'&TIME_TYPE='TDB'&START_TIME='1977-09-05 14:00:00'&STOP_TIME='2046-04-12 00:00:00'&STEP_SIZE='1 mo'&CSV_FORMAT='YES' ``` Das liefert den Block zwischen `$$SOE` und `$$EOE`. Daraus werden pro Zeile diese Werte gelesen: - `jd_tdb` - `date_tdb` - `x_km`, `y_km`, `z_km` - `vx_km_s`, `vy_km_s`, `vz_km_s` `distance_km` und `distance_au` werden danach lokal berechnet. ### Einzelabfrage fuer ein exaktes Datum Wenn fuer das Ende noch ein exakter einzelner Zeitpunkt benoetigt wird, verwenden wir statt `START_TIME` / `STOP_TIME` / `STEP_SIZE` eine `TLIST`-Abfrage. Beispiel: ```text https://ssd.jpl.nasa.gov/api/horizons.api?format=json&COMMAND='-31'&OBJ_DATA='NO'&MAKE_EPHEM='YES'&EPHEM_TYPE='VECTORS'&CENTER='500@10'&REF_SYSTEM='ICRF'&REF_PLANE='ECLIPTIC'&VEC_TABLE='2'&VEC_CORR='NONE'&OUT_UNITS='KM-S'&TIME_TYPE='TDB'&TLIST='2046-04-12 00:00:00'&CSV_FORMAT='YES' ``` ### Praktische Hinweise - Die API liefert bei Raumsonden oft erst Daten kurz nach dem Start. Wenn eine Fehlermeldung wie `No ephemeris prior to ...` kommt, muss die Startzeit entsprechend angepasst werden. - Fuer die Darstellung in `public/solarsystem.php` muessen die Daten in derselben Ebene wie das restliche Sonnensystem liegen. Deshalb verwenden wir hier bewusst `REF_PLANE='ECLIPTIC'`. - Fuer die aktive Anzeige werden keine CSV-Dateien mehr benoetigt. Massgeblich ist die Tabelle `spacecraft_tracks`.