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

Printemps des cartes 2024

#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

 

Pied de page des forums

Powered by FluxBB