banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Pour sa 21ème année, l’association GeoRezo a toujours besoin de vous !

10€ = 1 mois de frais bancaires ; 15€ = 12 mois de nom de domaine ; 30€ = 1 semaine de location des serveurs …

Faire un don 

Retrouver nos membres bienfaiteurs

#1 Wed 21 October 2020 18:31

vince2corte
Juste Inscrit !
Date d'inscription: 21 Oct 2020
Messages: 5

Extraire l'altitude (ou la pente) en X,Y à partir d'un MNT asc

Bonjour à tous,

Je rencontre une difficulté pour exploiter des fichiers MNT asc.
Je travaille actuellement sur un projet de recherche où nous avons besoin de connaître la pente d'un terrain en des cordonnées X et Y issues d'un calcul, donc non prédéterminées. La donnée doit être accessible hors SIG, pour un script de type Shell, PHP, Javascript, Python... qui va alimenter un modèle de calcul numérique.

Ma première approche est simplement de tenter de récupérer l'altitude du point désiré et des points proches pour calculer cette pente.

J'ai commencé par tester l'extension "point sampling tool" dans QGIS (idée trouvée dans ce forum). On peut créer une grille de points prédéfinis dans un shape puis importer tous les points obtenus avec l'extension dans une table PotgreSQL. Ensuite, en récupérant les points proches du XY recherché, et avec une linéarisation, on peut obtenir les altitudes et donc les pentes.
Mais, le territoire concerné étant assez vaste (200 km x 100 km) avec un pas de 5 m, il me semble qu'il n'est pas envisageable de précalculer ces altitudes (800 10^6 points !) et les inclure dans une base de données de type PostgreSQL/PostGIS.

Je suis persuadé que c'est une problème trivial pour quelqu'un d'expérimenté, mais je suis débutant dans l'utilisation de QGIS et des outils de "cartographie" en général mais je me débrouille assez bien avec PostgreSQL/PostGIS (avec des interfaces web que je conçois par exemple).

Auriez vous une idée d'un utilitaire utilisable en shell (genre GDAL), ou dans un autre langage qui permettrait de récupérer ces altitude ou pente directement à partir des fichiers du MNT, ou d'une quelconque transformation de ces fichiers ?

Toute aide sera fortement appréciée.

Merci d'avance à tous !

Dernière modification par vince2corte (Fri 23 October 2020 18:07)

Hors ligne

 

#2 Thu 22 October 2020 09:20

vince2corte
Juste Inscrit !
Date d'inscription: 21 Oct 2020
Messages: 5

Re: Extraire l'altitude (ou la pente) en X,Y à partir d'un MNT asc

Je me réponds à moi-même, ça peut intéresser du monde : j'ai trouvé deux solutions.
1 - Avec QGIS (mais ce n'est pas obligatoire), on peut utiliser gdal2xyz qui convertit la grid MNT en joli fichier csv de format XYZ. Son importation et son utilisation dans PostgreSQL devient alors très facile. Le souci est alors lié à la taille des tables, grosso modo trois fois plus importante que le MNT de départ.
2 - Directement avec PostgreSQL/Postgis : utiliser raster2pgsql pour créer une table contenant les MNT sous forme raster. On peut ensuite effectuer des requêtes (certes un peu plus velues qu'avec le format XYZ) très rapides : 120ms pour trouver une valeur parmi 12x10^6 zones sur un vieil iMac. Et en plus, ce format est très léger (30% de moins que les MNT de départ).
J'ai donc bien évidemment adopté la seconde méthode.

Reste maintenant à calculer les pentes. Je vais chercher s'il n'existe pas une solution toute faîte dans Postgis.

Si vous vous avez une piste, je suis preneur !

Merci d'avance !

Hors ligne

 

#3 Thu 22 October 2020 18:39

vince2corte
Juste Inscrit !
Date d'inscription: 21 Oct 2020
Messages: 5

Re: Extraire l'altitude (ou la pente) en X,Y à partir d'un MNT asc

Postgis est décidément très bien. avec les fonctions ST_Slope et ST_Aspect, j'ai pu calculer des rasters de pente et d'azimut.
Donc tout est précalculé et il n'y a qu'à récupérer des valeurs dans les rasters.

Le seul "souci", c'est que j'ai voulu que les angles soient calculés en RADIAN, mais le paramètre n'est pas pris en compte. C'est en degrés que le resultat est fourni.

Voici les requêtes que j'utilise. Si un expert repère l'erreur, je suis preneur :

Code:

insert into pente (rast) select ST_SLOPE(rast, 1, '32BF', 'RADIANS') from elevation

et

insert into azimut (rast) select ST_Aspect(rast, 1, '32BF', 'RADIANS') from elevation

à part çà, le résultat est tout à fait sympathique quand je le visionne dans QGIS en utilisant les tables PostgreSQL comme des couches.

Merci d'avance !

Hors ligne

 

#4 Fri 23 October 2020 13:07

sylvain poupard
Participant assidu
Date d'inscription: 19 Mar 2009
Messages: 362

Re: Extraire l'altitude (ou la pente) en X,Y à partir d'un MNT asc

Bonjour,

Merci pour vos retours.

Un peu tard peut-être mais côté SIG, dans QGIS, il y a les algorithmes suivants qui correspondraient à vos besoins :
"Prélever des valeurs raster",
"Pente" et
"Exposition".

On a la possibilité de les utiliser en python et d'appeler des données depuis postgre/postgis.

Bon courage

Hors ligne

 

#5 Fri 23 October 2020 18:05

vince2corte
Juste Inscrit !
Date d'inscription: 21 Oct 2020
Messages: 5

Re: Extraire l'altitude (ou la pente) en X,Y à partir d'un MNT asc

J'étais sûr que QGIS pouvait faire ces calculs. Je vais vérifier ça au plus tôt et je fais un retour.
Merci beaucoup pour l'info !

Hors ligne

 

#6 Sat 24 October 2020 17:34

vince2corte
Juste Inscrit !
Date d'inscription: 21 Oct 2020
Messages: 5

Re: Extraire l'altitude (ou la pente) en X,Y à partir d'un MNT asc

Je fais ce retour pour compléter d'avantage le sujet.

J'ai effectué des tests directement dans QGIS comme sylvain poupard me l'a indiqué.
Utiliser Python est encore un peu trop pointu pour moi (même je pense devoir bientôt m'y mettre), mais j'ai effectué les calculs puis les conversions en ASC directement au travers de l'interface graphique de QGIS, et je dois reconnaitre que c'est assez sympathique car les options sont visibles et le résultat peut être contrôlé instantanément.
C'est d'ailleurs grâce à ça que je me suis rendu compte que calculer la pente/l'azimut directement sur le fichier SRTM fourni par la NASA en WGS84 donne des résultats aberrants. Il faut le convertir dans un format m/m. J'ai utilisé le Lambert 93 qui me semblait adapté à ça, et qui de plus est le format de la BD_alti avec lequel je comparais les calculs et tout a bien fonctionné.
Moyennant un import dans PostgreSQL, les données seront exploitables exactement comme je le désirais.

Notez qu'il y a une très sympathique option pour effectuer les calculs sur les bords des "tuiles", ce qui évite la prise de tête pour le faire directement dans PostGIS.

A priori, le sujet est clos. J'espère qu'il pourra être utile aux novices des SIG comme moi.

Bonne lecture !

Dernière modification par vince2corte (Sat 24 October 2020 17:38)

Hors ligne

 

Pied de page des forums

Powered by FluxBB