Forum Flightgear France

Une communauté prend son envol

Vous n'êtes pas identifié(e).

Annonce

Futur nouvel inscrit, tu dois au préalable lire l'intégralité des 10 articles des règles, s'il te plaît. Tout nouveau compte qui ne respecte pas les règles sera supprimé par l'administration.

#1 8/05/2023 0:35:39

zakharov
Membre historique du forum.
Inscription : 11/09/2005
Messages : 962

LlittleNavMap et base de données FG

Salut,

ça faisait bien longtemps que j'avais installé LittleNavMap et je n'avais absolument plus aucun souvenir de comment je m'y était pris pour avoir toutes les infos nécessaires [1]. Mais il y a quelques semaines une mise à jour vers la version 2.8.10 a tout cassé à cause d'une feature dont je me serai bien passée: «Navigraph selection is now remembered for each simulator selection separately. This means that the Navigraph selection is automatically changed when switching between simulators. The simulator and Navigraph selection is reset on the first startup on update» que je traduis grosso-modo par «vas te faire voir ailleurs si t'as pas X-Plane ou MSFS» (traduction très approximative mais le sens est bien celui-là).

La base de données mise à zéro, et voilà qu'on me demande les chemins vers des X-Plane 18 ou des Flight Simulator machin, un gros message persistant en gros gras rouge pétard: «la base de données est vide», plus possible de faire le moindre plan de vol, la moindre recherche d'un piste, ou d'aéroports voisins, plus rien sauf l'affichage de la carte (ce que fgmap fait très bien tout seul, merci).

Je pouvais pas décemment écrire à l'auteur de LNM sans proposer une solution, lui qui dit que seuls X-Plane, MSFS et des trucs proprio que je connais pas sont supportés. Et puis j'avoue un peu l'agacement de me dire qu'un logiciel libre (LNM est sous licence GPL3) n'est pas au moins un peu compatible avec un autre logiciel libre du même domaine (FG est sous licence GPL2). Bref tout ça ne m'a pas rendu le personnage sympathique.

Aussi j'ai essayé de faire un truc moche en shell et awk qui n'aurait pas du avoir d'autre vocation que de naître dans un cerveau malade, lequel cerveau malade espérait naïvement pouvoir remplir les bases de données correctement à partir des données que nous avons à dispo dans FG, de son intuition en lisant les noms des tables et champs des bases de données de LNM et renifler dans le code source de LNM.

C'est alors que je découvris un poil par hasard juste à côté de LNM sur son dépôt git, un truc au nom évocateur: navdatareader avec une courte description dessous: «Navdatareader is a command line tool that uses the atools fs/bgl and fs/writer to store a full flight simulator scenery database into a relational database like Sqlite or MySql» qui peut se traduire approximativement par «ce ne serait pas une solution à ton problème de bases de données ça ? un outil en ligne de commande pour transformer les données de tes scènes dans le format qui va bien à LNM»

Pas plus de suspense, voici comment faire pour donner à manger à LNM les données qui lui conviennent (explication sous le script qui n'est qu'une doc pour détailler la procédure):

#!/bin/bash

set -e

APROJECTS=APROJECTS
if test -z "$FGROOT"; then
    exit 1
fi

function mkdir_cd () {
    mkdir -p $1
    cd $1
}

mkdir_cd /dev/shm/$APROJECTS

git clone https://github.com/albar965/atools.git
mkdir_cd navdatareader
wget https://github.com/albar965/navdatareader/archive/refs/tags/v1.0.30.tar.gz
tar --strip-components=1 -xzf v1.0.30.tar.gz
rm v1.0.30.tar.gz
cd /dev/shm/$APROJECTS

build () {
    mkdir_cd build-$1-release
    qmake ../$1/$1.pro CONFIG+=release
    make > /dev/null
    cd /dev/shm/$APROJECTS
}
build atools
build navdatareader

mkdir -p ~/.x-plane
touch ~/.x-plane/x-plane_install_11.txt

mkdir -p "X-Plane 11/Custom Scenery"
mkdir -p "X-Plane 11/Resources/default data"
mkdir -p "X-Plane 11/Resources/default scenery/default apt dat/Earth nav data"

gunzip --to-stdout $FGROOT/Airports/apt.dat.gz > "X-Plane 11/Resources/default scenery/default apt dat/Earth nav data/apt.dat"
for data in fix awy nav; do
    gunzip --to-stdout $FGROOT/Navaids/$data.dat.gz > "X-Plane 11/Resources/default data/earth_$data.dat"
