4 votos

Cómo comprobar si la línea pasa por un punto con PostGIS

Tengo una línea que representa una línea de autobús y una parada que representa una parada de autobús enter image description here

Los siguientes datos de muestra representan el problema

LINESTRING(-70.65357957000000511 -33.42323483999999922, -70.65181886999999961 -33.4232948200000024)
POINT(-70.65199072011725434 -33.42328896575632768)

El punto fue crear con el Método de interpolación de formas .

Ahora quiero comprobar si la línea pasa por la parada del autobús.

He probado lo siguiente:

SELECT 
ST_Intersects(
ST_GeomFromText('LINESTRING(-70.65357957000000511 -33.42323483999999922, -70.65181886999999961 -33.4232948200000024)'),
ST_GeomFromText('POINT(-70.65199072011725434 -33.42328896575632768)'))

Esto devuelve false . ¿Es posible con PostGIS averiguar si la línea cruza el punto?

Como solución estaba pensando en amortiguar los puntos, pero espero una solución más limpia.


En general quiero hacer una unión espacial, uniendo las líneas id a las paradas de autobús.

select lines.ogc_fid, stops.wkb_geometry from lines, stops WHERE ST_Intersects  (lines.wkb_geometry, stops.wkb_geometry)

ACTUALIZACIÓN : Me di cuenta de que los puntos simplemente no están en la línea. He ampliado mucho el zoom y el punto está al lado de la línea, no en la línea. Así que sólo una solución como el buffer funcionará.

5voto

evojacking Puntos 21

Puedes resolver este problema creando un buffer con tus líneas, ya que es posible que tus líneas no pasen por los puntos con precisión.

SELECT points.id FROM points JOIN lines on ST_Intersects(points.geom, ST_Buffer(lines.geom, number));

ACTUALIZACIÓN: La solución utilizando ST_DWithin() podría ser una mejor opción (gracias a @JohnBarca).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X