Gestão de dados geográficos: ISO3166, UN / LOCODE e GeoNames

M. Emmanuel Blocked Desbloquear Seguir Seguindo 10 de janeiro

Recentemente, tive a necessidade de definir um modelo de dados para lidar com dados geográficos no nível internacional, ou seja, como gerenciar adequadamente os dados sobre endereços postais quando o seu endereço potencial é em qualquer lugar do mundo – aqui estão os desafios eo resultado de as alternativas que encontrei ao lidar com a incorporação de dados geográficos em aplicativos e bancos de dados.

O desafio da bagunça regional

Quando você examina como os países são organizados, você encontra diversos critérios, às vezes as regiões são bastante intangíveis e difíceis de justificar, especialmente no caso dos países europeus.

Apenas para dar um exemplo de quão diferente a abordagem entre dois países pode ser:

Vamos nos concentrar primeiro nos Estados Unidos da América, com uma população de 325 milhões, uma extensão de 9.525.067 km2 e um PIB de US $ 20,513 trilhões. EUA usa um esquema simples e eficiente:

Uma nação, 27 estados.

Existe uma divisão clara entre a primeira e a segunda ordem administrativa.

Agora, vamos dar uma olhada na Espanha, a quarta economia da Zona do Euro, nenhum dos principais países, nem um pequeno. Com uma população de 46 milhões, uma extensão de 505.990 km2 e um PIB de US $ 1.864 trilhões. Este é um exemplo de organização supercomplicada:

Um país, 17 comunidades autónomas e 2 cidades autónomas, 50 províncias e 8124 municípios.

Como algumas pessoas poderiam afirmar imediatamente que ambos os países não são, de forma alguma, comparáveis (embora sejam países, então serão comparáveis), analisaremos apenas um Estado dos EUA.

Vamos escolher o Texas: é um pouco maior que a Espanha em extensão, tem uma população de 26 milhões e um PIB semelhante à Espanha (US $ 1,639 trilhão).

O Texas é administrativamente dividido em 254 municípios.

Mais uma vez, não há complexidade, é uma administração básica e simples.

Os endereços postais nos EUA não exigem níveis administrativos secundários. Eles apenas usam o Estado, porque o Estado é considerado a principal unidade administrativa básica, o que equivaleria a não usar comunidades autônomas (para não mencionar as províncias) na Espanha.

Esse cenário de administrações regionais supercomplicadas – e caras – é comum em alguns países europeus. O exemplo analisado não é o único, e você pode encontrar outros países, como a França, com situação semelhante.

Harmonizando dados postais

Se você já enfrentou a necessidade de lidar com dados internacionais, pode ser útil saber que existem alguns padrões internacionais úteis em vigor.

Em geral, toda vez que você tiver que lidar com dados de referência grandes, é sempre uma boa ideia verificar primeiro se existem padrões nacionais ou internacionais em vigor. Você não apenas encontrará a melhor maneira de harmonizar dados (e eu disse melhor, não é perfeito), mas também será mais fácil encontrar dados mestres para preencher e manter as informações atualizadas.

Se alguém reclamar de dados, você também pode argumentar que um padrão internacional foi usado. Desta forma, você terá apenas que fornecer uma maneira para o usuário mexer incluindo dados personalizados com suas próprias idéias de como suas regiões locais importantes serão colocadas ou nomeadas no mapa.

A ideia aqui é que lidar com dados postais é um cenário em que você nunca terá todo mundo feliz. Considerando isso, siga um padrão aceito internacionalmente e implemente uma interface para permitir que o usuário faça alterações e pronto. O usuário agora é o proprietário dos dados (como deveria ser).

Com essa premissa, examinaremos os padrões que você pode usar e analisaremos os prós e contras de cada um deles.

Países do ISO 3166–1

Se você precisa de um sistema de codificação e uma lista de países, não procure mais: o ISO 3166-1 é seu amigo.

Códigos alfa-2 ISO3166–1

Como não há tantos países no mundo, e com exceção de poucos nomes em disputa, essa é uma lista única e determinista.

Eu gosto de usar os códigos Alpha-2 para procurar e preencher listas. Lembre-se de que, depois de usar o país em um registro consolidado (como uma fatura emitida), você deve incluir o código e o nome, pois pode haver alterações no futuro.

