#1 Fri 04 September 2009 20:42
- af
- Participant occasionnel
- Date d'inscription: 6 Sep 2005
- Messages: 28
[POSTGIS] RequĂȘte Intersects et Buffer
Bonjour,
J'ai une couche de cours d'eau et une couche de points GPS relevés sur le terrain.
Je cherche donc à connaßtre le linéaire en mÚtres effectué sur le terrain en déterminant le point d'entrée et de sortie sur chaque tronçon. Les points GPS ne sont évidemment pas calés sur le linéaire de cours d'eau.
Ma 1Ăšre requĂȘte fut la suivante :
SELECT Astext(ST_line_interpolate_point(L.the_geom, ST_line_locate_point(L.the_geom, P.the_geom))) FROM ref_vecteur.res_hydro as L, metiers_png.mpvr_gps as P;
Or il me rapporte des centaines de points dont certains en double ?
J'ai ensuite testĂ© avec couche contenant une ligne et autre couche avec deux points, dans ce cas la mĂȘme requĂȘte fonctionne bien. J'ai donc pensĂ© qu'il me fallait d'abord sĂ©lectionner les tronçons en crĂ©ant un buffer autour des points, puis lancer la requĂȘte initiale sur cette sĂ©lection.
Je bloque maintenant sur la requĂȘte de buffer :
SELECT * from ref_vecteur.test_line where ST_Intersects(the_geom, (SELECT st_buffer(the_geom,100000) as buffer from ref_vecteur.test_point));
ERROR : more than one row returned by a subquery used as an expression
Si qq a une idĂ©e d'une part sur la requĂȘte de buffer et d'autre part sur son intĂ©gration dans la requĂȘte intiale, je suis preneur. Merci d'avance
Alain Ferchal
Hors ligne
#2 Fri 11 September 2009 23:38
- af
- Participant occasionnel
- Date d'inscription: 6 Sep 2005
- Messages: 28
Re: [POSTGIS] RequĂȘte Intersects et Buffer
je rĂ©ponds Ă moi mĂȘme et pour ceux que ça peut intĂ©resser.
J'ai rĂ©solu une partie du pb, Ă savoir le fait qu'il me rapporte des centaines de points. En fait la requĂȘte lance le calcul de point le plus proche sur chaque point et sur chaque ligne de l'ensemble de la couche !!
1 ligne - 2 points = 2 points recalculés
2 lignes - 2 points = 4 points recalculés
...
Il suffit donc de rajouter une condition avec une jointure entre les 2 couches (ex un id commun) pour limiter les calculs des points au cours d'eau concerné.
SELECT Astext(ST_line_interpolate_point(L.the_geom, ST_line_locate_point(L.the_geom, P.the_geom))) FROM ref_vecteur.res_hydro as L, metiers_png.mpvr_gps as P WHERE L.id = P.id;
+
AF
Hors ligne

