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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Mon 28 August 2017 20:26

Darwin
Participant occasionnel
Date d'inscription: 3 Oct 2013
Messages: 35

QGIS: CORINE land cover - Découpe et calcul de taux d'occupation

[Résolu]

Bonjour à tous,

J'aimerai calculer les taux d'occupation des sols avec comme base CORINE Land Cover sur un territoire prédéfini et cela à l'aide d'un algorithme créé avec le modeleur graphique. La partie découpe du territoire avec une couche isochrone ne pose pas de problèmes. Là où cela coince c'est après. Je commence par créer une colonne pour calculer l'aire totale du territoire, puis c'est la création d'une nouvelle colonne "Taux".

Et voilà mon problème, j'essaye de calculer la somme des aires en fonction des codes Corinne Land Cover. Pour être plus précis je dois calculer la somme des aires avec comme condition de correspondre à la colonne CODE_12 = 111,112, 121, 131, 133 et 141 (ce qui correspond, dans la nomenclature 1 de CLC, aux surfaces artificialisées). Et recommencer l'opération pour les niveaux 2, 3, 4 et 5 (ce qui correspond aux zones agricoles, forestières, humides et surface en eau).

Merci d'avance pour votre aide.

Dernière modification par Darwin (Wed 06 December 2017 18:30)

Hors ligne

 

#2 Tue 29 August 2017 00:52

Thom25
Participant occasionnel
Date d'inscription: 16 Sep 2013
Messages: 31

Re: QGIS: CORINE land cover - Découpe et calcul de taux d'occupation

Bonjour,

Fusionne les entités qui sont de même nomenclature niveau 1 CLC, calcule leurs aires dans un champs, divise par l'aire totale de ton territoire et tu devrais avoir ton taux d'occupation des sols.

Thomas

Dernière modification par Thom25 (Tue 29 August 2017 09:29)

Hors ligne

 

#3 Sun 03 December 2017 23:16

Darwin
Participant occasionnel
Date d'inscription: 3 Oct 2013
Messages: 35

Re: QGIS: CORINE land cover - Découpe et calcul de taux d'occupation

Pour le calcul du taux d'occupation des sols avec comme base Corine Land Cover 2012 et sa nomenclature 1 il m'a fallu :

Créer un champ
AREA_TOTAL
Nombre décimal
Longueur 10
Précision 2

Code:

sum (''AREA_HA'')

Créer un champ
CODE_1
Nombre entier
L 10

Code:

CASE
WHEN "CODE_12"='111' THEN '1'
WHEN "CODE_12"='112' THEN '1'
WHEN "CODE_12"='121' THEN '1'
WHEN "CODE_12"='122' THEN '1'
WHEN "CODE_12"='131' THEN '1'
WHEN "CODE_12"='133' THEN '1'
WHEN "CODE_12"='142' THEN '1'
END

Créer un champ
CODE_2
Nombre entier
L 10

Code:

CASE
WHEN "CODE_12"='211' THEN '2'
WHEN "CODE_12"='221' THEN '2'
WHEN "CODE_12"='222' THEN '2'
WHEN "CODE_12"='231' THEN '2'
WHEN "CODE_12"='242' THEN '2'
WHEN "CODE_12"='243' THEN '2'
END

Créer un champ
CODE_3
Nombre entier
L 10

Code:

CASE
WHEN "CODE_12"='311' THEN '3'
WHEN "CODE_12"='312' THEN '3'
WHEN "CODE_12"='313' THEN '3'
WHEN "CODE_12"='321' THEN '3'
WHEN "CODE_12"='322' THEN '3'
WHEN "CODE_12"='323' THEN '3'
WHEN "CODE_12"='324' THEN '3'
WHEN "CODE_12"='333' THEN '3'
END

Créer un champ
CODE_5
Nombre entier
L 10

Code:

CASE
WHEN "CODE_12"='512' THEN '5'
END

Créer un champ
AREA_1
Nombre décimal
L 10
P 1

Code:

