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

Pedro Costa pedrocostaarma at sapo.pt
Fri Aug 19 11:53:17 EDT 2011


Encontrei que podemos acrescentar geometryN para aceita multi-geometrias:

UPDATE passeios
SET rua =
(SELECT FID_ FROM ruas


ORDER BY 
ST_Distance(ST_Line_Interpolate_Point(geometryN(ruas.wkb_geometry, 0.5), 
passeios.wkb_geometry)) ASC LIMIT 1)


No entanto não reconhece a função



On 19-08-2011 13:28, Diego Moreira wrote:
> Resolveu?
>
> Diego Moreira Carvalho
>
>
>
> Em 19 de agosto de 2011 09:13, Diego Moreira <moreira.geo  gmail.com 
> <mailto:moreira.geo  gmail.com>> escreveu:
>
>     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
>     <mailto: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
>     <mailto: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>
>     >>> <mailto: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>
>     >>> <mailto: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>
>     <mailto: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>
>     <mailto: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>
>     <mailto: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>
>     <mailto: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 <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

-------------- próxima parte ----------
Um anexo em HTML foi limpo...
URL: http://lists.osgeo.org/pipermail/portugal/attachments/20110819/ddbaa1cb/attachment-0001.html


More information about the Portugal mailing list