4 votos

Recorta el polígono superpuesto en partes iguales de tamaño compartido

Dentro de un único shapefile estoy tratando de recortar polígonos superpuestos a sus límites utilizando la línea central del área superpuesta usando Postgis u ogr2ogr.

Muestra

Intenté usar el comando ogr2ogr para eliminar fragmentos

ogr2ogr dissolved.shp input.shp -dialect sqlite \
-sql "select ST_union(ST_buffer(Geometry, 10)),common_attribute from input GROUP BY common_attribute"

Pero cada polígono en mi shapefile tiene atribuciones únicas, por lo que no puedo usar ST_UNION.

También intenté usar la base de datos postgreSQL con la extensión Postgis ST_Difference pero también sin éxito.

Mi problema principal es que no puedo encontrar un método para recortar polígonos en partes de igual tamaño.

3voto

mataap Puntos 121

Aquí hay una solución en PostGIS que se ajusta al caso de uso (imagen) que describes. Sin embargo, hay algunas suposiciones:

  1. Supone polígonos simples (no multi)
  2. Cada polígono es intersectado solo por otro polígono (puedes solucionarlo, pero requiere más codificación).
  3. Habrá una línea recta entre los puntos de corte del polígono (que puede que no sea la línea central que estás buscando)

WITH polygons AS (
    SELECT 1 as id, ST_Buffer(ST_MakePoint(10,10),3) geom
    UNION ALL
    SELECT 2 as id, ST_Buffer(ST_MakePoint(5,10),3) geom
    --Descomenta esto para ver qué sucede cuando múltiples polígonos se superponen
    --UNION ALL
    --SELECT 3 as id, ST_Buffer(ST_MakePoint(7.5,7.5),3) geom
)
,cut_polygons AS (
    SELECT  a.id, 
      ST_LineMerge(
        ST_Difference(ST_ExteriorRing(a.geom), b.geom)
      ) geom
    FROM polygons a
    LEFT JOIN polygons b ON (ST_Intersects(a.geom, b.geom) AND a.id != b.id)

)
SELECT id, ST_MakePolygon(ST_AddPoint(geom, ST_StartPoint(geom))) geom
FROM cut_polygons;

El truco está en que los polígonos primero se convierten a linestrings (ST_ExteriorRing) que son cortados por un polígono que se superpone (ST_Difference). El resultado es un linestring (ST_LineMerge) con un espacio. Cuando llenas ese espacio con una línea recta (ST_AddPoint) tienes un polígono (ST_MakePolygon) que está más o menos dividido en el centro de la superposición.

0 votos

Gracias por la ayuda. Puede que te interese la segunda pregunta que es continuación de esta pregunta. gis.stackexchange.com/questions/251496/…

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