<div dir="ltr">Boa tarde,<div>viva o "spatial sql" !!!  ;)</div><div><br></div><div>Isto é uma ideia a quente e deverá precisar testes e mais dedicação...</div><div>Atenção, estou a considerar aqui linhas com apenas 2 pontos !! </div><div><br></div><div><br></div><div><br></div><div>--- a criar dados de test...</div><div>-- 1 tabela de linhas </div><div><div>create table myline (</div><div>id integer,</div><div>line geometry(linestring,3763)</div><div>);</div><div><br></div><div>-- 1 table de pontos:</div><div>create table mypts (</div><div>id integer,</div><div>angulo float,</div><div>pt geometry(point,3763)</div><div>);</div><div><br></div><div>-- inserir 2 lines (para os 2 exemplos)</div><div>insert into myline values  (1,st_setsrid(ST_MakeLine(ST_MakePoint(0,0), ST_MakePoint(5,5)),3763));</div><div>insert into myline values  (2,st_setsrid(ST_MakeLine(ST_MakePoint(10,10), ST_MakePoint(10,20)),3763));</div><div><br></div><div><br></div><div>-- inserir um ponto en cima de cada linha... um em cima de um vertex, outro no meio da linha</div><div>insert into mypts values  (1,null,st_setsrid(ST_MakePoint(0,0),3763));</div><div>insert into mypts values  (2,null,st_setsrid(ST_MakePoint(10,15),3763));</div></div><div><br></div><div><br></div><div><br></div><div>---------------- A função para actualizar tabela de pontos com o ângulo:</div><div>-- o ponto_a é o ponto que cruza a linha mais próximo</div><div>-- o ponto_b é o segundo mais próximo</div><div><br></div><div>-- com estes 2 , posso ter o azimuth.</div><div>-- se for em cima de um vertex, adiciona 90 º ao azimuth senão fica o azimuth entre os 2 pontos.</div><div>-- enfim,  actualiza-se o campo do ângulo da tabela de pontos....</div><div><div><br></div><div><br></div><div>Do $$</div><div>declare </div><div>r record;</div><div>ang float;</div><div>dist float;</div><div>Begin</div><div><br></div><div>for r in select * from mypts</div><div>loop</div><div><br></div><div>with </div><div>ponto_a as </div><div>(select <a href="http://mypts.id">mypts.id</a>,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 <a href="http://mypts.id">mypts.id</a> = <a href="http://r.id">r.id</a>) as foo,mypts order by st_distance(ptl,pt) limit 1)</div><div>,</div><div>ponto_b as </div><div>(select ptl,st_distance(ptl,pt) from (select (st_dumppoints(line)).geom ptl from myline,mypts where st_intersects(line,pt)  and <a href="http://mypts.id">mypts.id</a> = <a href="http://r.id">r.id</a>) as foo,mypts order by st_distance(ptl,pt) limit 1 offset 1)</div><div><br></div><div>select into dist,ang ponto_a.dist,degrees(st_azimuth(ponto_a.ptl,ponto_b.ptl)) from ponto_a,ponto_b;</div><div><br></div><div>if dist = 0 then ang = ang + 90; end if;</div><div><br></div><div>update mypts set angulo = ang where id = <a href="http://r.id">r.id</a>;</div><div><br></div><div>end loop;</div><div><br></div><div>end</div><div>$$;</div></div><div>------------------------------------------------------------------------</div><div><br></div><div><br></div><div><br></div><div><br></div><div>Abr,</div><div>Fred</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2015-02-05 12:23 GMT+00:00 Carlos Jacinto <span dir="ltr"><<a href="mailto:carlosjacinto@hotmail.com" target="_blank">carlosjacinto@hotmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<div><div dir="ltr"><br>Olá a todos.<br><br>Versões: PostgreSQL 9.3.5, compiled by Visual C++ build 1600, 32-bit e Qgis 2.6.1 Brighton. <br><br>Área de trabalho: gestão de redes de água.<br><br>Questão: Automatizar o processo da rotação de pontos de acordo com a linha base / nó final .<br><br>Actualmente
 a rotação de elementos pontuais é realizada em Qgis com recurso à 
ferramenta Rodar Simbolos de Pontos. ( As tabelas possuiem campo de 
rotação ).<br><br>Pretendia implementar uma função ou constrangimento 
topológico que forçasse a rotação de elementos pontuais aquadando da sua
 digitalização.<br><br>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.<span></span><br><br>Cumprimentos<br><br><br><div style="display:inline-block"><span> </span>    <div style="display:inline-block"><img src="cid:inlineImage4" height="219" width="319"><span></span>     <img src="cid:inlineImage8" height="220" width="319"><div style="display:inline-block"><br><br><div style="display:inline-block"><div style="display:inline-block"><img src="cid:inlineImage9" height="219" width="319"></div>    <span> </span></div><div style="display:inline-block">    <span> </span>    <div style="display:inline-block"><img src="cid:inlineImage10" height="220" width="323"></div>    <span> </span></div></div><span></span><span></span></div></div>                                       </div></div>
<br>_______________________________________________<br>
QGIS-pt mailing list<br>
<a href="mailto:QGIS-pt@lists.osgeo.org">QGIS-pt@lists.osgeo.org</a><br>
<a href="http://lists.osgeo.org/cgi-bin/mailman/listinfo/qgis-pt" target="_blank">http://lists.osgeo.org/cgi-bin/mailman/listinfo/qgis-pt</a><br>
<br></blockquote></div><br></div>