8 votos

Como borrar las pequeñas lagunas (astillas) entre polígonos después de la fusión de polígonos adyacentes con PostGis

Yo intente eliminar las astillas que apareció cuando he combinación de algunos polígonos.

Tengo dos casos diferentes:enter image description here

Para el CASO 1, no hay problema, me llene el hueco con:

CREATE OR REPLACE FUNCTION sliver_killer(geometry,float) RETURNS geometry AS
$$ SELECT ST_BuildArea(ST_Collect(a.geom)) as final_geom
FROM ST_DumpRings($1) AS a
WHERE a.path[1] = 0 OR
(a.path[1] > 0 AND ST_Area(a.geom) > $2)
$$
LANGUAGE 'sql' IMMUTABLE;

UPDATE merged SET geom = sliver_killer(geom,50::float);

Una función que llenar todos los huecos más pequeños de x metro cuadrado.

PERO para el CASO 2, cuando los pequeños espacios que son "abiertas" yo no puedo manejar para llenar esos vacíos.

He intente algo como: buffer(1), seguida de búfer(-1), pero por supuesto puedo obtener algunas esquinas redondeadas. ¿Alguien tiene una verdadera solución ?

6voto

obchardon Puntos 126

OK he encontrado una respuesta:

Se puede evitar para conseguir esquinas redondeadas añadiendo el parámetro 'join=mitre' para st_buffer:

Así que funciona perfectamente bien con:

SELECT st_buffer(st_buffer(geom,1,'join=mitre'),-1,'join=mitre') FROM mygeotable;

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