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
Message posté par : SANTANNA
----------------------------------------
Bonjour,
Il y a cette extension : Buffer Without Overlaps (https://plugins.qgis.org/plugins/buffer_without_overlaps/) et je ne sais pas ce qu'elle vaut mais elle prétend ne pas faire de superposition et elle requiert une plus récente version de QGIS.
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=368314#p368314
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
Message posté par : charles-antoine choquet
----------------------------------------
Bonjour,
Je suis en train de construire un formulaire en vue de réaliser un recensement terrain via Qfield. Le formulaire de la table 'recensement' implique la récupération de données d'adresse issues de la table 'ban géolocalisée'. En passant par une référence de relation je souhaite récupérer les informations "numéro de voie", "rep" et "nom de voie" de la 'ban géolocalisée' dans un rayon de 100 mètres de la position de l'entité créée dans la table recensement.
Ma relation est la suivante :
Couche de référence : 'ban géolocalisée'
Champ référencé : id
Couche référençante : 'recensement'
Champ référençant : id_ban
La relation fonctionne parfaitement. Dans le formulaire, j'ai bien la liste déroulante des "numéro de voie" et "nom de voie" qui me sont proposées sous 'id_ban' paramétré en référence de relation.
La difficulté se situe dans la réalisation d'un filtre spatial.
Je m'interroge sur la méthode pour réaliser ce filtre? En tâtonnant j'ai testé un filtre dans l' "expression d'affichage" de la relation avec l'expression ci-dessous mais sans succès. Il y a bien une (longue) recherche de résultat qui ne donne pas de proposition visible.
-----------------
Code :
case
when array_intersect(array("nom_voie"),aggregate('ban_geo','array_agg',"nom_voie",intersects($geometry,buffer(geometry(@parent),100))))
then concat("numero",' ',"rep",' ',"nom_voie")
end
-----------------
Existe-t-il une méthode pour y parvenir?
Et par ailleurs, ce type de filtre spatial ne serait-il pas trop gourmand en calcul provocant en conséquence une latence d'affichage des résultats et d'autant plus dans l'objectif d'embarquer le formulaire dans Qfield?
J'utilise Qgis 3.34.7
Merci d'avance.
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=368311#p368311
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