Dica: use sempre os códigos para lookouts de tabelas em interfaces de usuário, em vez de armazenar o próprio código. Armazenar os valores permanentes nos documentos finais refletirá os nomes atuais quando os documentos ou registros forem emitidos; Isso tornará seu banco de dados robusto para mudanças futuras e livrará você de lidar com dados históricos.

Outra opção seria usar GUIDs / UUIDs / IDs para as entradas e ter uma coluna ativa refletindo se esse registro específico é descontinuado ou não. É relativamente fácil manter as atualizações em potencial nessa lista e manter um acompanhamento preciso das alterações anteriores. No entanto, eu não gosto dessa abordagem, pois no final você está mantendo as informações antigas e dificultando a manutenção dos dados mestre e as migrações.

Para a informação em si, o padrão real pode ser comprado aqui, embora a informação esteja disponível gratuitamente a partir de diferentes fontes, como a Wikipedia .

Dica: se você estiver trabalhando em um projeto de análise de dados que envolva conjuntos de dados históricos (como macroeconomia) e, por algum motivo, incluir informações sobre países extintos, lembre-se de que o ISO3166-3 fornece uma lista dos agora extintos. países como a URSS ou a Jugoslávia.

Estados ISO 3166-2 / Províncias

Como mencionado na introdução, a situação não é tão fácil para o segundo nível de administração (alguns países têm um terceiro, mesmo quando não há entidade ou extensão que o exija).

A melhor opção aqui é novamente ISO3166-2 . Você encontrará aqui o segundo e terceiro níveis administrativos.

ISO3166-2: FR

Novamente, você pode comprar o padrão oficial ou usar a informação disponível gratuitamente na Wikipedia .

Para processar corretamente as informações, você pode facilmente eliminar as informações usando este analisador PHP .

Suporte de ISO-3166 em Python e Java

Se você usa o Python, existe um pacote muito bom chamado PyCountry que já contém informações analisadas para você.

Em Java eu não encontrei nada similar, embora eu pessoalmente ache que este tipo de informação deve ser gerenciado no nível de banco de dados, então você pode criar CSVs pertinentes com o pacote Python acima e importá-los para seu aplicativo Java.

ONU / LOCODE

Uma alternativa é processar as informações da UNECE. Isso inclui não apenas as subdivisões e países, conforme a ISO3166, mas também a geolocalização (incluindo coordenadas) de muitas cidades do mundo. Embora não esteja completo (você não encontrará uma atribuição de um para um para cada cidade), ele fornece informações adicionais. Ele se concentra no transporte, pois inclui informações sobre a disponibilidade de meios de transporte, como docas, estações ferroviárias e códigos IATA.

UN / LOCODE Fornece informações sobre locais de negociação / transporte UN / LOCODE Country Subdivisions ISO 3166-2 – Trade – UNECE
A tabela exibe a lista de nomes de países (nome abreviado oficial em inglês como em ISO 3166) em ordem alfabética, de… www.unece.org

Cidades e códigos postais

Os estados e as províncias foram um pouco desafiadores (tente descobrir o que usar na França), então prenda a respiração e pense agora em lidar com cidades e códigos postais. O número de cidades disponíveis explode, mas antes de começar a entrar em pânico ou pensar em usar campos de texto vazios para cidades e códigos postais, saiba que existe uma solução bastante decente e direta: o projeto GeoNames.

GeoNames
O banco de dados geográficos GeoNames abrange todos os países e contém mais de onze milhões de nomes de locais disponíveis… www.geonames.org

O GeoNames é um banco de dados amplamente utilizado e totalmente gratuito em todo o mundo, incluindo sua relação com o segundo / terceiro níveis administrativos do ISO3166-2 e com os códigos postais.

Este é o mais distante que você pode ir sem integrar outros serviços externos.

Opções adicionais para explorar

Depois da minha pesquisa, fiquei me perguntando se a API do Google Maps poderia ser uma opção para integrar os recursos de pesquisa de endereço. É provavelmente uma boa opção se você tiver que lidar no nível da rua. Em meu cenário particular, isso não era uma necessidade, então decidi ficar com a GeoNames (que pode fornecer a funcionalidade sem integração online com sistemas externos).

Uma boa opção, neste caso, provavelmente será verificar com bancos de dados nacionais. A maioria dos países desenvolvidos e semi-desenvolvidos contará com informações gratuitas disponíveis, como serviços online ou bancos de dados para download.