CASE
WHEN  "CODE_1"='1' THEN  "AREA_HA"
END

Créer un champ
AREA_2
Nombre décimal
L 10
P 1

Code:

CASE
WHEN  "CODE_2"='2' THEN  "AREA_HA"
END

Créer un champ
AREA_3
Nombre décimal
L 10
P 1

Code:

CASE
WHEN  "CODE_3"='3' THEN  "AREA_HA"
END

Créer un champ
AREA_5
Nombre décimal
L 10
P 1

Code:

CASE
WHEN  "CODE_5"='5' THEN  "AREA_HA"
END

Créer un champ
TAUX_1
Nombre décimal
L 10
P1

Code:

CASE
WHEN  "CODE_1"='1' THEN   sum(  "AREA_1"  )  /  "AREA_TOTAL"  * 100
END

Créer un champ
TAUX_2
Nombre décimal
L 10
P1

Code:

CASE
WHEN  "CODE_2"='2' THEN   sum(  "AREA_2"  )  /  "AREA_TOTAL"  * 100
END

Créer un champ
TAUX_3
Nombre décimal
L 10
P1

Code:

CASE
WHEN  "CODE_3"='3' THEN   sum(  "AREA_3"  )  /  "AREA_TOTAL"  * 100
END

Créer un champ
TAUX_5
Nombre décimal
L 10
P1

Code:

CASE
WHEN  "CODE_5"='5' THEN   sum(  "AREA_5"  )  /  "AREA_TOTAL"  * 100
END

Créer un champ
NOM
Texte
L 50

Code:

CASE
WHEN "CODE_12"='111' THEN 'Territoire artificialisé'
WHEN "CODE_12"='112' THEN 'Territoire artificialisé'
WHEN "CODE_12"='121' THEN 'Territoire artificialisé'
WHEN "CODE_12"='122' THEN 'Territoire artificialisé'
WHEN "CODE_12"='131' THEN 'Territoire artificialisé'
WHEN "CODE_12"='133' THEN 'Territoire artificialisé'
WHEN "CODE_12"='142' THEN 'Territoire artificialisé'
WHEN "CODE_12"='211' THEN 'Territoire agricole'
WHEN "CODE_12"='221' THEN 'Territoire agricole'
WHEN "CODE_12"='222' THEN 'Territoire agricole'
WHEN "CODE_12"='231' THEN 'Territoire agricole'
WHEN "CODE_12"='242' THEN 'Territoire agricole'
WHEN "CODE_12"='243' THEN 'Territoire agricole'
WHEN "CODE_12"='311' THEN 'Forêt'
WHEN "CODE_12"='312' THEN 'Forêt'
WHEN "CODE_12"='313' THEN 'Forêt'
WHEN "CODE_12"='321' THEN 'Forêt'
WHEN "CODE_12"='322' THEN 'Forêt'
WHEN "CODE_12"='323' THEN 'Forêt'
WHEN "CODE_12"='324' THEN 'Forêt'
WHEN "CODE_12"='333' THEN 'Forêt'
WHEN "CODE_12"='512' THEN 'Surface en eau'
END

P.S. Si quelqu'un a une solution plus courte je suis preneur…

Dernière modification par Darwin (Tue 05 December 2017 21:59)

Hors ligne

 

#4 Mon 04 December 2017 14:19

MathieuR
Membre
Lieu: aix-en-provence
Date d'inscription: 16 Feb 2009
Messages: 1690
Site web

Re: QGIS: CORINE land cover - Découpe et calcul de taux d'occupation

Bonjour,

La découpe, a priori, c'est OK.

Ce que vous voulez c'est attribuer de nouvelles classes à vos valeurs.

L'expression citée précédemment pose-t-elle problème ?

Vous pouvez créer un champ virtuel au lieu d'un vrai champ et réaliser les calculs de surface par catégorie avec Group Stats


geodata au cerema et petits billets en géomatique

Hors ligne

 

#5 Mon 04 December 2017 22:53

dave31
Participant actif
Date d'inscription: 17 Feb 2017
Messages: 82

