Fr/TerraGear CORINE

From FlightGear wiki
Jump to navigation Jump to search

1rightarrow.png Consultez la page CORINE à ce sujet.

Construire les scènes Europe avec les données SRTM v4, l'occupation des sols Corine et OpenStreetMap

Ceci a pour but de compléter ou d'ajouter des informations à jour sur le tutoriel Fr/Utiliser_TerraGear.

Note importante : au cas où vous voudriez contribuer aux scènes officielles de FlightGear : certaines sources de données dans ce tutoriel ne sont pas compatibles GPL de FlightGear. Les scènes créées avec les données d'élévation SRTM 4 du CGIAR (pas d'utilisation commerciale) et la cartographie OSM (licence CC-BY-SA) ne peuvent être diffusées sous les termes de la GPL donc, malheureusement ne peuvent apparaître dans les versions officielles des scènes.

Nous supposerons que vous avez terminé de compiler la version Linux de TerraGear. Pour les instructions de compilation et d'installation voir Building terragear-cs in Ubuntu 64. Remplacez tous les chemins là où cela est nécessaire.

Première étape après avoir fini de compiler terragear est d'aller dans le fichier BuildTiles/Main/main.cxx et de s'assurer que CPU rlimit est un grand nombre. Je propose 600000, cela permettra à fgfs-construct de fonctionner pendant pratiquement une semaine. Si vous ne faites pas cette vérification, fgfs-construct risque de se terminer avec un message d'erreur après un délai assez court. Soyez donc certain d'éditer les bonnes valeurs, il y en a deux ensembles l'un sous l'autre, les premières ne sont pas utilisées.

Obtenir les données

I. Elévation

Note : SRTM version 4 est un ensemble de données d'élévation mis à jour et gratuit, proposé par CGIAR. Malheureusement, sa licence est incompatible avec la licence GPL de FlightGear, lorsque vous allez utiliser ces données pour la création de scènes, conservez à l'esprit qu'elles ne pourront pas être ajoutées aux versions officielles des scènes. Lorsque vous souhaitez utiliser des données compatibles GPL, pensez à télécharger les données d'élévation de l'USGS (SRTM 3, version 2_1).

SRTM 4 : téléchargez ce fichier et ouvrez-le dans Google Earth. Dans Lieux Temporaires, sélectionnez Elevation puis choisissez des tuiles de 5x5 degrés ou les sous-tuiles de 1x1 degré. Soyez certain de bien télécharger des fichiers GEOTIFF. Je suggère de faire des zones de 10x10 degrés, soit 4 fichiers. Cela signifie que la compilation des scènes sera plus longue, mais sur l'ensemble le processus est plus efficace. Vous comprendrez pourquoi plus loin.

II. Landmass

Obtenez le landmass VMAP0 ici (v0_landmass) pour les zones de terrain de 10x10 degrés que vous avez sélectionné. Sinon, utilisez d'autres sources pour les zones de landmass (lesquelles ?).

III. Occupation des sols Corine

Obtenez l'ensemble Corine complet ici

IV. Données pour les routes, chemins de fer, et trait de côte

Note : malheureusement, les données OSM ne sont pas encore compatibles avec la licence GPL de FlightGear. Si vous utilisez des données OSM pour la création de scènes, elles ne peuvent pas encore être ajoutées aux versions officielles des scènes. Mais, OSM change sa licence cette année, donc soyez attentifs, car la nouvelle sera compatible avec notre licence GPL.

Téléchargez les fichiers de formes seulement pour les pays à l'intérieur de la tuile 10x10 ici. Vous obtiendrez les routes et les chemins de fer. Pour le trait de côte, rendez-vous sur ce site. Téléchargez les mêmes fichiers pour votre pays, mais seul le trait de côté sera utilisé les ajustements du landmass.

D'autres sources de données peuvent être trouvées ici.

Préparation des données

I. Elévation

En supposant que vous suivez la structure du répertoire de l'article Using TerraGear, lancez srtmchop sur chaque fichier TIF à partir de data/srtm. Il y a un piège ici : work/SRTM-3 doit être nommé exactement comme ça. Sinon,genapts ne trouvera pas l'élévation requise pour les surfaces d'aéroports. Ce nom est codé en dur dans le programme.

Je propose de démarrer srtmchop manuellement pour chaque fichier, pour contrôler s'il y a des erreurs. Ne pas tenir compte des avertissements générés, quelques données d'en-têtes peuvent ne pas être décodées correctement, mais cela n'affectera pas le résultat.

Sur certains fichiers TIF, srtmchop peut se terminer avec un message d'erreur free(). Nous n'avons pas encore déterminé ce qui cause cette erreur uniquement pour certains fichiers. Jusqu'à ce qu'un correctif soit intégré dans GIT, vous pouvez lancer srtmchop au travers de valgrind :

