Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

GeoRezo vous rend service, faites un don!

Merci à tous pour votre fidélité.

L'équipe GeoRezo

#1 lun. 28 août 2017 20:26

Darwin
Membre
Date d'inscription: 3 oct. 2013
Messages: 30

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 (mer. 06 décembre 2017 18:30)

Hors ligne

 

#2 mar. 29 août 2017 00:52

Thom25
Membre
Date d'inscription: 16 sept. 2013
Messages: 14

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 (mar. 29 août 2017 09:29)

Hors ligne

 

#3 dim. 03 décembre 2017 23:16

Darwin
Membre
Date d'inscription: 3 oct. 2013
Messages: 30

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 (mar. 05 décembre 2017 21:59)

Hors ligne

 

#4 lun. 04 décembre 2017 14:19

MathieuR
Moderateur
Lieu: aix-en-provence
Date d'inscription: 16 févr. 2009
Messages: 1329

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

Hors ligne

 

#5 lun. 04 décembre 2017 22:53

dave31
Membre
Date d'inscription: 17 févr. 2017
Messages: 17

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 mar. 05 décembre 2017 13:44

Darwin
Membre
Date d'inscription: 3 oct. 2013
Messages: 30

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 (mar. 05 décembre 2017 21:56)


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

Hors ligne

 

#7 mar. 05 décembre 2017 14:02

SANTANNA
Membre
Lieu: Angers
Date d'inscription: 18 janv. 2008
Messages: 1711

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 mar. 05 décembre 2017 21:50

Darwin
Membre
Date d'inscription: 3 oct. 2013
Messages: 30

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 (mar. 05 décembre 2017 21:58)

Hors ligne

 

#9 mar. 05 décembre 2017 23:19

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 juil. 2010
Messages: 529

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 mer. 06 décembre 2017 08:39

simon_g
Membre
Lieu: Paris
Date d'inscription: 4 oct. 2006
Messages: 186
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 mer. 06 décembre 2017 14:17

Darwin
Membre
Date d'inscription: 3 oct. 2013
Messages: 30

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 mer. 06 décembre 2017 18:42

Darwin
Membre
Date d'inscription: 3 oct. 2013
Messages: 30

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 (mer. 06 décembre 2017 18:44)

Hors ligne

 

#13 jeu. 07 décembre 2017 16:01

MathieuR
Moderateur
Lieu: aix-en-provence
Date d'inscription: 16 févr. 2009
Messages: 1329

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

Hors ligne

 

Pied de page des forums

Powered by FluxBB

Partagez  |