O método ST_Line_Interpolate_Point retorna um ponto ao longo de uma linha dado uma porcentagem do comprimento desta linha.... se passarmos sempre 0.5, teremos sempre o meio da linha... independente do numero de vértices que ela tem,<br>
Agora eu acho que resolve<br><br><br>&quot;UPDATE passeios SET rua =<br>(SELECT FID_ FROM eixos_rua ORDER BY ST_Distance(<b>ST_Line_Interpolate_Point(eixos_rua.wkb_geometry, 0.5)</b> , passeios.wkb_geometry) ASC LIMIT 1)&quot;<br>
<br><br>Diego Moreira Carvalho<br><br><br><br><br>Em 19 de agosto de 2011 08:54, Pedro Costa &lt;<a href="mailto:pedrocostaarma@sapo.pt">pedrocostaarma@sapo.pt</a>&gt; escreveu:<br>&gt; Exactamente, neste caso estou a mudar a unha,  mas sabes alguma maneira mais<br>
&gt; rápida?<br>&gt;<br>&gt; Obrigado<br>&gt;<br>&gt;<br>&gt;<br>&gt; On 19-08-2011 12:50, Diego Moreira wrote:<br>&gt;<br>&gt; Provavelmente os mal atribuídos estao relacionados a ruas que tem somente<br>&gt; dois ou tres pontos.... da para resolver...<br>
&gt;<br>&gt; Em 19/08/2011 06:47, &quot;Pedro Costa&quot; &lt;<a href="mailto:pedrocostaarma@sapo.pt">pedrocostaarma@sapo.pt</a>&gt; escreveu:<br>&gt;&gt; Caro Diego,<br>&gt;&gt;<br>&gt;&gt; Funcionou... Obrigado pela ajuda.<br>
&gt;&gt; Apesar de tudo alguns passeios ainda são mal atribuídos, mas melhorou<br>&gt;&gt; bastante...<br>&gt;&gt;<br>&gt;&gt; Com os melhores cumprimentos,<br>&gt;&gt;<br>&gt;&gt; Pedro Costa<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt;<br>
&gt;&gt;<br>&gt;&gt;<br>&gt;&gt; Em 18-08-2011 20:04, Diego Moreira escreveu:<br>&gt;&gt;&gt; Acho que vai dar certo, o pg numa divisão do tipo 3/2 retorna 1,<br>&gt;&gt;&gt; retornaria 1.5 se fosse 3.0/2...<br>&gt;&gt;&gt; Então... acho que vai funcionar.<br>
&gt;&gt;&gt;<br>&gt;&gt;&gt; Diego Moreira Carvalho<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; Em 18 de agosto de 2011 16:00, Diego Moreira &lt;<a href="mailto:moreira.geo@gmail.com">moreira.geo@gmail.com</a><br>
&gt;&gt;&gt; &lt;mailto:<a href="mailto:moreira.geo@gmail.com">moreira.geo@gmail.com</a>&gt;&gt; escreveu:<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; NumPoints(geometry)<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; Encontra e Retorna o número de pontos na primeira linha na<br>
&gt;&gt;&gt; geometria. Retorna NULO se não há nenhuma linha na geometria.<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; PointN(geometry,integer)<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; Retorna o enésimo ponto na primeira linha na geometria.<br>
&gt;&gt;&gt; Retorna NULO se não há nenhuma linha na geometria.<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; &quot;UPDATE passeios SET rua =<br>&gt;&gt;&gt; (SELECT FID_ FROM eixos_rua ORDER BY<br>&gt;&gt;&gt; ST_Distance(PointN(eixos_rua.wkb_geometry,<br>
&gt;&gt;&gt; NumPoints(eixos_rua.wkb_geometry)/2) , passeios.wkb_geometry) ASC<br>&gt;&gt;&gt; LIMIT 1)&quot;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; Sera que isso dá certo? caso não, o problema é que a função PointN<br>
&gt;&gt;&gt; espera receber um inteiro, mas o resultado da divisão por 2<br>&gt;&gt;&gt; retorna um numero tipo 3.5<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; Diego Moreira Carvalho<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>
&gt;&gt;&gt; Em 18 de agosto de 2011 15:49, Pedro Costa &lt;<a href="mailto:pedrocostaarma@sapo.pt">pedrocostaarma@sapo.pt</a><br>&gt;&gt;&gt; &lt;mailto:<a href="mailto:pedrocostaarma@sapo.pt">pedrocostaarma@sapo.pt</a>&gt;&gt; escreveu:<br>
&gt;&gt;&gt;<br>&gt;&gt;&gt; É exactamente por isso Diego. Mas sabes como faço para<br>&gt;&gt;&gt; determinar a contagem de pontos em sql?<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; Obrigado<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>&gt;&gt;&gt; On 18-08-2011 19:40, Diego Moreira wrote:<br>&gt;&gt;&gt;&gt; Boa tarde Pedrom<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; Acredito que tal problema ocorre porque as vezes a<br>&gt;&gt;&gt;&gt; estremidade da rua adjacente a que deveria ser escolhida é<br>
&gt;&gt;&gt;&gt; mais próxima. Acho que o problema pode ser resolvido da<br>&gt;&gt;&gt;&gt; seguinte forma:<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; Pego o ponto n/2 do eixo da rua: se a rua tem dez pontos pego<br>&gt;&gt;&gt;&gt; o 5 ponto, e executo aquela mesma sql, só que com este ponto,<br>
&gt;&gt;&gt;&gt; e não com a geometria(eixos_rua.wkb_geometry).<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; Acho que deve resolver.<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; Espero ter ajudado.<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; Diego Moreira Carvalho<br>
&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; Em 18 de agosto de 2011 11:39, Pedro Costa<br>&gt;&gt;&gt;&gt; &lt;<a href="mailto:pedrocostaarma@sapo.pt">pedrocostaarma@sapo.pt</a> &lt;mailto:<a href="mailto:pedrocostaarma@sapo.pt">pedrocostaarma@sapo.pt</a>&gt;&gt;<br>
&gt;&gt;&gt;&gt; escreveu:<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; Pessoal é o seguinte, eu tenho duas tabelas no pgadmin<br>&gt;&gt;&gt;&gt; (passeios e ruas), e quero que o campo rua dos passeios<br>&gt;&gt;&gt;&gt; seja prenchido pela rua correspondente. Isto pode<br>
&gt;&gt;&gt;&gt; fazer-se em função da distância, como o João Carvalho me<br>&gt;&gt;&gt;&gt; ajudou:<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; &quot;UPDATE passeios SET rua = (SELECT FID_ FROM eixos_rua<br>&gt;&gt;&gt;&gt; ORDER BY<br>
&gt;&gt;&gt;&gt; ST_Distance(eixos_rua.wkb_geometry,passeios.wkb_geometry)<br>&gt;&gt;&gt;&gt; ASC LIMIT 1)&quot;<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; No entanto em muitos casos a rua escolhida não é a<br>&gt;&gt;&gt;&gt; correspondente, esta query não é muito eficiente neste<br>
&gt;&gt;&gt;&gt; caso. Alguém sabe uma maneira diferente em que seja<br>&gt;&gt;&gt;&gt; escolhida a rua que está mais próxima &quot;em toda a sua<br>&gt;&gt;&gt;&gt; extensão&quot;?<br>&gt;&gt;&gt;&gt; Podem ver a imagem em anexo para perceberem melhor, as<br>
&gt;&gt;&gt;&gt; linhas verdes são os passeios e as vermelhas os eixos de<br>&gt;&gt;&gt;&gt; rua. Alguém tem alguma ideia que possa ajudar?<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; Obrigado<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt;&gt; Portugal mailing list<br>&gt;&gt;&gt;&gt; <a href="mailto:Portugal@lists.osgeo.org">Portugal@lists.osgeo.org</a> &lt;mailto:<a href="mailto:Portugal@lists.osgeo.org">Portugal@lists.osgeo.org</a>&gt;<br>&gt;&gt;&gt;&gt; <a href="http://lists.osgeo.org/mailman/listinfo/portugal">http://lists.osgeo.org/mailman/listinfo/portugal</a><br>
&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; _______________________________________________<br>&gt;&gt;&gt;&gt; Portugal mailing list<br>&gt;&gt;&gt;&gt; <a href="mailto:Portugal@lists.osgeo.org">Portugal@lists.osgeo.org</a> &lt;mailto:<a href="mailto:Portugal@lists.osgeo.org">Portugal@lists.osgeo.org</a>&gt;<br>
&gt;&gt;&gt;&gt; <a href="http://lists.osgeo.org/mailman/listinfo/portugal">http://lists.osgeo.org/mailman/listinfo/portugal</a><br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt; Portugal mailing list<br>&gt;&gt;&gt; <a href="mailto:Portugal@lists.osgeo.org">Portugal@lists.osgeo.org</a> &lt;mailto:<a href="mailto:Portugal@lists.osgeo.org">Portugal@lists.osgeo.org</a>&gt;<br>&gt;&gt;&gt; <a href="http://lists.osgeo.org/mailman/listinfo/portugal">http://lists.osgeo.org/mailman/listinfo/portugal</a><br>
&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; _______________________________________________<br>&gt;&gt;&gt; Portugal mailing list<br>&gt;&gt;&gt; <a href="mailto:Portugal@lists.osgeo.org">Portugal@lists.osgeo.org</a><br>
&gt;&gt;&gt; <a href="http://lists.osgeo.org/mailman/listinfo/portugal">http://lists.osgeo.org/mailman/listinfo/portugal</a><br>&gt;<br>&gt;<br>&gt; _______________________________________________<br>&gt; Portugal mailing list<br>
&gt; <a href="mailto:Portugal@lists.osgeo.org">Portugal@lists.osgeo.org</a><br>&gt; <a href="http://lists.osgeo.org/mailman/listinfo/portugal">http://lists.osgeo.org/mailman/listinfo/portugal</a><br>&gt;<br>&gt;<br>&gt; _______________________________________________<br>
&gt; Portugal mailing list<br>&gt; <a href="mailto:Portugal@lists.osgeo.org">Portugal@lists.osgeo.org</a><br>&gt; <a href="http://lists.osgeo.org/mailman/listinfo/portugal">http://lists.osgeo.org/mailman/listinfo/portugal</a><br>
&gt;<br>&gt;<br><br>