Skip to content

Instantly share code, notes, and snippets.

@cassioeskelsen
Created November 11, 2011 18:13
Show Gist options
  • Save cassioeskelsen/1358733 to your computer and use it in GitHub Desktop.
Save cassioeskelsen/1358733 to your computer and use it in GitHub Desktop.
Como colocar um ponto sobre uma linestring no Postgis
/*
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