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 Sat 23 February 2008 15:08

diophamidou
Participant assidu
Date d'inscription: 18 Jan 2006
Messages: 243

requete sql sur postgres/postgis

Bjr,
Requete sur postgresql / postgis

1) je voudrais récuperer des ilots d'épandages qui se trouvent à 100m d'une rivières pour cela j'ai construit la requête suivante: select codehydro,ilots.nuero,ilots.surface_ha
from rivieres, ilots where intersects(
buffer(rivieres.the_geom,100),ilots.the_geom)

mais seulement voila, la requete a été interommpue et voila le message qui m'a été renvoyé :
NOTICE:  TopologyException: side location conflict (246384,2.27929e+006,2.27929e+006)

ERROR: GEOS intersects() threw an error!
État SQL :XX000
quelqu'un peut il m'expliquer ce qui ne va pas? et comment peut-on gerer ce conflit entre ces 2 points?

2) Ne serait-il pas prudent de faire la requete en 2 temps : cad créer un beffer de 100 m autour des rivieres, et l'enregistrer comme étant  une vue ? Cette vue est elle géométrique sinon comment la rendre géometrique afin de pouvoir faire l'intersect avec la couche ilots

Dernière modification par diophamidou (Sat 23 February 2008 15:16)

Hors ligne

 

#2 Sat 23 February 2008 16:37

vincentp
Participant actif
Lieu: Drôme
Date d'inscription: 18 Jul 2006
Messages: 128
Site web

Re: requete sql sur postgres/postgis

Bonjour,
Pour ce type de requete, il y a la function ST_DWITHIN de PostGIS, qui a l'avantage d'être optimisée pour utiliser les index. Il faut cependant penser à les créer auparavant.

Code:

ST_DWithin(geometry, geometry, float)
    Returns true if geometries are within the specified distance of one another. Uses indexes if available.

http://postgis.refractions.net/docs/ch06.html#id2551694

Concernant l'erreur de topologie side location, elle est certainement due à des géométries invalides. Tester les géometries avec des requetes du type :

Code:

select * from table where not isvalid(the_geom);

Bon courage,
vincent

Hors ligne

 

#3 Sat 23 February 2008 16:45

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

Re: requete sql sur postgres/postgis

Bonjour,

Je répond uniquement à la partie 2). Créer une vue n'est pas la meilleur solution, car une vue est une requête sauvegardée, à chaque fois que tu utilises la vue, la requête est relancée. Il faut soit créer une "vue matérialisée", soit ajouter un champ buffer de type geometry (polygon), l'ajouter dans la table geometry_column et mettre à jour ce champ avec la requête : UPDATE <table> SET buffer=buffer(the_geom,100);

La réponse de Vincent résoudra cependant votre problème.

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

 

Pied de page des forums

Powered by FluxBB