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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Wed 07 July 2010 15:40

feraudyh
Participant actif
Date d'inscription: 13 May 2009
Messages: 103

Question Postgis élémentaire

Bonjour,
  Je n'ai pas beaucoup l'occasion de manipuler du SQL et voici mon probleme:
J'ai un SIG qui utilise PostGis. Il y a une couche Bâtiments, et une couche Ilots (tout les deux de type polygone). Les bâtiments sont dans des ilots, comme on s'y attend. Je fais une sélection rectangulaire,  et je veux récupérer tous les bâtiments qui sont dans un ilot qui ont une intersection avec la sélection. Autrement dit tous les bâtiments b tel que il existe un ilot i tel que i intersecte la sélection.
Est ce qu'il existe une formulation SQL simple pour exprimer ceci?
J'ai l'impression que ça devrait être très facile.

Merci
Henri

Hors ligne

 

#2 Wed 07 July 2010 16:47

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: Question Postgis élémentaire

Bonjour,

Quelque chose comme cela :

Code:

SELECT * FROM bati  b, ilot i WHERE st_intersect(b.the_geom,i.the_geom) AND st_intersect(i.the_geom,GeomFromWkt('POLYGON(())');

Il faut peut être jouer sur contains/within/overlaps en fonction de tes envies smile

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#3 Thu 08 July 2010 21:14

feraudyh
Participant actif
Date d'inscription: 13 May 2009
Messages: 103

Re: Question Postgis élémentaire

Merci!

Hors ligne

 

#4 Tue 20 May 2014 10:46

David.loic
Participant occasionnel
Date d'inscription: 21 Feb 2014
Messages: 17

Re: Question Postgis élémentaire

Bonjour,
Mon objectif est d'obtenir la longueur des routes dans une commune.
est-il possible d'obtenir la longueur exact d'une ligne contenu dans un polygon. (ST_intersects, ST_contains, ST_cover ne sont pas satisfaisant).
Est-ce qu'il y aurait une fonction similaire à ST_overlap pour des objets géométrique de différent type?
Merci d'avance

Hors ligne

 

#5 Tue 20 May 2014 11:36

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

Re: Question Postgis élémentaire

Bonjour,

Si les routes sont entièrement contenues dans les communes, st_length(route.geom) where st_contains(commune.geom, route.geom) donnera la longueur des routes contenues dans les communes.

Si les routes traversent la commune, il faut calculer l'intersection de la route avec la commune (partie commune), puis calculer la longueur de ces intersections:

Code:

select st_length(st_intersection(commune.geom, route.geom))
from commune, route
where st_intersects(commune.geom, route.geom)

Nicolas

Hors ligne

 

#6 Tue 20 May 2014 15:30

David.loic
Participant occasionnel
Date d'inscription: 21 Feb 2014
Messages: 17

Re: Question Postgis élémentaire

Merci,
je vais tester cela immédiatement.

Hors ligne

 

Pied de page des forums

Powered by FluxBB