#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
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
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