OSMBrasil / stable

Cópia filtrada segura e estável de dados oficiais do Brasil representados no OSM
Other
13 stars 5 forks source link

Arquivos de cache #27

Open ppKrauss opened 4 years ago

ppKrauss commented 4 years ago

Conforme ultimo post na issue 15, são previstos "arquivos cache" no repositório, ou seja, informações a priori redundantes mas que ajudam a comunidade a analisar e comparar os dados de cada versão estável.

A seguir sugestão de convenção para arquivos cache.

kx_sumary.csv de cada estado

Gerado por

CREATE MATERIALIZED VIEW stable.mvw_osm_city_polygon_summary AS
  SELECT  -osm_id AS osm_rel_id,  ibge_id, 'Q'||wikidata_id AS wikidata_id, name, uf
         ,round(st_area(way,true)/10000.0)/100 as area_km2
         ,(SELECT COUNT(*) FROM stable.mvw_osm_city_roads_inside  WHERE city_osm_id=v.osm_id) AS roads_inside
         ,(SELECT COUNT(*) FROM stable.mvw_osm_city_points_inside WHERE city_osm_id=v.osm_id) AS points_inside
  FROM vw_osm_city_polygon v
;

SELECT uf,  copy_csv(
    'kx_sumario.csv',
    format('select * from mvw_osm_city_polygon_summary where uf=%L',uf), 
    true,
    '/opt/gits/OSM/stable/data/'|| uf ||'/'
  )
FROM vw_brcodes_state;

kx_sumary.csv de cada estado/_roads

Necessário para apresentar a relação entre a road estadual e os municípios que ela serve, e cujos endereços eventualmente estarão referenciando. Um segundo arquivo de nomes municipais talvez seja relevante (o código ref nem sempre é adotado nos endereços).

kx_streets.csv de cada município

Necessário para apresentar a relação entre nome de rua local e nome simplificado (formato URN LEX), utilizado nos arquivos de endereçamento.
Relaciona <name_lex,original, ghs_pref_way, ghs_pref_pts>.


Funções de normalização de nomes

CREATE or replace FUNCTION stable.name2lex_pre(
  p_name       text                  -- 1
  ,p_normalize boolean DEFAULT true  -- 2
  ,p_cut       boolean DEFAULT true  -- 3
  ,p_unaccent  boolean DEFAULT false -- 4
) RETURNS text AS $f$
   SELECT
      CASE WHEN p_unaccent THEN lower(unaccent(x)) ELSE x END
   FROM (
     SELECT CASE WHEN p_normalize THEN stable.normalizeterm2($1,p_cut) ELSE $1 END
    ) t(x)
$f$ LANGUAGE SQL IMMUTABLE;
COMMENT ON FUNCTION stable.name2lex_pre IS 'Pre-processamento de limpeza de name2lex().';

CREATE or replace FUNCTION stable.name2lex(
  p_name       text                  -- 1
  ,p_normalize boolean DEFAULT true  -- 2
  ,p_cut       boolean DEFAULT true  -- 3
  ,p_flag      boolean DEFAULT false -- 4
) RETURNS text AS $f$
  SELECT trim(replace(
    regexp_replace(
      stable.name2lex_pre($1,$2,$3,$4),
      E' d[aeo] | d[oa]s | com | para |^d[aeo] | / .+| [aeo]s | [aeo] |\-d\'| d\'|[\-\' ]',
      '.',
      'g'
    ),
    '..',
    '.'
  ),'.')
$f$ LANGUAGE SQL IMMUTABLE;
COMMENT ON FUNCTION stable.name2lex IS 'Limpa e converte nome próprio para formato URN LEX BR';
-- stable.name2lex(E'Guarda-chuva d\'Água G\'ente',false,true,true);  -- guarda.chuva.agua.g.ente
CREATE or replace FUNCTION stable.geohash_pre(p_geom geometry, p_len int default 3) RETURNS text AS $f$
   -- prefixo de geohash até p_len letras (entrequadrantes no nordeste pode ficar com 'a')
   SELECT  CASE WHEN x='' THEN 'a' ELSE 'x' END
   FROM (SELECT substr(ST_Geohash(p_geom),1,p_len)) t(x)
$f$ LANGUAGE SQL IMMUTABLE;

CREATE or replace FUNCTION stable.road_prename(p_name text) RETURNS text AS $f$
   -- para usar com tags->'ref', fornece o pre-nome, cortando demais subpartes.
   SELECT replace( substring(p_name from '^[^;,/\-]+\-?[^;,/\-]+') , ' ', '')
$f$ LANGUAGE SQL IMMUTABLE;