#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: 995
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.
Hors 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: 995
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.
Hors 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: 995
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.
Hors ligne
#6 Tue 22 November 2022 09:55
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
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