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

Normalização dos nomes de via nas listagens de endereço #31

Open
ppKrauss opened this issue Mar 16, 2020 · 1 comment
Open

Normalização dos nomes de via nas listagens de endereço #31

ppKrauss opened this issue Mar 16, 2020 · 1 comment
Labels
Aguardando ajuda Atenção extra é necessária, aguardando Central de discussão A issue é a página principal para registrar decisões e discussões sobre o tópico Controle de Qualidade Tarefa de revisão ou controle de qualidade

Comments

@ppKrauss
Copy link
Collaborator

ppKrauss commented Mar 16, 2020

Os relagtórios estatísticos e mapas do OSM-Stable requerem normalização dos nomes de via, tanto nos mapas de linhas (tabela planet_osm_roads) relativas a highway e railway, como pontos (planet_osm_point) contendo tag addr:street.


Tecnicamente, analisando nesta issue as estatísticas de nomes conforme:

CREATE or replace FUNCTION stable.addrstreet2lexname(nome text) RETURNS text AS $f$
    SELECT trim( stable.name2lex($1,true,true,true), '.' )
$f$ LANGUAGE SQL IMMUTABLE;
COMMENT ON FUNCTION stable.addrstreet2lexname 
  IS 'Normaliza nome de tag addr:street com name2lex()'
;
CREATE table stable.kx_street_names  AS 
 SELECT name, array_agg(distinct pt) AS from_pt, count(*) n_names, sum(n) n_occurs
 FROM (
  (select
     stable.addrstreet2lexname(tags->>'addr:street') AS name, true pt, 
     count(*) n
  from planet_osm_point
  where tags?'addr:street'
  group by 1,2
  )
  UNION
  (select
       stable.addrstreet2lexname(tags->>'name'),
       false pt , count(*)  n
  from planet_osm_roads 
  where tags?'name' AND (tags?'highway' OR tags?'railway')
  group by 1,2
  )
  UNION
  (select
       stable.addrstreet2lexname(tags->>'official_name'), 
       false pt , count(*)
  from planet_osm_roads 
  where tags?'official_name' AND (tags?'highway' OR tags?'railway')
  group by 1,2
  )  --  só tem uns 10 a 100  itens de official_name
 ) t GROUP BY 1 ORDER BY 1 
; -- 50348
---------------------
CREATE VIEW stable.vw01main_street_dicnames AS  
  SELECT p, count(*) n from (
    select regexp_split_to_table(name,'\.') AS p
    from stable.kx_street_names  
  ) t 
  GROUP BY p 
  HAVING count(*)>100  
  order by 2 desc, 1
 ;
CREATE VIEW stable.vw01main_street_dicnames AS  
  SELECT name_part, from_pt, count(*) n from (
    select regexp_split_to_table(name,'\.') AS name_part, from_pt
    from stable.kx_street_names  
  ) t 
  GROUP BY name_part,  from_pt
  HAVING count(*)>100  
  order by 2 desc, 1
 ;

São duas decisões a tomar:

  1. Normalização: está boa a sugestão dos lexnames? Ideia é poder reusar o formato nas URLs de busca.
  2. Precisamos criar uma convenção de separação automatica de prefixo (como nos Correios separa-se o prefixo de logradouro do resto do nome), e abreviação das palavras mais frequentes.

Exemplo:

palavra freq_dic prefixo? Abreviar?
rua 27461 sim não
avenida 10231 sim sim
jose 2568 não não
joao 1764 não não
estrada 1743 sim sim
rodovia 1733 sim sim
antonio 1592 não não
doutor 1572 não sim
praca 1316 sim sim
silva 1041 não não
francisco 987 não não
coronel 747 não sim
... ... ... ...

Tabela completa para completar manualmente as colunas "prefixo?" e "abreviar?".

@ppKrauss ppKrauss added Aguardando ajuda Atenção extra é necessária, aguardando Central de discussão A issue é a página principal para registrar decisões e discussões sobre o tópico Controle de Qualidade Tarefa de revisão ou controle de qualidade labels Mar 16, 2020
@ppKrauss
Copy link
Collaborator Author

Resumo das contagens e sua significância: parece que a quantidade de segmentos nomeados (road_name_distinct_n abaixo) é a metade da quantidade de pontos nomeados (pt_street_distinct_n), portanto será um fator limitante para o casamento entre pontos e geometria das ruas (impossível superar os 50%). O número real de "casados" (n_casados) é pequeno, dos ~30 mil nomeados, apenas ~6 mil se casam.

-- CONTAGENS:

select count(*) pt_street_n, count(distinct  tags->'addr:street') pt_street_distinct_n
from planet_osm_point  where tags?'addr:street'
; -- pt_street_n=302068 | pt_street_distinct_n=29229

select count(*) road_name_n, count(distinct  tags->'name') road_name_distinct_n
from planet_osm_roads 
where tags?'name' AND (tags?'highway' OR tags?'railway')
; --  road_name_n | road_name_distinct_n
  --  169676      |                29480

select count(*) road_ofname_n, count(distinct  tags->'official_name') road_ofname_distinct_n  
from planet_osm_roads 
where tags?'official_name' AND (tags?'highway' OR tags?'railway')
; --   road_ofname_n | road_ofname_distinct_n
  --            2144 |                    139

select count(*) n_casados  
from stable.kx_street_names 
where array_length(from_pt,1)>1
; --  n_casados=6009

PS: a quantidade de polígonos ou laços com tag building também é pequena, não muda muito o cenário pobre do OSM-BR em termos de endereços.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Aguardando ajuda Atenção extra é necessária, aguardando Central de discussão A issue é a página principal para registrar decisões e discussões sobre o tópico Controle de Qualidade Tarefa de revisão ou controle de qualidade
Projects
None yet
Development

No branches or pull requests

1 participant