2 384
edições
m (solução por ST_Simplify) |
|||
Linha 165: | Linha 165: | ||
<syntaxhighlight lang="sql"> | <syntaxhighlight lang="sql"> | ||
DROP FUNCTION IF EXISTS st_transform_resilient | |||
; | |||
CREATE FUNCTION public.st_transform_resilient( | CREATE FUNCTION public.st_transform_resilient( | ||
g | g geometry, | ||
srid integer, | |||
size_fraction float DEFAULT 0.05, | |||
tolerance float DEFAULT 0 -- 0.00000005 | |||
) RETURNS public.geometry | ) RETURNS public.geometry | ||
LANGUAGE sql IMMUTABLE | LANGUAGE sql IMMUTABLE | ||
AS $f$ | AS $f$ | ||
SELECT CASE | |||
WHEN COALESCE(tolerance,0)>0 THEN -- ST_Simplify(celula) ou | |||
ST_SimplifyPreserveTopology(geom,tolerance) -- generico | |||
ELSE geom | |||
END | |||
FROM ( | |||
-- discuss ideal at https://gis.stackexchange.com/q/444441/7505 | -- discuss ideal at https://gis.stackexchange.com/q/444441/7505 | ||
SELECT CASE | SELECT CASE | ||
WHEN size>0.0 THEN ST_Transform( ST_Segmentize(g,size) , srid ) | WHEN size>0.0 THEN ST_Transform( ST_Segmentize(g,size) , srid ) | ||
ELSE ST_Transform(g,srid) | ELSE ST_Transform(g,srid) | ||
END | END geom | ||
FROM ( | FROM ( | ||
SELECT CASE | SELECT CASE | ||
Linha 182: | Linha 193: | ||
END | END | ||
) t1(size) | ) t1(size) | ||
) t2 | |||
$f$; | $f$; | ||
</syntaxhighlight> | </syntaxhighlight> |
edições