valgrind --leak-check=yes ./srtmchop <file> <output dir> 

Ceci empêchera le programme de quitter et le travail sera fait, mais dix fois plus lentement.

Une fois la génération des fichiers arr terminée, vous pouvez démarrer terrafit.py :

./terrafit.py -m 50 -x 4000 -e 2 work/SRTM-3

II. Aéroports

Voici une étape fastidieuse. genapts doit être lancé pour chaque aéroport dans votre zone de 10x10 degrés. Copiez apt.dat.gz de fgdata/Airports vers data/airports. Décompressez-le. Pour savoir rapidement quels aéroports sont dans votre zone, ouvrez ce fichier dans Google Earth et retirez tous les autres marqueurs, vérifiez aussi Affichage-> Grille dans le menu.

Il est préférable de faire une liste et d'y aller de manière itérative pour chacun des éléments. Assurez-vous que vous avez tous les fichiers .arr et .fit dans work/SRTM-3.

#!/bin/sh
for i in LROP LRBS LRSB
do
   ./genapts --input=./data/airports/apt.dat --work=./work --airport=$i
done

III. Occupation des sols

Ouvrez d'abord les fichiers SRTM comme des couches raster dans QGis. Editez les propriétés du projet, pour paramétrer CRS transformation à on the fly.

SRTM servira d'aide au découpage, et vous pourrez découper les autres couches à la taille voulue.

Éditez les propriétés pour chaque couche SRTM et réglez la transparence bien au dessus de 50% de façon à voir les autres couches. Ensuite, ouvrez chaque fichier de forme Corine et assurez-vous que la couche a réellement des éléments dans votre zone. Toutes les couches n'en ont pas. Utilisez l'outil de sélection pour sélectionner un rectangle autour des limites SRTM. Faites un clic droit sur la couche et choisissez Save Selection As.

Après avoir découpé toutes les couches nécessaires, ouvrez-les de nouveau, et re-projetez les en WGS84. Faites cette opération à partir du menu Vector -> Data management tools-> Export to new projection. Cette étape peut ne pas être nécessaire, comme j'ai pu en déduire du code source, mais il est plus facile de travailler avec toutes les données sur la même projection.
Ensuite, il faudra déplacer tous les fichiers d'une couche dans son propre répertoire dans le répertoire data/shapefiles. Vous pouvez faire correspondre les classes Corine de cette façon également. Par exemple, j'ai mis tous les fichiers de forme pour "Green urban area" dans "DeciduousBroadCover" et ainsi, les zones vertes urbaines sont remplies d'arbres. Vous pouvez mettre plusieurs fichiers de formes à l'intérieur d'un répertoire data/shapefile/*** et ils seront traités avec le même matériau. Vous pouvez aussi être créatif avec les routes également, mettre des polygones Corine pour les routes, les voies chemins de fer etc.. dans GrassCover ou DeciduousForest, les routes OSM auront ainsi une zone autour d'elles remplie d'arbres ou d'herbe.
Un problème que j'ai rencontré avec Corine est que "Continuous urban fabric" qui est lié à Urban n'est pas présent dans ma zone. Pour éviter d'avoir seulement Towns, vous pouvez créer une nouvelle couche dans QGis et ouvrir la couche "Discontinuous urban fabric" (112) en même temps. Choisissez le mode d'édition pour les deux couches, allez dans options et paramétrez le programme pour ne montrer que les vecteurs à partir de la zone choisie. Ensuite, sélectionnez les villes que vous aimeriez voir associées à Urban en maintenant CTRL appuyé. Une fois que cela est réalisé, coupez les polygones sélectionnés, et collez-les dans la nouvelle couche. Vous avez maintenant Town et Urban en même temps.
Vous pouvez maintenant ouvrir les routes et les voies de chemins de fer à partir de OSM et vous assurer que tout est correcte et que CRS est positionné à WSG84.

Une grosse difficulté vient du fait que fgfs-construct ne peut gérer les réseaux de rues volumineux. Pour les éliminer et réduire la complexité des scènes, ouvrez le tableau des attributs du fichier de forme. Cherchez les fonctionnalités du type "residential", "track", "path", "pedestrian", "footway", "service", "steps" et autres fonctionnalités pas importantes. Une fois sélectionnées, effacez ces lignes pour simplifier le fichier de forme. Le fait d'effacer ces fonctionnalités peut prendre du temps si leur nombre est élevé. Pendant ce temps, QGis peut apparaître gelé. Si vous voulez aller plus vite (en particulier dans le cas de gros fichiers de forme), vous pouvez vous servir de l'utilitaire ogr2ogr pour sélectionner uniquement la forme que vous voulez conserver :

