Ir para o conteúdo

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

Linha 132: Linha 132:
<syntaxhighlight lang="sql">
<syntaxhighlight lang="sql">
select hlevel, count(*) n_cells, round(sqrt(max(st_area(geom)))/1000.0) side_km,
select hlevel, count(*) n_cells, round(sqrt(max(st_area(geom)))/1000.0) side_km,
       round(avg(ST_NPoints(geom))) npts_geom, round(avg(ST_NPoints(geom4326))) npts_geom,
       round(avg(ST_NPoints(geom))) geom_npts,
       round(avg(ST_NPoints(st_simplify(geom4326,0.00000005)))) npts_simpl
      round(avg(ST_CharactDiam(geom))) as geom_chdiam, -- relative ref.
      round(avg(ST_NPoints(geom4326))) g4326_npts,
       round(avg(ST_NPoints(st_simplify(geom4326,0.00000005)))) g4326simpl_npts
      -- 0.00000005 is SRID-metric absolute ref
from grid_cm.all_levels
from grid_cm.all_levels
group by 1 order by 1;
group by 1 order by 1;
Linha 160: Linha 163:


Na resposta da questão quebrar em duas,  "general" depois "grids" (exemplificar com níveis inteiros pulando os meios).  Nas grades supor que só um eixo precisa de pontos ... Ver eles no QGIS ou pelo menos nos dados de 11 pontos. O segmentize aplicado a uma só direção é complexo, não vale a pena.
Na resposta da questão quebrar em duas,  "general" depois "grids" (exemplificar com níveis inteiros pulando os meios).  Nas grades supor que só um eixo precisa de pontos ... Ver eles no QGIS ou pelo menos nos dados de 11 pontos. O segmentize aplicado a uma só direção é complexo, não vale a pena.
<syntaxhighlight lang="sql">
CREATE FUNCTION public.st_transform_resilient(
  g public.geometry, srid integer, size_fraction float DEFAULT 0.05
) RETURNS public.geometry
    LANGUAGE sql IMMUTABLE
AS $f$
  -- discuss ideal at https://gis.stackexchange.com/q/444441/7505
  SELECT CASE
    WHEN size>0.0 THEN  ST_Transform(  ST_Segmentize(g,size)  , srid  )
    ELSE  ST_Transform(g,srid)
    END
  FROM (
    SELECT CASE
        WHEN size_fraction IS NULL THEN 0.0
        WHEN size_fraction<0 THEN -size_fraction
        ELSE ST_CharactDiam(g) * size_fraction
        END
  ) t1(size)
$f$;
</syntaxhighlight>
2 384

edições