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