4.7 KiB
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
declare(strict_types=1);
$config = require __DIR__ . '/../config/database.php';
$dsn = sprintf(
'mysql:host=%s;dbname=%s;charset=%s',
$config['host'],
$config['dbname'],
$config['charset'] ?? 'utf8mb4'
);
$pdo = new PDO(
$dsn,
$config['user'],
$config['pass'],
[
PDO::ATTR_ERRMODE => 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:
C:\laragon\bin\php\php-8.4.5-nts-Win32-vs17-x64\php.exe .codex-temp\check_defaults.php
Praktische Beispielabfragen
Ceres pruefen:
SELECT id, mp_number, designation_text, desig_packed
FROM minorplanets_mpc
WHERE mp_number = 1
LIMIT 1;
Halley pruefen:
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.phpverwenden 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 in die Tabelle spacecraft_tracks geschrieben werden:
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 bevorzugt aus der Datenbank. Nur wenn dort nichts gefunden wird, faellt sie auf die CSV-Dateien unter docs/ zurueck.
Horizons-Abfragen
Die Quelldaten fuer die CSV-Dateien 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'
Beispiel einer monatlichen Abfrage
Beispiel fuer Voyager 1:
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_tdbdate_tdbx_km,y_km,z_kmvx_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:
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.phpmuessen die Daten in derselben Ebene wie das restliche Sonnensystem liegen. Deshalb verwenden wir hier bewusstREF_PLANE='ECLIPTIC'. - Die erzeugten CSV-Dateien dienen nur noch als Fallback oder Importquelle. Die aktive Anzeige liest bevorzugt aus
spacecraft_tracks.