Re: QGIS: CORINE land cover - Découpe et calcul de taux d'occupation

Bonsoir,

Avec 2 champs.
Créer le champ NOM comme dans l'exemple donné.
Créer le champ TAUX avec l’expression suivante :

Code:

SUM (“AREA_HA“, GROUP_BY:=“NOM“) / SUM (“AREA_HA“) * 100

Hors ligne

 

#6 Tue 05 December 2017 13:44

Darwin
Participant occasionnel
Date d'inscription: 3 Oct 2013
Messages: 35

Re: QGIS: CORINE land cover - Découpe et calcul de taux d'occupation

Merci beaucoup,

En effet cela raccourci le programme, voilà donc à quoi j'arrive maintenant :

Créer un champ
NOM
Texte
L 50

Code:

CASE
WHEN "CODE_12"='111' THEN 'Territoire artificialisé'
WHEN "CODE_12"='112' THEN 'Territoire artificialisé'
WHEN "CODE_12"='121' THEN 'Territoire artificialisé'
WHEN "CODE_12"='122' THEN 'Territoire artificialisé'
WHEN "CODE_12"='131' THEN 'Territoire artificialisé'
WHEN "CODE_12"='133' THEN 'Territoire artificialisé'
WHEN "CODE_12"='142' THEN 'Territoire artificialisé'
WHEN "CODE_12"='211' THEN 'Territoire agricole'
WHEN "CODE_12"='221' THEN 'Territoire agricole'
WHEN "CODE_12"='222' THEN 'Territoire agricole'
WHEN "CODE_12"='231' THEN 'Territoire agricole'
WHEN "CODE_12"='242' THEN 'Territoire agricole'
WHEN "CODE_12"='243' THEN 'Territoire agricole'
WHEN "CODE_12"='311' THEN 'Forêts et milieux semi-naturels'
WHEN "CODE_12"='312' THEN 'Forêts et milieux semi-naturels'
WHEN "CODE_12"='313' THEN 'Forêts et milieux semi-naturels'
WHEN "CODE_12"='321' THEN 'Forêts et milieux semi-naturels'
WHEN "CODE_12"='322' THEN 'Forêts et milieux semi-naturels'
WHEN "CODE_12"='323' THEN 'Forêts et milieux semi-naturels'
WHEN "CODE_12"='324' THEN 'Forêts et milieux semi-naturels'
WHEN "CODE_12"='333' THEN 'Forêts et milieux semi-naturels'
WHEN "CODE_12"='512' THEN 'Surfaces en eau'
END

Créer un champ
TAUX
Nombre décimal
L 10
P 1

Code:

sum ( "AREA_HA",group_by:= "NOM" ) / sum ( "AREA_HA" ) * 100

Créer un champ
AREA_TOTAL
Nombre décimal
L 10
P 1

Code:

sum ( "AREA_HA",group_by:= "NOM" )

En pièce jointe le résultat…

Dernière modification par Darwin (Tue 05 December 2017 21:56)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#7 Tue 05 December 2017 14:02

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3945

Re: QGIS: CORINE land cover - Découpe et calcul de taux d'occupation

Bonjour,
vous pouvez aussi raccourcir la partie "case when" en une ligne par type, en utilisant des fonctions qui récupèrent juste le premier chiffre du code: voir des fonctions de manipulation de chaînes tels que left ou substr par ex

PS: vous pouvez utiliser le bouton Code pour ajouter des balises permettant  une mise en forme adaptée à vos bouts de code et une facilité de lecture.

Hors ligne

 

#8 Tue 05 December 2017 21:50

Darwin
Participant occasionnel
Date d'inscription: 3 Oct 2013
Messages: 35

Re: QGIS: CORINE land cover - Découpe et calcul de taux d'occupation

Merci Santanna pour la piste…

