[QGIS-pt] Automatização da Rotação de Elementos Pontuais‏

Olá a todos.

Versões: PostgreSQL 9.3.5, compiled by Visual C++ build 1600, 32-bit e Qgis 2.6.1 Brighton.

Área de trabalho: gestão de redes de água.

Questão: Automatizar o processo da rotação de pontos de acordo com a linha base / nó final .

Actualmente a rotação de elementos pontuais é realizada em Qgis com recurso à ferramenta Rodar Simbolos de Pontos. ( As tabelas possuiem campo de rotação ).

Pretendia implementar uma função ou constrangimento topológico que forçasse a rotação de elementos pontuais aquadando da sua digitalização.

Aguardo feedback da comunidade e agradeço desde já o apoio de alguêm, que como eu já se tenha confrontado com esta questão.

Cumprimentos

Boa tarde,
viva o “spatial sql” !!! :wink:

Isto é uma ideia a quente e deverá precisar testes e mais dedicação…
Atenção, estou a considerar aqui linhas com apenas 2 pontos !!

— a criar dados de test…
– 1 tabela de linhas

create table myline (
id integer,
line geometry(linestring,3763)
);

– 1 table de pontos:
create table mypts (
id integer,
angulo float,
pt geometry(point,3763)
);

– inserir 2 lines (para os 2 exemplos)
insert into myline values (1,st_setsrid(ST_MakeLine(ST_MakePoint(0,0), ST_MakePoint(5,5)),3763));
insert into myline values (2,st_setsrid(ST_MakeLine(ST_MakePoint(10,10), ST_MakePoint(10,20)),3763));

– inserir um ponto en cima de cada linha… um em cima de um vertex, outro no meio da linha
insert into mypts values (1,null,st_setsrid(ST_MakePoint(0,0),3763));
insert into mypts values (2,null,st_setsrid(ST_MakePoint(10,15),3763));

---------------- A função para actualizar tabela de pontos com o ângulo:
– o ponto_a é o ponto que cruza a linha mais próximo
– o ponto_b é o segundo mais próximo

– com estes 2 , posso ter o azimuth.
– se for em cima de um vertex, adiciona 90 º ao azimuth senão fica o azimuth entre os 2 pontos.
– enfim, actualiza-se o campo do ângulo da tabela de pontos…

Do $$
declare
r record;
ang float;
dist float;
Begin

for r in select * from mypts
loop

with
ponto_a as
(select mypts.id,st_distance(ptl,pt) dist,ptl,st_distance(ptl,pt) from (select (st_dumppoints(line)).geom ptl from myline,mypts where st_intersects(line,pt) and mypts.id = r.id) as foo,mypts order by st_distance(ptl,pt) limit 1)

Elemento_1_Rotacao.jpg

Elemento_2_Rotacao.jpg

Elemento_2.jpg

Elemento_1.jpg

···

2015-02-05 12:23 GMT+00:00 Carlos Jacinto <carlosjacinto@hotmail.com>:

Olá a todos.

Versões: PostgreSQL 9.3.5, compiled by Visual C++ build 1600, 32-bit e Qgis 2.6.1 Brighton.

Área de trabalho: gestão de redes de água.

Questão: Automatizar o processo da rotação de pontos de acordo com a linha base / nó final .

Actualmente a rotação de elementos pontuais é realizada em Qgis com recurso à ferramenta Rodar Simbolos de Pontos. ( As tabelas possuiem campo de rotação ).

Pretendia implementar uma função ou constrangimento topológico que forçasse a rotação de elementos pontuais aquadando da sua digitalização.

Aguardo feedback da comunidade e agradeço desde já o apoio de alguêm, que como eu já se tenha confrontado com esta questão.

Cumprimentos


QGIS-pt mailing list
QGIS-pt@lists.osgeo.org
http://lists.osgeo.org/cgi-bin/mailman/listinfo/qgis-pt