Estoy tratando de recortar una serie de líneas seleccionando sólo la parte de la geometría fuera de un polígono utilizando PostGIS.
De mi lectura sobre lo que st_intersection
es decir, devuelve una geometría que representa la parte compartida de geomA y geomB. Me gustaría hacer lo contrario de esto, es decir, devolver la geometría que no es compartida por geomA y geomB.
He estado tratando de trabajar con st_difference
que debería devolver una geometría que representa la parte de la geometría A que no se cruza con la geometría B. Pero estoy teniendo algunos problemas para obtener el resultado que quiero. Esto es lo que he escrito hasta ahora...
SELECT
t.id, ST_Difference(t.the_geom_webmercator, t1.dock) as intersection
FROM
trips t,
(select
d.id, d.name,ST_Buffer(ST_Centroid(the_geom_webmercator),1000) as dock
from
docks d) as t1
WHERE
ST_Intersects(t.the_geom_webmercator,t1.dock)
t.id IN (25558, 25555, 25553, 25533, 25517, 25523, 25501, 25506,25532,25439)
and ST_Difference(t.the_geom_webmercator, t1.dock) is not null
Esto devuelve
- las líneas rosas son el resultado de la consulta anterior, por lo que algunas líneas se detienen en los límites del círculo y otras no
- los círculos son los polígonos por los que quiero recortar todo,
- la línea de puntos subyacente es el resultado de básicamente la misma consulta que la anterior, sustituyendo
st_intersection
const_difference
que devuelve la inversa del resultado deseado, es decir, las geometrías dentro de los círculos.
1 votos
Construiría la intersección y luego quitaría esos puntos del total. Otra posibilidad es construir un compuesto de todos los círculos y luego hacer la operación. No puedes hacerlo uno por uno porque mientras un punto está en un círculo, no está intersectando la mayoría de los otros círculos.