4 votos

Recuperar los valores M de PostGIS `ST_Intersection`?

Estoy consultando la intersección de una vía de acceso (LinestringZM) a través de una región (MultiPolygon) pero el ST_Intersection devuelve sólo la Lat/Long/Alt coordenadas y necesito recuperar el tiempo, almacenados en los valores de M.

SELECT path.name AS path_name,
  ST_Length(path.geom::geography) AS distance,
  ST_Length(geography(ST_Intersection(path.geom,region.geom))) AS region_distance,
  ST_M(ST_EndPoint(path.geom)) - ST_M(ST_StartPoint(path.geom)) AS time,
  ST_M(ST_EndPoint(ST_Intersection(path.geom,region.geom))) - ST_M(ST_StartPoint(ST_Intersection(path.geom,region.geom))) AS region_time
  region.name AS region_name
FROM path INNER JOIN region ON ST_Intersects(path.geom, region.geom) 
ORDER BY vehicle_name, region_distance DESC;

¿Cómo puedo obtener el exacto tiempo transcurrido dentro de una región? (la de arriba region_time es nulo debido a coordinar M se deja caer. Yo estaba pensando en usar LATERAL select para obtener el equivalente de coincidencia segmento de la ruta original de este modo: ST_SharedPaths(path.geom,rel.intersection_path) ... LATERAL (SELECT ST_Intersection(path.geom,region.geom) AS intersection_path) AS rel

Pero que me da ERROR: GEOSSharedPaths: TopologyException: found non-noded intersection between LINESTRING (...

Estoy usando PostGIS 2.4 y PostgreSQL 10.1 beta, en caso de que los asuntos.

3voto

Ruchi Puntos 6

Yo uso varias funciones para hacer de la escritura que usted puede tomar aquí https://github.com/pauldzy/pg_dz_lrs/blob/master/Functions/LRS_INTERSECTION.sql

Podríamos registro de una mejora, pero creo que todos los mediocres M apoyo se deriva de los GEOS aplicación.

Saludos, Pablo

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