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 !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Thu 25 March 2021 16:38

tweaxy
Participant actif
Lieu: Abbeville
Date d'inscription: 27 Dec 2018
Messages: 76

PostgreSQL/Postgis 9.6

Bonjour,

Je cherche à réaliser des statistiques de population à partir des données insee sur nos emprises de quartiers de notre ville.
A ma disposition, 3 données :
- Les quartiers de la ville
- Les emprises iris
- les points RIL avec le nombre de logements

Je vais donc calculer le nombre de logement par quartier de la ville et ensuite multiplier par la valeur de population d'un logement en fonction du quartier iris.

Pour cela, je calcule la valeur de population pour 1 logement, par quartier iris. Juste que là tout va bien.

SELECT i.nom_iris, sum(r.nombre_log) AS nb_log_iris
     FROM insee.ril_millesime r, insee.iris_pop17 i
     WHERE (st_intersects(st_transform(i.geom,3950), st_transform(r.geom,3950))) AND ((r.categorie) LIKE 'HABIT'::text)
     GROUP BY i.nom_iris


Ensuite, je dois connaître le nombre de logement au sein de mes quartiers de la ville pour ensuite multiplier par la valeur pour 1 logement de ma population.
Toutefois, mes emprises de mes quartiers chevauchent plusieurs emprises des IRIS. Je dois donc éclater mes emprises de quartier de ville en fonction du chevauchement de mes emprises IRIS.. arrivez-vous à me suivre jusque là ?
Cela doit me permettre de sortir :
QUARTIER VILLE : A, nombre logement : X, iris correspondant : iris1
QUARTIER VILLE : A, nombre logement : Y, iris correspondant : iris 2
Ainsi de suite....

C'est là que je coince.
Je n'arrive pas à éclater mes emprises pour obtenir ce rendu. L'outil de géotraitement UNION sous qgis fait très bien le boulot, mais sous Postgis, je n'arrive pas à reproduire ce traitement. le st_union de postgis ne fait pas du tout la même chose (sauf si j'ai mal compris sa description...)

J'ai donc tenté la requête suivante :

SELECT s.oid, st_collectionextract(st_intersection(i.geom, s.geom), 3) AS inter, s."Nom", i.nom_iris--, i.pop
     FROM decoupage_administratif.comite_quartier s, insee.iris_pop17 i
    ORDER BY s."Nom", i.nom_iris


Cela me sort plus de 1508 objets, alors que le traitement QGIS en sort environ 200...

Après coup, je pourrais lancer mon produit à l'aide des valeurs à l'échelle d'un logement de ma première requête.

Quelle fonction géométrique permet de faire cela ?

Cordialement,
Léandre

Hors ligne

 

#2 Thu 25 March 2021 17:09

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1536

Re: PostgreSQL/Postgis 9.6

Bonjour,

Vous avez oublié de mettre une jointure spatiale lorsque vous intersectez les quartiers avec les iris, c'est pour cela que ca crée tant d'objets.
Il faut ajouter un st_intersects :

Code:

FROM decoupage_administratif.comite_quartier s join insee.iris_pop17 i on st_intersects(i.geom, s.geom)

S'il existe des quartiers en dehors de tout iris, il faudra faire un left join pour récupérer tous les quartiers.

Nicolas

Hors ligne

 

#3 Mon 29 March 2021 13:26

tweaxy
Participant actif
Lieu: Abbeville
Date d'inscription: 27 Dec 2018
Messages: 76

Re: PostgreSQL/Postgis 9.6

Bonjour,

En effet, cela fonctionne beaucoup mieux.

Merci

Léandre

Hors ligne

 

Pied de page des forums

Powered by FluxBB