Message posté par : ilian_mas (ilianmasson(a)gmail.com)
----------------------------------------
Bonjour S.ar,
Il est possible de réaliser ça en utilisant exclusivement les algorithmes proposés dans la
boite à outil "classique" de qgis; cependant c'est surement plus efficace de
passer par du SQL!
Pour cela, il faut deux couches en entrée; une première couche polygonale ayant pour
entités des emprises d'occupation du sol (comprenant dans leur table attributaire un
code correspondant au type d'occupation du sol décrit = "typ_occup"), la
seconde couche étant celles des parcelles (comprenant dans leur table attributaire un ID
="id_parcelle" et un champ correspondant à leur surface totale
"surf_parcelle").
Pour cela, 5 étapes :
1. Intersection
Couche source : la couche d'occupation
Couche de superposition : les parcelles.
On découpe ici les entités d'occupation du sol selon les limites des parcelles.
2. Regrouper.
Couche source : résultat de l'étape 1.
Champs de regroupement : "id_parcelle", "typ_occup"
Le résultat correspond à des entités regroupées par commune et par type d'occupation,
donc le nombre d'entités est égal à la somme des types d'occupation du sol pour
chaque parcelle étudiée.
3. Calculatrice de champ.
Couche source : résultat de l'étape 2.
nom du champ : "surf"
Type / Longueur / précision : comme ça vous arrange (décimal a priori)
Formule : $area (divisé selon l'unité de mesure souhaitée si différente des m²)
On mesure ici la surface de chacune des nouvelles entités regroupant d'occupation du
sol découpées selon les limites des parcelles.
La table en résultat est "longue", on souhaite la pivoter en large en ayant
autant d'entités qu'il y a de parcelles.
4. Agrégation
Couche source : résultat étape 3
Grouper par expression "id_parcelle"
La liste des champs dans le tableau agrégats doit comprendre :
-Expression source : id_parcelle - Fonction d'agrégation : first value - Nom :
id_parcelle
-Expression source : surf_parcelle - Fonction d'agrégation : first value - Nom :
surf_parcelle
-Expression source : surf - Fonction d'agrégation : sum - Nom :
surf_totale_occupation_sol
-Expression source : if ("typ_occup" = 'agriculture', "surf",
0) - Fonction d'agrégation : sum - Nom : surf_agriculture - Bien préciser le type et
la longueur
-Expression source : if ("typ_occup" = 'agriculture', ("surf"
/ "surf_parcelle")*100, 0) - Fonction d'agrégation : sum - Nom :
part_agriculture - Bien préciser le type et la longueur
-Expression source : if ("typ_occup" = 'sylviculture', "surf",
0) - Fonction d'agrégation : sum - Nom : surf_sylviculture- Bien préciser le type et
la longueur
-Expression source : if ("typ_occup" = 'sylviculture', ("surf"
/ "surf_parcelle")*100, 0) - Fonction d'agrégation : sum - Nom :
part_sylviculture- Bien préciser le type et la longueur
etc.
5. Jointure par valeur de champ
Couche source: couche des parcelles de base
Champ de la table : "parcelle_id"
Couche en entrée 2 : résultat de l'étape 4
Champ de la table 2 : "parcelle_id"
Jointure un à un
Ici on rebascule le résultat "tabulaire" de l'étape 4 vers les entités
géométriques/géographiques des parcelles, pour ensuite pouvoir exploiter ces valeurs.
On aboutit donc à une couche de résultat dont les entités sont les parcelles, avec une
table attributaire comprenant :
-l'ID de la parcelle
-la surface totale de la parcelle
-la surface totale occupée par les
-la surface du type 1 d'occupation du sol (ex: agriculture)
-le pourcentage occupé par le type 1 sur la parcelle
-la surface du type 2 d'occupation du sol (ex:sylviculture)
-le pourcentage de sylviculture par rapport à la surface totale)
-etc.
Par ailleurs ces 5 algorithmes sont bien sur disponibles dans le modeleur graphique.
N'hésitez pas si ça n'est pas clair!
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=368296#p368296
Pour y répondre : qgis_fr(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net