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

Pedro Costa pedrocostaarma at sapo.pt
Mon Aug 29 05:52:16 EDT 2011


Pessoal,

Escrevo só para apresentar resultados. Testei em vários shapes e 
funciona muito bem. Em casos com cerca de 2500 features só à volta de 
cinco erros, em situações muito específicos, algumas /esquesitisses/ de 
ruas :-)... Mas com uma querie pré-definida são logo detectados e 
corrigidos...
O script ficou porreiro por isso muito obrigado a todos os que 
contribuíram, especialmente ao João Carvalho e ao Diego Moreira... 
Consigo poupar muito tempo de trabalho assim.
Queria acrescentar mais a opção das paralelas mas acho que não vai dar. 
O essencial também está feito.
Se alguém precisar de fazer algo parecido e precisar de ajuda que diga.

Abraço

Obrigado

Com os melhores cumprimentos,





Em 19-08-2011 13:13, Diego Moreira 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/20110829/309507cd/attachment.html


More information about the Portugal mailing list