Ir para o conteúdo

CNEFE: mudanças entre as edições

sem sumário de edição
Sem resumo de edição
Linha 84: Linha 84:
drop view if exists vw02_ibge_cnefe2022;
drop view if exists vw02_ibge_cnefe2022;
create view vw02_ibge_cnefe2022 as
create view vw02_ibge_cnefe2022 as
select *, regexp_replace( coalesce(nom_tipo_seglogr,'') || ' '|| coalesce(nom_titulo_seglogr,'') ||' '|| coalesce(nom_seglogr,''), '\s+', ' ', 'g') as via_name,
select *, ST_GeoHash(geom,9) as ghs
ST_SetSRID(ST_MakePoint(longitude::float, latitude::float),4326) as geom
from (
from ibge_cnefe2022;
  select *, regexp_replace( coalesce(nom_tipo_seglogr,'') ||' '|| coalesce(nom_titulo_seglogr,'') ||' '|| coalesce(nom_seglogr,''), '\s+',' ','g') as via_name,
        ST_SetSRID(ST_MakePoint(longitude::float, latitude::float),4326) as geom
  from ibge_cnefe2022
) t
;
--select count(*) from ibge_cnefe2022; -- 762239
-- select count(*) from (select distinct ST_GeoHash(geom,9) as ghs, cod_setor, num_quadra, num_face, via_name, num_endereco from vw02_ibge_cnefe2022 -- same where geom is not null and via_name>'' and num_endereco>'' ) t; -- 379957
-- select 379957.0/762239; -- 49,847% = 50%
</pre>
 
* Unicidade de endereço: DISTINCT cod_setor, cep, via_name, num_endereco
* Unicidade de posição: DISTINCT ghs
* Filtrando unicidades: primeiro de endereço, porém incluindo array de geohashes distintos. Se forem vizinhos não possuem mesmo prefixo conferir maior distancia entre eles.
 
<pre>
CREATE FUNCTION hcodes_sameparent(g text[]) RETURNS boolean AS $f$
  SELECT  bool_and( CASE
    WHEN l1=l2 THEN substr(g1,1,l1-1)=substr(g2,1,l2-1)
    WHEN l1>l2 THEN g1 ~ ('^'||g2)  -- WHEN l1=l2+1
    ELSE g2 ~ ('^'||g1)  -- WHEN l2=l1+1  ELSE false
    END  )
  FROM (
    select g1, g2, length(g1) l1, length(g2) l2
    from unnest(g) WITH ORDINALITY AS a(g1,i1)
    inner join unnest(g) WITH ORDINALITY AS b(g2,i2)
      on i1<i2
    ) t1
$f$ LANGUAGE SQL;
 
CREATE FUNCTION geoms_maxdist(g geometry[], use_spheroid boolean default false) RETURNS float AS $f$
    SELECT MAX( ST_Distance(g1,g2,use_spheroid) )
    FROM unnest(g) WITH ORDINALITY AS a(g1,i1)
    INNER JOIN unnest(g) WITH ORDINALITY AS b(g2,i2)
      ON i1<i2
$f$ LANGUAGE SQL;


select count(*) from ibge_cnefe2022; -- 762239
create table ibge_cnefe2022_uniq1 AS  -- unicidade básica, ainda com repetição de pontos
  SELECT DISTINCT ghs, via_name, num_endereco
  FROM vw02_ibge_cnefe2022
; -- 379228 de 762239 = select round(100.0*379228.0/762239); = 50%


select count(*) from (select distinct ST_GeoHash(geom,9) as ghs, cod_setor, num_quadra, num_face, via_name, num_endereco
select avg(n) from (select ghs, count(*) n from ibge_cnefe2022_uniq1 group by 1) t
from vw02_ibge_cnefe2022 -- same where geom is not null and via_name>'' and num_endereco>''         
where n=1 -- n>1
) t; -- 379957
;
select 379957.0/762239; -- 49,847% = 50%
-- 325993 não-duplicados mais 2.16*24642 duplicados = 325993+2.16*24642 = 379220 ~ 379228.
 
create table ibge_cnefe2022_uniq_lixo AS  -- erro
with upt as (
  SELECT ghs FROM vw02_ibge_cnefe2022 group by 1 having count(*)=1
), uend as(
  SELECT cod_setor, cep, via_name, num_endereco
  FROM vw02_ibge_cnefe2022
  group by 1,2,3,4 having count(*)=1
) select i.ghs, i.cod_setor, i.cep, i.via_name, i.num_endereco  
  from upt inner join (vw02_ibge_cnefe2022 i inner join uend
    ON i.cod_setor=uend.cod_setor AND i.cep=uend.cep AND i.via_name=uend.via_name AND i.num_endereco=uend.num_endereco)
    ON upt.ghs=i.ghs
;
</pre>
</pre>


Só na redução de pontos para 50% já é bem drástica, provavelmente inclui casos que diferenciam apenas no complemento.
Só na redução de pontos para 50% já é bem drástica, provavelmente inclui casos que diferenciam apenas no complemento.
Falta eliminar mesmo ponto e mesmo endereço/CEP.
Falta eliminar mesmo ponto e mesmo endereço/CEP.
select count(*), count(distinct via_name||num_endereco) from (select distinct  cod_setor, via_name, num_endereco, cep
from vw02_ibge_cnefe2022         
) t; -- 288685 | 277160
2 402

edições