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

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.

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

 

Pied de page des forums

Powered by FluxBB