Pages: 1
- Sujet précédent - QGIS: CORINE land cover - Découpe et calcul de taux d'occupation - Sujet suivant
#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
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)
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
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
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
Pages: 1
- Sujet précédent - QGIS: CORINE land cover - Découpe et calcul de taux d'occupation - Sujet suivant