osmc:Metodologia/Algoritmo SQL/Issues: mudanças entre as edições

m
solução por ST_Simplify
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 public.geometry, srid integer, size_fraction float DEFAULT 0.05
   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>
2 384

edições