#1 Tue 29 August 2017 14:20
- hotegbe
- Participant occasionnel
- Date d'inscription: 28 Jun 2017
- Messages: 32
requête postgis
Bonjour je sollicite votre aide n'ayant pas trouvé de réponse à mon problème
Je dispose de la requête suivante
Code:
select shape_len,fatou.cable.id, (select code_ch1 from fatou.chambre n where st_within(st_startpoint(p.geom), st_buffer(n.geom, 1))), (select code_ch1 from fatou.chambre n where st_within(st_endpoint(p.geom), st_buffer(n.geom, 1))) from fatou.arciti p,fatou.cable where ST_relate(fatou.cable.geom,p.geom,'T********') ;
elle fonctionne très bien et me premet d'afficher des longueurs le long d'un segment sauf que j'obtiens un résultat dans le désordre comment puis je obtenir une sortie qui respecte ma ligne jaune comme tracé dans l'mage joint à ce post?
Je précide que mes points et lignes sont topologiquement corrects
Merci d'avance de votre aide
Cordialement
Hors ligne
#2 Wed 30 August 2017 09:42
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1159
Re: requête postgis
Salut,
je pense que quelque chose comme çà fonctionnerait :
Code:
SELECT st_astext(points.geom), st_astext(segments.geom), id, idp FROM (SELECT 'POINT(4 4)'::geometry geom UNION SELECT 'POINT(0 0)'::geometry UNION SELECT 'POINT(0.5 0.5)'::geometry UNION SELECT 'POINT(0 1)'::geometry ) as points JOIN (SELECT st_makeline((lag(a) OVER W).geom, (a).geom) geom , (a).path[1] idp, id FROM (SELECT st_dumppoints(lines.g) a, id FROM (SELECT 1 id, 'LINESTRING(0 0, 1 1, 2 2, 3 3, 4 4)'::geometry g UNION SELECT 2 id, 'LINESTRING(0 1, 0 2, 0 3, 0 4, 4 4)'::geometry g ) as lines ) as t WINDOW W AS (PARTITION BY id ORDER BY (a).path) ) as segments ON st_intersects(points.geom, segments.geom) ORDER BY id, idp, ST_LineLocatePoint(segments.geom, points.geom)
Dernière modification par tumasgiu (Wed 30 August 2017 16:44)
Hors ligne
#3 Thu 15 July 2021 11:43
- freedfall
- Juste Inscrit !
- Date d'inscription: 15 Jul 2021
- Messages: 1
Re: requête postgis
Bonjour à tous,
Je débute en SQL et je butte sur le problème suivant:
J'ai à disposition une table (t1) contenant des objets ayant un point de début (t1.fk_pt_debut) et un point de fin (t1.fk_pt_fin) ainsi qu'une géométrie point (t1_geom)
les géométries des points de début et de fin (t2_geom) se trouvent dans une autre table (t2)
Je souhaiterais effectuer un UPDATE de la géométrie de la table t1 avec une moyenne des points de début et de fin.
J'effectue donc la requête suivante:
UPDATE t1
SET t1.geom = (
SELECT st_centroid(st_union
(
(SELECT t2.geom FROM t2
JOIN t1 ON t2.id = t1.fk_pt_debut
WHERE t1.id = '1')
,
(SELECT t2_geom FROM t2
JOIN t1 ON t2.id = t1.fk_pt_fin
WHERE t1.id = '1')
)
)
)
WHERE t1.id = '1'
cette requête fonctionne pour un objet.
la table t1 disposant de beaucoup d'objet, je souhaite effectuer cette requête sur toute la table, c'est la que je rencontre mon problème: comment affecter cette requête à toute la table?
Merci d'avance pour vos réponses ou vos pistes de réponses
Excellente journée à vous
Hors ligne