Pages: 1
- Sujet précédent - Créer une ligne à partir d'un point en donnant longueur et angle - Sujet suivant
#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
Pages: 1
- Sujet précédent - Créer une ligne à partir d'un point en donnant longueur et angle - Sujet suivant