./ogr2ogr -where "type in ('motorway','motorway_link','primary','primary_link','secondary','secondary_link','tertiary','tertiary_link','trunk','trunk_link','road','rest_area')" roads_new.shp roads.shp

Essayez de simplifier le fichier de forme Road autant que vous le pouvez, en éliminant les zones à grande densité de rues. Vous diminuerez ainsi votre temps de construction. De toutes façons, les routes seront tout de même simulées par le shader urbain. Si vous devez corriger le trait de côte, ouvrez v0_landmass dans QGis et le shapefile du trait de côte à partir d'OSM. En mode édition, vous pouvez modifier l'occupation du sol pour la rendre conforme avec les données OSM.

Lorsque tous les fichiers de forme sont correctement rangés dans le répertoire, vous pouvez lancer ogr-decode et paramétrer les matériaux. Mais d'abord, vous pourrez avoir à éditer default_priorities.txt et usgsmap.txt dans share/TerraGear pour ajouter les occupations des sols manquantes. Vérifiez avec materials.xml et CORINE to materials mapping


Sur un polygone normal de fichiers de forme, ogr-decode prend les paramètres habituels :

./ogr-decode --max-segment 500 --area-type Default work/Landmass data/shapefiles/v0_landmass

Pour les routes et les voies de chemins de fer, ajoutez une troisième option : --line-width 10. Les rivières seront couvertes par les polys Corine, donc ne vous en faites pas.

Pour éviter l'apparition de mauvaises données qui pourraient entraîner l'arrêt de ogr-decode, vous pouvez corriger le fichier suivant en deux endroits: terragear-cs/src/Lib/Polygon/chop-bin.cxx

Remplacez les lignes 222 et 375 par :
if ( (dx > 2880) || (dy > 1440) )
        //throw sg_exception("something is really wrong in split_polygon()!!!!");
	return;

Les mauvaises données seront ignorées et ogr-decode continuera. Afin d'utiliser au maximum de leur potentiel les données de routes d'OSM, vous pouvez aussi utiliser des commandes proches de requêtes SQL sur les données, en utilisant l'option --where. Par exemple :

 ./ogr-decode --max-segment 500 --line-width 12 --area-type Freeway --where "TYPE=trunk" work/Freeway data/shapefiles/road
./ogr-decode --max-segment 500 --line-width 14 --area-type Freeway --where "TYPE=motorway" work/Freeway data/shapefiles/road
./ogr-decode --max-segment 500 --line-width 10 --area-type Road --where "TYPE=primary" work/Road data/shapefiles/road
./ogr-decode --max-segment 500 --line-width 7 --area-type Road --where "TYPE!=primary AND TYPE!=motorway AND TYPE!=trunk" work/Road data/shapefiles/road

Ce sont les routes et autoroutes proposées pour l'Europe du sud-est. Votre kilométrage local peut varier. Actuellement, Road et Freeway correspondent au même matériau dans materials.xml, mais cela peut changer dans le futur, donc construisez votre scène en gardant cette idée en tête.

Selon les lignes qui ont été marquées dans les données OSM, vous pourriez même extraire des segments de pont et leur assigner une occupation de sol spécifique, pouvant ensuite avoir le modèle physique d'un pont (ceci peut demander un codage en dur pour assurer une orientation convenable).

Afin de procéder aux correspondances de votre propre occupation des sols personnalisée, vous devriez également avoir à éditer les fichiers suivants pour ajouter vos propres données : install/terragear-cs/share/TerraGear/default_priorities.txt and install/terragear-cs/share/TerraGear/usgsmap.txt

(les chemins locaux peuvent varier selon votre installation)

Processus de construction

Si toutes les données ont été préparées sans erreur, vérifiez dans chaque répertoire présent dans /work et effacez les dossiers qui ne correspondent pas à vos tuiles de 10x10 degrés. C'est le moment de lancer fgfs-construct et de générer la scène. Cela peut être très long, en fonction de votre machine, donc lancez-le pendant la nuit.

./fgfs-construct --work-dir=./../work --output-dir=./../output --lon=XX --lat=XX --xdist=5 --ydist=5 \
AirportArea AirportObj BarrenCover BuiltUpCover CropGrassCover \
CropWoodCover DeciduousBroadCover DryCropPastureCover EvergreenBroadCover \
GolfCourse GrassCover HerbTundraCover IrrCropPastureCover Lake Landmass Marsh MixedCropPastureCover\
MixedForestCover OpenMining  \
Road Railroad Rock Sand ShrubCover SRTM-3 Stream Town Urban Freeway

Le processus complet peut prendre 2 à 3 jours. Cependant, il reste possible d'obtenir l'Europe entière en 1 à 2 mois.