done

cat > "X-Plane 11/Custom Scenery/scenery_packs.ini" << eof
I
1000 Version
SCENERY 
eof

sed -i '1s/^/I/;2s/^810 Version/850 Version/' "X-Plane 11/Resources/default data/earth_nav.dat"
sed -i '2s/^640 Version/850 Version/' "X-Plane 11/Resources/default data/earth_awy.dat"
sed -i '2s/^600 Version/850 Version/' "X-Plane 11/Resources/default data/earth_fix.dat"

if ./build-navdatareader-release/navdatareader -f XP11 -b "X-Plane 11"; then
    if test -r navdata.sqlite; then
        if cp navdata.sqlite ~/.config/ABarthel/little_navmap_db/little_navmap_xp11.sqlite; then
            echo données copiées
            echo /dev/shm/$APROJECTS peut être viré sans peur
        else
            echo impossible de copier les données où il faut
        fi
    else
        echo trouve pas navdata.sqlite
    fi
else
    echo erreur
fi

cd /dev/shm

En gros ça récupère les sources, ça compile le bousin [2], ça se prépare pour faire croire au bousin que X-Plane 11 est là, et ça met les fichiers qu'il faut là où il faut et au format qu'il faut, avant de lancer la moulinette.
Et twingo! une base de données toute fraîche (69Mo) avec que des bonnes infos en provenance directe de FG, et LNM qui repart comme avant: recherches OK, les plans de vols nickel, tout bien.

Voilà, tant mieux si ça peut servir à quelqu'un

[1] probablement des trucs moches quand j'ai vu qu'il fallait s'inscrire à des sites commerciaux et faire chauffer la carte bleue juste pour avoir des données dans un [bip] de simulateur sur un petit ordi ! alors que tout est déjà là
[2] j'avais déjà toutes les dépendances (Qt5, qmake au moins probablement liées à l'époque où je compilais LNM moi-même, chose que je ne fais plus)

[edit]j'oubliais ! je colle ici un bout du code que j'avais commencé pour les scripts de population des BDD de LNM (c'est du awk ici, des fonctions pour calculer des distances et des directions)

function degrees_to_radians(degrees) {
    pi = 3.141592653589793
    return (degrees * pi / 180.0);
}

function radians_to_degrees(radians) {
    pi = 3.141592653589793
    return (radians * 180.0 / pi);
}

function asin(x) {
    return atan2(x, sqrt(1-x*x));
}

function haversine(lat1, lon1, lat2, lon2) {
    EARTH_RADIUS_IN_METRES = 6372797;
    deltalat = (lat2 - lat1) / 2.0;
    deltalon = (lon2 - lon1) / 2.0;
    sin1     = sin( degrees_to_radians(deltalat) );
    cos1     = cos( degrees_to_radians(lat1) );
    cos2     = cos( degrees_to_radians(lat2) );
    sin2     = sin( degrees_to_radians(deltalon) );
    x        = sin1*sin1 + cos1*cos2 * sin2*sin2;
    metres   = 2 * EARTH_RADIUS_IN_METRES * asin( sqrt(x) );
    return metres;
}

function heading(lat1, lon1, lat2, lon2) {
    X = cos(lat2) * sin(lon2 - lon1)
    Y = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(lon2-lon1)
    h = atan2(X, Y)
    h = radians_to_degrees(h)
    return h
}

[/edit]

@+
bons vols
zakh

Dernière modification par zakharov (8/05/2023 0:47:09)


le zkv1000
Debian Bookworm sur i7-9750H, 16G, NV GeForce GTX 1660 Ti MaxQ 6Go
FG next compilé à la mano
Joystick TM T. Stick X avec fichier de conf perso

Hors ligne

#2 8/05/2023 18:55:34

f-toro
Administrateur
Lieu : LFLA
Inscription : 16/12/2007
Messages : 3 025

Re : LlittleNavMap et base de données FG

J'ai tout lu, et pas compris grand chose, c'est normal pour mon état de comprenoire.
Mais en tout cas j'ai bien ri lol
Bon zakh c'est zakh, on ne le changera pas, et c'est tant mieux big_smile


André. anciennement taureau89_9
Debian Testing Amd64. CM Sabertooth 990FX, FX8350, 32 Go Ram DDR3 1866 Mhz, GTX 1060 6Go, DD 2To Sata 3, THRUSTMASTER T.Flight StickX, FG 2020.4.0 Git.

Hors ligne

Pied de page des forums