Endereços Postais
Introdução
Nesta página pretende-se apresentar um conjunto de queries que permitam realizar uma análise dos endereços postais existentes no OSM. Começou-se por importar a Base de Dados do OSM (processo descrito em [1]) para o programa pgAdminIII. De seguida foram realizadas as queries, no mesmo programa, de análise dos dados relacionados com as moradas.
Uniformização
De forma a escrever qualquer endereço postal de forma uniformizada e correcta, deve-se fazer uso das seguintes tags:
Tag | Presença | Tipo de Elementos | Valores | Descrição |
---|---|---|---|---|
addr:housenumber ou
|
Obrigatório | string | Número de porta, ou número da casa. Constituído por dígitos e também por outros caracteres alfa-numéricos. Se uma única entrada tem mais que um número de casa ou de porta, separar por ",". Por exemplo: "12b,12c".
| |
addr:street |
Opcional | string | Principal nome associado à rua. Caso nao se tenha conhecimento da mesma, utilizar o nome da rua mais próxima. | |
addr:state |
Opcional | string | Identifica os Estados em países como os Estados Unidos ou a Austrália, que têm abreviaturas para os estados nas suas moradas. Para outros países, como Portugal, não é usado. | |
addr:postcode |
Opcional | string | Código postal da zona em questão. Diferentes países tem diferentes caracteres e comprimentos para os códigos postais. Em Portugal este código deverá ser constituido por 4 dígitos seguidos de um hífen e de 3 dígitos: xxxx-xxx | |
addr:city |
Opcional | string | City é usado em endereços postais de algumas zonas e áreas habitacionais. | |
addr:country |
Opcional | string de duas letras | Código de duas letras em maiúsculas ISO 3166-1 alpha-2 (ver wikipedia:ISO 3166-1 alpha-2). Poderá ser necessário uma vez que existe apenas um para cada país. Exemplo: "DE" para Alemanha, "FR" para França, "IT" para Itália e "PT" para Portugal. | |
addr:full |
Opcional | string | Endereço postal completo. Pode ser usado além das outras Tags se estas não forem suficientes para representar uma morada. | |
addr:interpolation |
Obrigatório | even/odd/all/alphabetic | Como interpolar os números de casa que pertencem à rua em questão. |
Identificação das tags presentes na Base de Dados
Fazendo uma query do género:
select * from planet_osm_point where "addr:city" is not null;
select * from planet_osm_polygon where "addr:city" is not null;
e substituindo "addr:city" pelas restantes tags, como por exemplo: addr:housenumber; addr:housename; addr:street; addr:postcode; addr:city; addr:country; addr:full; addr:subdistrict; addr:district; addr:province e addr:interpolation, ou simplesmente através da visualização do nome das colunas nas tabelas, chega-se à conclusão que a única tag que contém informação é a addr:housenumber. Isto denota uma grande falha ao nível das moradas associadas a polígonos e pontos no mapa. Assim, as queries apresentadas serão relativas unicamente a addr:housenumber.
Para facilitar a realização das queries foi criada uma tabela (merge) com os parâmetros amenity, name e addr:housenumber, representados quer sob a forma de pontos, quer de polígonos, evitando que a mesma query tenha de ser realizada para as duas tabelas:
create table merge as select name, amenity, "addr:housenumber" from planet_osm_polygon;
insert into merge select name, amenity, "addr:housenumber" from planet_osm_point;
Contagem de registos
Por forma a se ter uma maior percepção da frequência de utilização da tag addr:housenumber pode-se começar por ver quantos registos existem no OSM (relativamente a pontos e polígonos) e quantos deles contêm informação acerca deste parâmetro:
select count(*) as "número de pontos e polígonos" from merge
select count(*) as "número de pontos e polígonos com número de porta" from merge where "addr:housenumber" is not null
Farmácias
Em relação às farmácias, por exemplo, comprova-se que, no OSM, o número de farmácias com housenumber é muito reduzido, tendo este parâmetro sido utilizado em apenas metade das farmácias registadas:
select count(*) as "número de farmácias existentes" from merge where amenity = 'pharmacy';
select count(*) as "número de farmácias com número de porta" from merge where amenity = 'pharmacy' and "addr:housenumber" is not null;
O mesmo pode ser feito para hospitais, dentistas, veterinários, escolas, universidades, museus, etc.
Exemplo do tipo de informação
Para ver o tipo de sintaxe usada pelos utilizadores para escrever o número de porta de algum objecto, pode-se realizar a seguinte query:
select name, "addr:housenumber" from merge where amenity = 'pharmacy' and "addr:housenumber" is not null;
Facilmente se percebe que os dados não estão uniformizados, nem seguem nenhum standard definido. De entre algumas falhas de uniformização da informação podem-se salientar:
- O facto de em alguns casos os utilizadores escreverem simplesmente o número de porta e noutros esse número ser antecedido pelos caracteres Nº;
- O facto de letras e números se encontrarem separados por um hífen, barra, espaço, vírgula, ou simplesmente nao se encontrarem separados.
Conclusão
No que diz respeito ao endereçamento das amenitys marcadas sob a forma de pontos ou polígonos, por parte dos utilizadores do OSM, percebe-se que existem grandes deficiências no seu correcto endereçamento. Nas tabelas constituintes da Base de Dados do OSM são inexistentes praticamente todos os parâmetros do tipo addr:*
, encontrando-se apenas informação no que diz respeito a addr:housenumber
, e num número muito reduzido de registos. Deste modo, deverá haver, por parte dos utilizadores, uma maior representação e uniformização da informação neste âmbito, estando a análise de endereços postais limitada, neste momento, à falta de informação existente.