Re: [Portugal] expressão sql para preencher tabela com rua mais próxima

Diego Moreira moreira.geo at gmail.com
Fri Aug 19 08:13:45 EDT 2011


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,
Agora eu acho que resolve


"UPDATE passeios SET rua =
(SELECT FID_ FROM eixos_rua ORDER BY
ST_Distance(*ST_Line_Interpolate_Point(eixos_rua.wkb_geometry,
0.5)* , passeios.wkb_geometry) ASC LIMIT 1)"


Diego Moreira Carvalho




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


More information about the Portugal mailing list