Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/10/2011, 15h34   #1
Nouveau Membre du Club
 
Inscription : février 2005
Messages : 164
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 164
Points : 37
Points : 37
Par défaut Requête spatiale postGIS

Bonjour,

Je cherche à faire une requête spatiale entre 3 couches mais je m'emmêle les pinceaux.
J'ai 3 tables une couche de point (point de collecte), et 2 couches de polygone (zone et batiment). Je cherche a savoir pour un point de collecte, le nombre de bâtiment se trouvant dans la zone la plus proche d'un point de collecte. En gros j'ai 2 requêtes et il faudrait que je les imbrique !

1er : pour connaître le nombre de bâtiment dans une zone

Code :
1
2
 
SELECT COUNT(DISTINCT(bati.ogc_fid)) AS nbreLogement FROM zone LEFT JOIN bati Intersects(bati.the_geom , zone.the_geom)
2ième: pour connaître la zone la plus proche d'un point de collecte

Code :
1
2
 
SELECT zone.ogc_fid, Distance(zone.the_geom ,Pointcollecte.the_geom)   FROM zone, Pointcollecte ORDER BY Distance ASC LIMIT 1
(Peut être faut-il écrire cette dernière autrement ...)

Si vous avez une idée , merci !
mcdelay est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2011, 15h46   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
Ce que vous faites c'est vraiment du n'importe quoi. Commencez par donner vos tables sous la forme CREATE TABLE ..., ainsi qu'un jeu d'essais sous la forme INSERT ...
Après on pourra commencer à vous aider.

Mais il serait peut être temps de vous forme r à ce qu'est une jointure spatiale !
Mon livre sur SQL possède un chapitre de 60 pages consacré au SIG dans SQL avec des exemples de jointures spatiales...

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 02
Vieux 26/10/2011, 15h32   #3
Nouveau Membre du Club
 
Inscription : février 2005
Messages : 164
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 164
Points : 37
Points : 37
Bonjour,

Je trouve votre réponse un peu arrogante. Je pense avoir été claire, d'ailleurs on m'a donné une réponse sur un autre forum sans que je donne plus d'explications. voici le code :

Code :
1
2
3
4
5
6
7
8
9
10
11
WITH plus_proche AS (
   SELECT DISTINCT ON(pt.ogc_fid) pt.ogc_fid AS pt_id, 
          z.ogc_fid AS zone_id,
          z.the_geom AS zone_geom
   FROM zone z, Pointcollecte pt
   WHERE st_dwithin(z.the_geom, pt.the_geom, 500)
   ORDER BY pt.ogc_fid, distance(z.the_geom, pt.the_geom)
) SELECT p.pt_id, p.zone_id, count(b.ogc_fid) AS nbrelogement
FROM bati b, plus_proche p
WHERE st_within(b.the_geom, p.zone_geom)
GROUP BY p.pt_id, p.zone_id;
... donc un peu d'indulgence pour ceux qui débutent, mais merci d'avoir répondu ;-)
mcdelay est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h57.


 
 
 
 
Partenaires

Hébergement Web