#1 Fri 19 May 2017 11:39
- Ben14
- Participant occasionnel
- Date d'inscription: 19 May 2017
- Messages: 11
QGIS: Recherche solution pour requête spatiale
Bonjour à tous-t-es,
Je travaille sur support SIG et je voudrais savoir si il existe une solution pour sélectionner des polygones en fonction de la somme de leurs surfaces et par rapport à leur distance à un point central géoréférencé.
Je m'explique, en gros, je place un point au centre d'une couche vecteur commune, (département, région, etc), ou en utilisant son centroide, et je voudrais réaliser une sélection automatique de x surfaces agricoles (x = la somme d'une surface voulue) et qui soient au plus proche du point central de ma couche communale. Soit une sélection de type buffer dont le rayon serait déterminé par la recherche des polygones de type RPG jusqu'à ce que je trouve x hectares de surfaces agricoles.
Je le fais manuellement jusque là en sélectionnant à taton mes parcelles autour du centre bourg et en m'éloignant progressivement jusqu'à obtenir ma surface voulue, mais c'est ultra chronophage. Je voudrais donc automatiser cette démarche.
Je voulais donc savoir si cette fonction/automatisation existe, ou si il est possible/réalisable de la créer, si des cartes en ligne proposent ce genre de modélisation, ou si vous avez des pistes de réflexion pour trouver une solution?
Vous me serez d'un secours énorme x)
Hors ligne
#2 Fri 19 May 2017 12:50
- Pascal Boulerie
- Participant assidu
- Lieu: France
- Date d'inscription: 12 Sep 2005
- Messages: 2947
- Site web
Re: QGIS: Recherche solution pour requête spatiale
Dans quel logiciel SIG ? (QGIS ? autre ?)
Qui utilise quel langage pour automatiser les manipulations internes à ce logiciel ? (python ? autre ?)
Faire une requête en recherchant par recherche dichotomique ?
« L'État est désormais quasi déliquescent. » (José Cohen-Aknine, ingénieur X-Ponts, IGPEF, dans Déliquescence et renaissance de l'État.)
Hors ligne
#3 Fri 19 May 2017 14:02
- Ben14
- Participant occasionnel
- Date d'inscription: 19 May 2017
- Messages: 11
Re: QGIS: Recherche solution pour requête spatiale
J'utilise QGIS en effet
par dichotomie?
Hors ligne
#4 Fri 19 May 2017 14:23
- Pascal Boulerie
- Participant assidu
- Lieu: France
- Date d'inscription: 12 Sep 2005
- Messages: 2947
- Site web
Re: QGIS: Recherche solution pour requête spatiale
si la distance d1 donne comme résultat une superficie S1 trop petite,
mais que la distance d2 > d1 aboutit pour résultat à une superficie S2 trop grande,
essayer alors la distance d3 - entre d1 et d2 * - pour essayer de s'approcher de la surface S voulue.
(et continuer par itérations successives jusqu'à arriver dans la zone de "tolérance", à une superficie s0 près, voulue entre S - s0 et S + s0 ...)
https://fr.wikipedia.org/wiki/Dichotomie
* ça peut être une moyenne arithmétique ou autre.
« L'État est désormais quasi déliquescent. » (José Cohen-Aknine, ingénieur X-Ponts, IGPEF, dans Déliquescence et renaissance de l'État.)
Hors ligne
#5 Mon 22 May 2017 09:20
- Ben14
- Participant occasionnel
- Date d'inscription: 19 May 2017
- Messages: 11
Re: QGIS: Recherche solution pour requête spatiale
Humm, c'est un peu du chinois pour moi là...
Je vois l'idée mais pour faire la manipulation là je vois pas du tout ...
Hors ligne
#6 Mon 22 May 2017 11:13
Re: QGIS: Recherche solution pour requête spatiale
Bonjour Ben14 et bienvenue sur Georezo !
Je ne voit pas comment automatiser la chose avec QGIS (avec du shp en fait), sauf à programmer une routine en python par exemple.
L'approche dichotomique sera la plus rapide en terme d'étapes de calcul mais va nécessiter autant de de créations de buffer et d'intersection dans QGIS et donc "ultra chronophage". J'imagine que vous devez répéter la chose sur un nombre conséquent de communes ?
L'emploi d'une base de données Postgis aiderait grandement. Selon le temps dont vous disposer il peut être intéressant de creuser cette piste.
L'investissement en terme de temps sera vite rentable. Il sera alors possible de faire la somme cumulée des surfaces des îlots PAC par distance croissante au centre de la commune de la commune.
Mathieu BOSSAERT
Association GeoRezo
Hors ligne
#7 Mon 22 May 2017 11:38
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3199
- Site web
Re: QGIS: Recherche solution pour requête spatiale
Bonjour,
Je pense que vous n'abordez pas le problème selon le bon angle et j'irais même plus loin en disant que vous ne conceptualisez pas vraiment bien ce que vous cherchez, preuves à l'appui de votre formulation :
en gros, je place un point au centre d'une couche vecteur commune, (département, région, etc), ou en utilisant son centroide, et je voudrais réaliser une sélection automatique de x surfaces agricoles (x = la somme d'une surface voulue) et qui soient au plus proche du point central de ma couche communale. Soit une sélection de type buffer dont le rayon serait déterminé par la recherche des polygones de type RPG jusqu'à ce que je trouve x hectares de surfaces agricoles.
Expliquez nous le quoi faire de façon claire et peut-être que nous pourrons trouver comment faire. Par exemple :
une sélection automatique de x surfaces agricoles (x = la somme d'une surface voulue)
Additionner n surfaces de Si m² donne Surface totale = Somme_pour_i_de_1_à_n(Si) qui est exprimée en mètres carrés
ce qui est complétement différent de n qui est une nombre de polygones.
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne
#8 Mon 22 May 2017 11:54
- Pascal Boulerie
- Participant assidu
- Lieu: France
- Date d'inscription: 12 Sep 2005
- Messages: 2947
- Site web
Re: QGIS: Recherche solution pour requête spatiale
ça doit être une étude de remembrement agricole pour une SAFER ? :-)
(pour optimiser les déplacements des agriculteurs dans un souci de proximité, histoire qu'un gars n'ait pas à cultiver à 10 km de sa ferme un tout petit bout de parcelle)
Le mieux sera qu'il fasse un petit crobard pour qu'il explique si son problème est bien celui que MathieuB a compris (à savoir s'il va falloir faire de l' intersection et donc des découpages de parcelles et des échanges de parcelles découpées).
« L'État est désormais quasi déliquescent. » (José Cohen-Aknine, ingénieur X-Ponts, IGPEF, dans Déliquescence et renaissance de l'État.)
Hors ligne
#9 Mon 22 May 2017 14:24
- Ben14
- Participant occasionnel
- Date d'inscription: 19 May 2017
- Messages: 11
Re: QGIS: Recherche solution pour requête spatiale
Non en fait c'est pour des calculs d'empreintes alimentaires de communes
Hors ligne
#10 Mon 22 May 2017 14:29
- Ben14
- Participant occasionnel
- Date d'inscription: 19 May 2017
- Messages: 11
Re: QGIS: Recherche solution pour requête spatiale
L'emploi d'une base de données Postgis aiderait grandement. Selon le temps dont vous disposer il peut être intéressant de creuser cette piste.
L'investissement en terme de temps sera vite rentable. Il sera alors possible de faire la somme cumulée des surfaces des îlots PAC par distance croissante au centre de la commune de la commune.
Merci de ta réponse,
Qu'est-ce qu'une bd PostGis?
Et comment faire cette manipulation?
Hors ligne
#11 Mon 22 May 2017 15:16
Re: QGIS: Recherche solution pour requête spatiale
Non en fait c'est pour des calculs d'empreintes alimentaires de communes
Pourrais tu préciser ton besoin, en réponse à ChristopheV, qui aura peut-être d'autres solutions.
Voici une définition non académique et incomplète de ce qu'est PostGIS :
Postgis est une base de données relationnelle disposant de types de données géométriques (points, lignes et polygones) de fonctions et d'opérateurs et d'opérateurs logiques pour ces types géométriques, permettant de faire ce type de requêtes, dans le language SQL
SELECT communes.nom
FROM communes JOIN rivieres ON st_interescts(commune.geom, rivieres.geom)
WHERE rivieres.nom = 'Le Lez' AND population > 10000
Ce qui répond en à la question en Français :
Quel est le nom des communes qui sont en intersection avec une rivière nommée 'le Lez' et dont la population est supérieure à 10000 habitants.
Ci-dessous un lien vers une introduction aux bases de données spatiales :
http://www.sigterritoires.fr/index.php/ … roduction/
Mathieu BOSSAERT
Association GeoRezo
Hors ligne
#12 Mon 22 May 2017 15:24
- Ben14
- Participant occasionnel
- Date d'inscription: 19 May 2017
- Messages: 11
Re: QGIS: Recherche solution pour requête spatiale
J'essaye de redéfinir mon problème.
Je voudrais trouver un moyen de faire une sélection automatique d'îlots agricoles à partir d'une distance.
En considérant par exemple que pour la commune de Paris j'ai besoin de 100 ha (lol), je voudrais sélectionner les îlots dans ou les plus proches de Paris jusqu'à obtenir 100 ha.
100 ha équivaudrait à l'empreinte alimentaire de Paris.
Et je voudrais que cette sélection soit automatisée pour pouvoir le faire pour toutes les communes.
Je sais pas si c'est plus claire?
Hors ligne
#13 Mon 22 May 2017 17:05
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3199
- Site web
Re: QGIS: Recherche solution pour requête spatiale
Bonjour,
Je raisonnerais comme suit : déterminer les surface rpg incluses dans ma commune.
union des polygones rgp contigus, calcul de leur surface et de la somme.
Ensuite calcul de la dsitance.
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne
#14 Mon 22 May 2017 17:23
- Ben14
- Participant occasionnel
- Date d'inscription: 19 May 2017
- Messages: 11
Re: QGIS: Recherche solution pour requête spatiale
Pour l'instant j'ai fais ça justement:
Calcul des RPG communaux, et après je sélectionne jusqu'à obtenir le résultat souhaité. Mais je fais ça manuellement, l'idée serait de l'automatiser
Hors ligne
#15 Tue 23 May 2017 15:19
Re: QGIS: Recherche solution pour requête spatiale
Bonjour,
Pour te montrer ce que ça peut donner en SQL (on s'éloigne de QGIS pour le traitement), voici une requête SQL qui retourne, pour la commune de CAZEVIEILLE dans l'Hérault, les ilots du RPG les plus proches de son centroîde qui nous permettent d'atteindre la surface de 500 hectares.
Les deux tables utilisées (couches) sont la table des communes de la BD GEOFLA et la table du RPG2012.
Code:
WITH centre AS ( /* mon point de départ */ SELECT st_centroid(geometrie) AS geometrie FROM ign_geofla.commune WHERE insee_com = '34066' ), Cumul AS ( SELECT st_distance(centre.geometrie, rpg_2012.geom) /* la distance de l'ilot courant au point de départ */, ST_AREA(rpg_2012.geom)/10000 /* la surface de l'ilot courant'*/, (ARRAY_AGG(gid) OVER(ORDER BY ST_DISTANCE(centre.geometrie, rpg_2012.geom))) as liste_ilots /*la liste cumuléé des ilots classés par distance croissante d'éloignement au point de départ */, (SUM(ST_AREA(rpg_2012.geom)) OVER(ORDER BY st_distance(centre.geometrie, rpg_2012.geom)))/10000 as surf_cumulee /*la surface cumulée en hectares des ilots classés par distance croissante d'éloignement au point de départ */ FROM centre JOIN agriculture.rpg_2012 ON ST_DWITHIN(centre.geometrie, rpg_2012.geom,7000) /* à partir des tables centre et rpg, déslors que les ilots sont à moins de 7000 mètres du point de départ */ ), ilots AS ( /* les ilots de l'empreinte alimentaire, correspondant, à partir de la sous-requête précédente , à la première ligjne dont la surface des ilots est supérieure à 500 ha */ SELECT liste_ilots, surf_cumulee FROM cumul WHERE surf_cumulee > 500 ORDER BY surf_cumulee LIMIT 1) /* enfin la selection des ilots dans le RPG */ SELECT rpg_2012.* FROM agriculture.rpg_2012 JOIN ilots ON gid = ANY(liste_ilots)
Mathieu BOSSAERT
Association GeoRezo
Hors ligne
#16 Tue 23 May 2017 16:37
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3199
- Site web
Re: QGIS: Recherche solution pour requête spatiale
Bonjour,
Mathieu B. il est vraiment vraiment gentil !!
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne
#17 Tue 23 May 2017 16:44
- Ben14
- Participant occasionnel
- Date d'inscription: 19 May 2017
- Messages: 11
Re: QGIS: Recherche solution pour requête spatiale
Bonjour,
Merci à toi pour ta réponse,
Ca à l'air d'être exactement ce que je recherche!
Si j'ai bien compris c'est un codage en SQL que je dois entrer pour obtenir ma requête? Je n'ai jamais fais de telle manipulation donc c'est un peu déroutant.
Cette formule est adaptable? C'est à dire que je peux la rentrer tel quel simplement en modifiant la commune et le 500 ha par ce que je cherche?
Dernière question : SQL est pas une application de QGis?
En tout cas merci pour cette réponse!
Hors ligne
#18 Tue 23 May 2017 16:50
- Ben14
- Participant occasionnel
- Date d'inscription: 19 May 2017
- Messages: 11
Re: QGIS: Recherche solution pour requête spatiale
Oui c'est super sympa!
Car j'avoue je suis complètement à la ramasse...><'
Hors ligne
#19 Tue 23 May 2017 17:20
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3947
Re: QGIS: Recherche solution pour requête spatiale
Bonjour,
Bonjour,
Mathieu B. il est vraiment vraiment gentil !!
Si ça, ça fait pas garder foi en l'humanité, en ces temps peu radieux...
Hors ligne
#20 Tue 23 May 2017 17:28
Re: QGIS: Recherche solution pour requête spatiale
Mathieu B. il est vraiment vraiment gentil !!
C'est comme ça qu'on m'a appris ici :-). Ce que je retiens depuis ma première question posée sur ce portail c'est qu'il est motivant de voir ce qu'on peut faire avec les outils qui sont à notre disposition. Il y a surement d'autres solutions que celle-ci.
Le problème de Ben14 n'est pas résolu pour autant car il faut mettre la solution en place, comprendre ce qu'est une base de données, installer PostGIS, y mettre les données, comprendre et mettre en œuvre la requête.
Ça va donc nécessiter un peu de temps et un minimum d'intérêt pour la géomatique. D'où ma question initiale "Selon le temps dont vous disposer il peut être intéressant de creuser cette piste."
Pour répondre à Ben14, SQL est le langage qui permet d’interagir avec les bases de données. Tu pourras utiliser du SQL dans QGIS à condition que tes données soient stockées dans une base de données.
Il y a de nombreuses ressources disponibles sur internet, des formations qui sont dispensées aussi et des livres très bien faits sur le sujet.
Mathieu BOSSAERT
Association GeoRezo
Hors ligne
#21 Wed 24 May 2017 09:21
- Ben14
- Participant occasionnel
- Date d'inscription: 19 May 2017
- Messages: 11
Re: QGIS: Recherche solution pour requête spatiale
Salut,
J'ai bien trouvé des tutos sur les SQL dans QGis qui sont assez claires et détaillés, c'est parfait merci!
Dernière question: c'est est-ce que le code que tu m'as donné je peux l'entrer tel en modifiant simplement la commune et le nombre d'ha?
Hors ligne
#22 Wed 24 May 2017 10:04
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3199
- Site web
Re: QGIS: Recherche solution pour requête spatiale
Bonjour,
Bienvenue à Ben14 dans le monde merveilleux du SQL.
Attention il va vous falloir faire preuve de rigueur, de tolérance à l'aspirine.
Essayez de modifier le code en changeant juste quelques trucs et vous verrez ce que ça donne. Mais je vous conseille vivement de commencer par du tout simple : installer postgres/postgis importer un shape, faire une requête toute simple SELECT machin WHERE condition, puis visualiser le résultat avec QGis.
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne
#23 Wed 24 May 2017 10:50
- Ben14
- Participant occasionnel
- Date d'inscription: 19 May 2017
- Messages: 11
Re: QGIS: Recherche solution pour requête spatiale
D'accord, merci! Je vais essayer ça
Hors ligne
#24 Tue 20 June 2017 14:15
- tati
- Participant occasionnel
- Date d'inscription: 6 Jun 2017
- Messages: 27
Re: QGIS: Recherche solution pour requête spatiale
Bonjour,
Je reviens vers vous car j'ai un ptit problème que j'ai pas réussi à résoudre sur postgres.
J'ai une table de multipolygones dont j'ai calculer la surface de tous les polygones y compris les parks.
Et j'ai une autre table sirène géocodé.
Je souhaite créer un attribut (une nouvelle colonne) dans ma table sirène qui pour chaque pro de cette table va calculer la surface des parks dans le rayon de 100 mètres.
J'ai utilisé st_buffer mais ça ne me donne pas le résultat que je veux:
SELECT surface,ST_Buffer(the_geom,100)
from public.multipolygones
join shema.sirene on multipolygones.gid=finale.id
where "leisure" ilike 'park'
order by geom asc limit 3
Pouvez-vous m'aider svp ?
Hors ligne
#25 Wed 28 June 2017 23:36
- Mathieu Denat
- Participant actif
- Lieu: Montpellier
- Date d'inscription: 5 May 2010
- Messages: 110
Re: QGIS: Recherche solution pour requête spatiale
Bonsoir,
Il serait bon de créer un nouveau sujet pour ce nouveau problème, d'autant que je ne suis pas d'avoir bien saisi la question.
Néanmoins je pense qu'il faut plutôt creuser dans ce sens là:
Code:
SELECT s.pro, sum(ST_Area(ST_Intersection(m.geom,s.geom))) "surface totale des parcs" FROM sirene s JOIN multipolygones m ON ST_Intersects(ST_Buffer(s.geom,100),m.geom) WHERE leisure = 'park' GROUP BY s.pro
La jointure spatiale permet de joindre les parcs qui sont dans les 100m (JOIN, ST_Intersects, et ST_Buffer + clause WHERE).
La fonction ST_Intersection dans le SELECT permet d'extraire les portions de pacs uniquement contenues dans le rayon de 100m autour du pro.
Voir la doc officielle pour utiliser correctement la fonction (l'ordre des champs géométrique à son importance):
http://postgis.net/docs/manual-2.3/ST_Intersection.html
Bonne continuation.
Mathieu
C'est en forgeant qu'on devient forgeron
Hors ligne