2 391
edições
m (solução por ST_Simplify) |
|||
Linha 168: | Linha 168: | ||
; | ; | ||
CREATE FUNCTION public.st_transform_resilient( | CREATE FUNCTION public.st_transform_resilient( | ||
g geometry, | g geometry, -- the input geometry | ||
srid integer, | srid integer, -- target SRID, to transform g | ||
size_fraction float DEFAULT 0.05, | size_fraction float DEFAULT 0.05, -- 1/density for target density of points, relative to ST_CharactDiam. | ||
tolerance float DEFAULT 0 -- 0.00000005 | tolerance float DEFAULT 0 -- e.g. on srid=4326 use 0.00000005 | ||
) RETURNS public.geometry | ) RETURNS public.geometry | ||
LANGUAGE sql IMMUTABLE | LANGUAGE sql IMMUTABLE | ||
AS $f$ | AS $f$ | ||
SELECT CASE | SELECT CASE | ||
WHEN COALESCE(tolerance,0)>0 THEN | WHEN COALESCE(size_fraction,0.0)>0.0 AND COALESCE(tolerance,0)>0 THEN | ||
ST_SimplifyPreserveTopology(geom,tolerance) -- | ST_SimplifyPreserveTopology(geom,tolerance) -- ST_Simplify enough for grid cells | ||
ELSE geom | ELSE geom | ||
END | END | ||
Linha 185: | Linha 185: | ||
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 geom | END geom, size | ||
FROM ( | FROM ( | ||
SELECT CASE | SELECT CASE |
edições