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

Rencontres QGIS 2025

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

#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

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

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

 

Pied de page des forums

Powered by FluxBB