Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Arquivos de cache #27

Open
ppKrauss opened this issue Mar 5, 2020 · 0 comments
Open

Arquivos de cache #27

ppKrauss opened this issue Mar 5, 2020 · 0 comments

Comments

@ppKrauss
Copy link
Collaborator

ppKrauss commented Mar 5, 2020

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;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant