Created
November 11, 2011 18:13
-
-
Save cassioeskelsen/1358733 to your computer and use it in GitHub Desktop.
Como colocar um ponto sobre uma linestring no Postgis
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Essa consulta retorna o mais próximo Point que compõe a mais próxima MULTILINESTRING de uma tabela (no caso aqui, "eixos") | |
de um POINT qualquer (representado aqui por ST_GeomFromText('POINT(lon lat)',4326) | |
Substitua o SRID 4326 caso sua base não esteja em wgs_84 | |
Obs: até o PostGIS 1.5 as funções ST_LINE_LOCATE_POINT e ST_LINE_INTERPOLATE_POINT não suportam MULTILINESTRING | |
por isso usei a função GeometryN para pegar a primeira LINESTRING do campo geométrico. Se o seu campo geométrico | |
for LINESTRING você pode eliminar essa função | |
*/ | |
select ST_Line_Interpolate_Point( | |
GeometryN( the_geom,1), | |
( ST_Line_Locate_Point ( | |
geometryn( the_geom,1), | |
ST_GeomFromText('POINT(lon lat)',4326) | |
) | |
) | |
) | |
from ( select the_geom | |
from eixos | |
order by st_distance( | |
eixos.the_geom, | |
ST_GeomFromText('POINT(lon lat)',4326) | |
) | |
limit 1 | |
) as nearest_segment |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment