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