Existent-il un mémento un peu poussé (c'est-à-dire avec des exemples complets) sur les différentes fonctions ?

En effet le fonction left m'intéresse, mais je ne sais pas encore comment l'utiliser.

Dernière modification par Darwin (Tue 05 December 2017 21:58)

Hors ligne

 

#9 Tue 05 December 2017 23:19

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1159

Re: QGIS: CORINE land cover - Découpe et calcul de taux d'occupation

Salut,

si je ne m'abuse dans la fenêtre du milieu de l'éditeur d'expression,
quand une fonction est sélectionnée, une description s'affiche
et est généralement accompagnée d'exemple.

Hors ligne

 

#10 Wed 06 December 2017 08:39

simon_g
Participant assidu
Lieu: Paris
Date d'inscription: 4 Oct 2006
Messages: 195
Site web

Re: QGIS: CORINE land cover - Découpe et calcul de taux d'occupation

LEFT simplement :

Code:

left( "CODE_12" , 1)

L'opérateur LIKE peut aussi être avantageusement utilisé pour simplifier la nomenclature ...

CASE
WHEN "CODE_12" LIKE '1%' THEN 'Territoire artificialisé'
WHEN "CODE_12" LIKE '2%' THEN 'Territoire agricole'
WHEN "CODE_12" LIKE '3%' THEN 'Forêts et milieux semi-naturels'
WHEN "CODE_12" LIKE '5%' THEN 'Surfaces en eau'
END

Hors ligne

 

#11 Wed 06 December 2017 14:17

Darwin
Participant occasionnel
Date d'inscription: 3 Oct 2013
Messages: 35

Re: QGIS: CORINE land cover - Découpe et calcul de taux d'occupation

Merci pour vos différentes contributions :

Sur mon éditeur d'expression, la partie à droite avec les explications avait disparu, donc en rétrécissant les parties 1 et 2 la troisième, avec les exemples de fonctions est réapparue.

La fonction Like est en effet bien appréciable ici.

Hors ligne

 

#12 Wed 06 December 2017 18:42

Darwin
Participant occasionnel
Date d'inscription: 3 Oct 2013
Messages: 35

Re: QGIS: CORINE land cover - Découpe et calcul de taux d'occupation

Pour que le rendu soit parfait est-il possible sur le code suivant :

Code:

sum ( "AREA_HA",group_by:= "NOM" )

d'ajouter un séparateur de milliers ?

J'ai essayé format_number sans succès.

Dernière modification par Darwin (Wed 06 December 2017 18:44)

Hors ligne

 

#13 Thu 07 December 2017 16:01

MathieuR
Membre
Lieu: aix-en-provence
Date d'inscription: 16 Feb 2009
Messages: 1690
Site web

Re: QGIS: CORINE land cover - Découpe et calcul de taux d'occupation

Bonjour,

Ce post parle du séparateur de milliers :
https://gis.stackexchange.com/questions … eric-field

Il propose de créer une fonction personnalisée pour formater ainsi les nombres


geodata au cerema et petits billets en géomatique

Hors ligne

 

#14 Thu 03 January 2019 15:32

Darwin
Participant occasionnel
Date d'inscription: 3 Oct 2013
Messages: 35

Re: QGIS: CORINE land cover - Découpe et calcul de taux d'occupation

Bonjour à tous et bonne année 2019,

Je relance ce sujet car j'ai eu quelques difficultés avec le séparateur de millier et la fonction qui y correspond

Code:

format_number(

.

Par rapport à ma demande (cf. ci-dessus) je n'arrive pas à créer des champs dans la table attributaire avec cette fonction.

Par contre elle fonctionne très bien dans le composeur. En effet lorsque l'on tape cette expression dans Les propriétés de l'objet / Propriétés principales / Attributs/ Epsilon dans un des champs / Calculateur d'expression

Code:

format_number("NOM du champ",0)

On indique qu'il faut présenter la valeur nombre d'un champ avec un séparateur de millier et on choisit le chiffre après la virgule que l'on désire ici aucun.

Voilà, en espérant avoir été clair…

Dernière modification par Darwin (Sun 06 January 2019 13:51)

Hors ligne

 

Pied de page des forums

Powered by FluxBB