Me gustaría encontrar todas las intersecciones de una LineString
(Río) a través de la Polygons
(Municipios). Me gustaría enumerar el orden de los municipios que el río cruces, utilizando la referencia lineal. Yo ya los han encontrado que los municipios son atravesadas por el río mediante st_intersects
, pero esto no me dan la orden y de cómo muchas veces los municipios se cruzan. No estoy esperando una solución completa, en lugar de un modus operandi que voy a implementar por mi auto.
Yo uso PostGIS
2 extensión con PostgreSQL
9.3
MWE:
WITH
A AS (
SELECT
curves.gid AS cgid,
shapes.gid AS sgid,
curves.geom AS cgeom,
shapes.geom AS sgeom,
st_intersection(curves.geom, shapes.geom) AS mgeom
FROM
curves, shapes),
B AS (
SELECT
cgid, sgid, cgeom, sgeom,
(st_dump(mgeom)).geom AS geom
FROM A),
C AS (
SELECT
row_number() OVER ()::INTEGER as gid,
cgid, sgid,
cgeom, sgeom, geom,
st_startPoint(geom) AS p0,
st_endPoint(geom) AS p1
FROM B),
D AS (
SELECT
C.*,
st_Line_Locate_Point(cgeom, p0) AS r0,
st_Line_Locate_Point(cgeom, p1) AS r1
FROM C
ORDER BY r0)
SELECT * FROM D
La consulta anterior a encontrar los puntos de entrada y puede ser utilizado en Referencia Lineal con el fin de seguir el original LineString a través de los municipios. Tengo que discriminar muchos casos de uso y estoy un poco perdido. Este es mi primer consultas en el SIG. Tabla shapes
contiene Polygons
que no tienen intersecciones y curves
contiene LineString
que pasan a través de los Polygons
.
El resultado esperado es, para cada LineString
, la lista de Polygons
que se cruza (orden y redondance importa).