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 <[email protected] <mailto:[email protected]>> 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 <[email protected]
    <mailto:[email protected]>> 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" <[email protected]
    <mailto:[email protected]>> 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
    <[email protected] <mailto:[email protected]>
    >>> <mailto:[email protected] <mailto:[email protected]>>>
    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
    <[email protected] <mailto:[email protected]>
    >>> <mailto:[email protected]
    <mailto:[email protected]>>> 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
    >>>> <[email protected] <mailto:[email protected]>
    <mailto:[email protected] <mailto:[email protected]>>>
    >>>> 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
    >>>> [email protected] <mailto:[email protected]>
    <mailto:[email protected] <mailto:[email protected]>>
    >>>> http://lists.osgeo.org/mailman/listinfo/portugal
    >>>>
    >>>>
    >>>>
    >>>>
    >>>> _______________________________________________
    >>>> Portugal mailing list
    >>>> [email protected] <mailto:[email protected]>
    <mailto:[email protected] <mailto:[email protected]>>
    >>>> http://lists.osgeo.org/mailman/listinfo/portugal
    >>>
    >>>
    >>> _______________________________________________
    >>> Portugal mailing list
    >>> [email protected] <mailto:[email protected]>
    <mailto:[email protected] <mailto:[email protected]>>
    >>> http://lists.osgeo.org/mailman/listinfo/portugal
    >>>
    >>>
    >>>
    >>>
    >>>
    >>> _______________________________________________
    >>> Portugal mailing list
    >>> [email protected] <mailto:[email protected]>
    >>> http://lists.osgeo.org/mailman/listinfo/portugal
    >
    >
    > _______________________________________________
    > Portugal mailing list
    > [email protected] <mailto:[email protected]>
    > http://lists.osgeo.org/mailman/listinfo/portugal
    >
    >
    > _______________________________________________
    > Portugal mailing list
    > [email protected] <mailto:[email protected]>
    > http://lists.osgeo.org/mailman/listinfo/portugal
    >
    >




_______________________________________________
Portugal mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/portugal

_______________________________________________
Portugal mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/portugal

Responder a