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 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.

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: 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.

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: 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.

Hors ligne

 

#6 Tue 22 November 2022 09:55

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1535

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

 

Pied de page des forums

Powered by FluxBB