#1 Tue 02 February 2016 17:20
- ploufi2
- Juste Inscrit !
- Date d'inscription: 2 Feb 2016
- Messages: 2
Probleme : Requete SQL- Utillisation de ST_Buffer()
Bonjour, je viens de commencer QGIS il y a peu -une semaine- J'utilise la version 2.12.3
Et j'ai une base de donnée contenant 2 couches vecteur, une couche point(que j'appellerai t_point contenant une colonne geom) et une ligne (... t_ligne...)
Normalement les points sont sur les lignes, mais il y a quelques défauts et je souhaite sélectionner tous les points qui sont à plus de 2m des lignes en utilisant seulement la base de données et les requêtes SQL.
Je pensais pour cela utiliser la fonction ST_Buffer et ST_Intersects, mais j'ai quelques problèmes avec la fonction ST_Buffer.
Par exemple si je fais :
SELECT ST_Buffer("t_point"."geom", 2) AS geom
FROM "t_point"
Je me retrouve avec un tableau avec autant de ligne que de points, mais avec une colonne geom contenant que des valeurs NULL et donc inutilisable. Je pensais obtenir des polygones circulaires de rayon 2 et de centre un point de t_point.
J'ai essayé quand même de faire ma requête :
SELECT Distinct "t_point"."geom"
FROM "t_point"
INNER JOIN
"t_ligne"
ON ST_Intersects(ST_Buffer("t_point"."geom", 2),"t_ligne"."geom")=0
Mais sans surprise cela ne fonctionne pas... Vous avez une idée (sans utiliser de plugins, etc seulement une requête SQL)??
Hors ligne
#2 Tue 02 February 2016 17:23
Re: Probleme : Requete SQL- Utillisation de ST_Buffer()
Bonjour,
Plutôt quelque chose comme cela :
Code:
SELECT p.* FROM "t_point" as p, "t_ligne" as l WHERE !st_DWithin(l.the_geom, p.the_geom, 2)
Récupère moi les informations des points à partir des tables points et lignes tel quel le buffer de 2 m autour des lignes contienne mes points (un moteur de base de données réfléchi de manière assez illogique pour un être humain, donc la phrase précédente est pour un humain).
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 Fri 05 February 2016 17:31
- ploufi2
- Juste Inscrit !
- Date d'inscription: 2 Feb 2016
- Messages: 2
Re: Probleme : Requete SQL- Utillisation de ST_Buffer()
Merci, mais il reste le problème du tampon. En effet st_DWithin n'existe pas dans ma version (no such function: st_DWithin) -version 2.12.3-
Il existe quand même la fonction st_Within mais on ne peut pas faire varier la précision
Donc j'ai essayé :
SELECT p.*
FROM "t_point" as p, "t_ligne" as l
WHERE ST_Within(l.geom, ST_Buffer( p.geom,2))=0
(je mets =0 car ! n'existe pas non plus)
Mais cela ne fonctionne pas... : je n'obtiens aucun point même si je met 200 à la place de 2...
Pour information quand je met WHERE ST_Within(l."geom", p."geom")=1, je n'obtiens aucun point (ce qui est normal puisque les points ne sont pas exactement sur les lignes)
Et quand je met ST_Within(l."geom", p."geom")=0 j'obtiens tout les points.
Mais quand je mets ST_Within(l.geom, ST_Buffer( p.geom,2))=1 je n'obtiens aucun point non plus...
Il y a t'il moyen de récupérer des commandes de version antérieure? Et si non, comment utiliser buffer()
Ps : Merci pour la réponse rapide, et excusez moi du long retour, je n'avais pas vu que vous l'aviez changé de forum
Hors ligne
#4 Mon 08 February 2016 15:58
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3945
Re: Probleme : Requete SQL- Utillisation de ST_Buffer()
Bonjour
En effet st_DWithin n'existe pas dans ma version (no such function: st_DWithin) -version 2.12.3-
attention, Il s'agit là de fonctions PostGIS et non QGIS (2.12.3)
st_Within va checker si la première entité est totalement contenue dans la seconde, ce qui ne peut être le cas de tes lignes vis-à-vis des cercles autour de tes points. Tu dois pouvoir comprendre maintenant pourquoi il te renvoie ces différents résultats.
Inverse donc l'emplacement des couches et le buffer dans ta requête ou essaie avec st_intersects pour voir.
Hors ligne