Annonce
Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).
En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.
#1 Sat 12 November 2022 12:35
- klrblz
- Participant occasionnel
- Date d'inscription: 8 Feb 2011
- Messages: 41
Generer des points depuis un point + distance et angle
Bonjour à tous,
Je dois générer des points à partir d'un point de réf en connaissant la distance et l'angle (0° nord, anti-horaire)
Est-ce possible en SQL ? J'arrive à le faire avec FME mais pouvoir faire une vue en m'arrangerait.
Merci d'avance à qui éclairera ma lanterne, Claire
Hors ligne
#2 Sun 13 November 2022 19:25
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 981
Re: Generer des points depuis un point + distance et angle
Est-ce possible en SQL ?
Avec PostGis ou Spatialite, c'est possible avec la fonction st_project() : https://postgis.net/docs/ST_Project.html
Le sujet a été évoqué récemment :
https://georezo.net/forum/viewtopic.php?id=128831
Dernière modification par Sylvain M. (Sun 13 November 2022 19:29)
Sylvain M.
En ligne
#3 Mon 21 November 2022 14:28
- klrblz
- Participant occasionnel
- Date d'inscription: 8 Feb 2011
- Messages: 41
Re: Generer des points depuis un point + distance et angle
Bonjour,
Merci Sylvain de m'avoir mis sur la bonne voie. Je n'arrive toutefois pas à adapter mon code : les résultats sont incohérents.
Je me demande si cela n'est pas lié au fait que je travaille en coordonnées cartographiques ? (EPSG 2154) et que ce code n'est pas adapté ?
Voici ma requête :
SELECT apo.id AS id_point_obs,
apo._x AS x_pt_obs,
apo._y AS y_pt_obs,
ca.distance,
ca.angle,
st_project(st_makepoint(apo._x::double precision, apo._y::double precision, 2154::double precision)::geography, ca.distance::double precision, radians(ca.angle::double precision)) AS geometry
FROM etude.citation_authie ca
LEFT JOIN etude.authie_inventaire ai ON ai.id = ca.id_inv
LEFT JOIN etude.authie_point_obs apo ON apo.id = ai.id_lieu;
Le résultat :
"id_point_obs","x_pt_obs","y_pt_obs","distance","angle","st_project"
1,544841,296764,200,90,POINT (161.0032054995325 55.9999999583429)
Encore merci de l'aide apportée,
Claire
Hors ligne
#4 Mon 21 November 2022 16:57
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 981
Re: Generer des points depuis un point + distance et angle
Je me demande si cela n'est pas lié au fait que je travaille en coordonnées cartographiques ? (EPSG 2154) et que ce code n'est pas adapté ?
En effet, je crois que le pb vient de là.
Je pense avoir trouvé une solution comme ça :
Code:
st_transform(st_project(st_transform(ST_SetSRID(st_makepoint(apo._x,apo._y),2154),4326),ca.distance,radians(ca.angle))::geometry,2154) AS geometry
A tester, mais pas sûr de moi : vérifie bien la cohérence !
Sylvain M.
En ligne
#5 Mon 21 November 2022 17:07
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 981
Re: Generer des points depuis un point + distance et angle
Par contre, attention !
Je viens de me rendre compte que tes coordonnées ne doivent pas être du Lambert 93 (EPSG:2154), mais plutôt du EPSG:27561 ou EPSG:27562 ou EPSG:27563 (tu peux tester avec un jeu de coordonnées XY sur https://app.dogeo.fr/Projection/#/coords-to-points
Sylvain M.
En ligne
#6 Tue 22 November 2022 09:55
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1534
Re: Generer des points depuis un point + distance et angle
Bonjour,
Il y a confusion il me semble dans votre code lors de la création du point:
st_makePoint avec 3 arguments construit un point 3D.
En faisant
Code:
st_makepoint(apo._x::double precision, apo._y::double precision, 2154::double precision)
J'imagine que vous vouliez assigner un SRID 2154 au point.
Il faut faire st_setSRID(st_makepoint(...), 2154) pour cela.
Concernant le SRID des données, comment ces données ont été chargées dans postgis ? quel etait leur format initial ? Il y avait surement une info de projection associée aux données.
Nicolas
Dernière modification par Nicolas Ribot (Tue 22 November 2022 09:56)
Hors ligne
#7 Wed 23 November 2022 10:48
- klrblz
- Participant occasionnel
- Date d'inscription: 8 Feb 2011
- Messages: 41
Re: Generer des points depuis un point + distance et angle
Bonjour,
Un grand merci à tous, mon problème est résolu. J'avais bien un problème de srid de départ (j'ai passé ma table points d'observation en EPSG 2154 et utiliser st_translate pour projeter le point.
Code final :
SELECT apo.id AS id_point_obs,
apo._x AS x_pt_obs,
apo._y AS y_pt_obs,
ca.distance,
ca.angle,
st_setsrid(st_translate(apo.geom, sin(radians(ca.angle::double precision)) * ca.distance::double precision, cos(radians(ca.angle::double precision)) * ca.distance::double precision), 2154) AS geom,
row_number() OVER (ORDER BY apo.id) AS id,
ca.id AS id_cit
FROM etude.citation_authie ca
LEFT JOIN etude.authie_inventaire ai ON ai.id = ca.id_inv
LEFT JOIN etude.authie_point_obs apo ON apo.id = ai.id_lieu;
Bonne journée à tous,
Claire
Hors ligne