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 Fri 08 April 2011 12:57

omorin
Participant occasionnel
Date d'inscription: 4 Jun 2008
Messages: 12

Créer une ligne à partir d'un point en donnant longueur et angle

Bonjour,

J'ai une table qui contient un point, et je cherche à créer une ligne à partir de de ce point en donnant longueur et angle.

Je veut utiliser cela pour placer des simulation de portée d'antenne Wifi sur une carte.

J'arrive à créer une ligne de la longueur donnée à partir du point avec :

Code:

create table test_rotation as SELECT makeline(the_geom,st_setsrid(st_makepoint(st_x(the_geom)+100,st_y(the_geom)),2154)) from test;

Mais je n'arrive pas à la faire "tourner" en prenant comme axe de rotation le point avec :

Code:

create table test_rotation2 as SELECT Rotate(makeline(the_geom,st_setsrid(st_makepoint(st_x(the_geom)+100,st_y(the_geom)),2154)), pi()/2) from test;

rotate est-elle la bonne solution ?

Hors ligne

 

#2 Fri 08 April 2011 13:36

omorin
Participant occasionnel
Date d'inscription: 4 Jun 2008
Messages: 12

Re: Créer une ligne à partir d'un point en donnant longueur et angle

J'ai trouvé la solution ici :

http://geospatial.nomad-labs.com/2007/0 … n-postgis/

et voici ce que cela donne avec mon cas précis...


Code:

SELECT translate(rotate(translate(makeline(the_geom,st_setsrid(st_makepoint(st_x(the_geom)+100,st_y(the_geom)),2154)), -x(the_geom), -y(the_geom) ),radians(45)),x(the_geom), y(the_geom)) from test;

A plus

Hors ligne

 

#3 Fri 08 April 2011 16:24

omorin
Participant occasionnel
Date d'inscription: 4 Jun 2008
Messages: 12

Re: Créer une ligne à partir d'un point en donnant longueur et angle

J'ai créé une fonction...

Code:

CREATE or replace FUNCTION outils.project(geometry, double precision, double precision) RETURNS geometry
    AS 'SELECT translate(rotate(translate(makeline($1,st_setsrid(st_makepoint(st_x($1),st_y($1)+$2),srid($1))), -x($1), -y($1) ),radians(($3)*-1)),x($1), y($1));'
    LANGUAGE SQL
    IMMUTABLE
    RETURNS NULL ON NULL INPUT;

comment on function outils.project(geometry, double precision, double precision) is 'point, distance, angle (0-360)'

on l'utilise ainsi..

Code:

select astext(the_geom), astext(outils.project(the_geom,1000,30)) from test;

Je met mes fonctions dans un schéma outils pour ne pas les mélanger avec les fonctions postgis.

Dernière modification par omorin (Wed 13 April 2011 08:36)

Hors ligne

 

Pied de page des forums

Powered by FluxBB