Importação da CAOP

From OpenStreetMap Wiki
Jump to navigation Jump to search

O objetivo é fazer a importação e a manutenção dos limites administrativos de Portugal (Portugal continental e as regiões autônomas), disponibilizados em formato digital pelo IGP (Instituto Geográfico Português) em http://www.igeo.pt/.

É importante tomar em conta o problema da manutenção para que ela seja feita de maneira automática (ou quase automática) dado que o IGP disponibiliza novos limites todos os anos com possível alterações.

Dados CAOP

Os ficheiros da CAOP (Carta Administrativa Oficial de Portugal) são disponibilizado pelo IGP em formato Shapefile em http://www.igeo.pt/produtos/cadastro/caop/caop_vigor.htm e são de uso livre o que foi confirmado em Dezembro de 2010.

Os ficheiros são :

  • 1 ficheiro para Portugal continental
  • 1 ficheiro para as ilhas da Madeira
  • 3 ficheiros para as ilhas dos Açores (1 ficheiro para cada grupo : ocidental, central, oriental)

Eles existem em 2 variantes :

  • polígono
  • linha

Só os ficheiros polígonos serão integrados, os ficheiros linhas não possuem as mesmas informações, tipicamente cada linha tem nos seus atributos o nome da freguesia do seu lado direito e do seu lado esquerdo más, ao contrario de um polígono, não tem nenhuma informação sobre os concelhos nem os distritos a que pertence.

O ficheiro polígono contem cada polígono de cada freguesias e vários atributos dos quais os mais importantes são os seguintes :

  • FREGUESIA : nome da freguesia
  • MUNICIPIO : nome do concelho incluindo a freguesia
  • DISTRITO : nome do distrito incluindo a freguesia (só para o continente)
  • ILHA : nome da ilha (só para as ilhas da Madeira e dos Açores)
  • DICOFRE : identificação própria da freguesia

Uma freguesia é representada por um ou mais polígonos, há freguesias territorialmente descontinua por exemplo a freguesia de Souto em Santa Maria da Feira (distrito de Aveiro), e há freguesias que incluíam pequenas ilhas por exemplo a freguesia de Ferragudo em Lagoa (distrito de Faro) :

A identificação DICOFRE permite o agrupamento de todos os polígonos nas diversas entidades administrativas, sendo que este código é composto por o ajuntamento de 3 informações :

  • DI = identifica o distrito (nas ilhas dos Açores e da Madeira a noção de distrito não exista, em vez temos a noção da ilha)
  • CO = identifica o concelho
  • FRE = identifica a freguesia

Assim a freguesia de Ferragudo tem 6 polígonos com a identificação DICOFRE="080602", um polígono para o território principal e 5 polígonos para as ilhas. A freguesia de Parchal situado também no conselho de Lagoa (distrito de Faro) tem um DICOFRE="080606" e assim todas as freguesias do conselho de Lagoa começam por "0806". Da mesma forma, todos os conselhos situados no distrito de Faro possuam um DICOFRE que começa por "08".

Todos os nomes (freguesia, concelho, distrito, ilha) estão codificados em ISO-8859 e sempre escritos com letras maiúscula.

Processo de integração

O processo implica a conversão para OSM mais também a manutenção dos dados OSM quando houver alterações nos limites administrativos. Isso quer dizer que o processo deve ser reutilizável, não basta fazer a primeira importação, o processo deve gerir as alterações na CAOP e por isso deve reutilizar os dados anteriores e já existente no OSM para só transmitir as diferencias.

Assim o processo está dividido em 3 fases, cada fase corresponde a um programa Python desenvolvido especificamente para os dados CAOP :

  • caop_build.py para converter os dados CAOP em dados OSM
  • caop_diff.py para comparar com os dados já presente no OSM
  • caop_upload.py para o envio das mudanças para OSM

O programa caop_build.py transforma o shapefile em nodes, ways, relations compatível OSM :

  • simplificação da geometria
  • transformação dos atributos
  • criação dos níveis da hierarquia administrativa

Conversão para OSM

A conversão para OSM implica converter os pontos do Shapefile em node com sistema de referencia espacial WGS84. Cada polígono será divididos em linhas (uma linha é partilhada entre duas entidades administrativas) e transformado em way. Haverá uma relation (multipolygon) para cada uma das entidades administrativas.

Relation

As entidades administrativas usam relation do tipo boundary com os tags :

Os membros da relation boundary utilizados são :

  • outer
  • inner

Os outros membros possíveis não serão utilizados e poderão ser acrescentados manualmente se for preciso, como por exemplo o membro admn_centre, com exceção do membro subarea que pessoalmente, devido a controvérsia, não recomendo o seu uso.

Os níveis administrativos já foram definidos em Key:admin_level e, tomando em conta que as regiões ainda não são definidas para o continente, fiquemos assim com os níveis 6, 7, 8 para o continente e os níveis 4, 7, 8 para as regiões autônomas.

O caso das regiões de Portugal encontre-se explicado no wikipedia :

“A Constituição portuguesa de 1976, estabelece que Portugal se divide somente em regiões autônomas (Açores e Madeira) e em regiões administrativas (a serem criadas no continente).

Todas as entidades citadas no parágrafo anterior já foram instituídas em Portugal, à excepção das regiões administrativas, cuja criação está prevista desde a aprovação da Constituição, ou seja, desde 1976. Segundo este documento, enquanto as regiões administrativas não estiverem concretamente instituídas, subsistirá a divisão distrital no espaço por elas não abrangido...

As regiões autônomas dos Açores e da Madeira foram criadas ambas em 1978, o que provocou a abolição dos distritos na área abrangida pelas duas regiões.”

Para notar também que existam regiões no âmbito das entidades NUTS (Nomenclatura Comum das Unidades Territoriais Estatísticas) da União Europeia. Essas regiões só existam para fim estatística e não tem nada a ver com a estrutura administrativa.

O name contem o nome convertido no formato habitual no OSM ou seja :

  • recodificado em UTF8
  • primeira letra de cada palavra em maiúscula, as restantes em minúscula

Way

As linhas dividam duas entidades administrativas e serão convertidas em way com os atributos boundary=administrative e admin_level=* que recebe o valor do nível mais alto da entidade com que este way faz fronteira. Por exemplo um way que divida 2 freguesias e ao mesmo tempo também divida 2 concelhos terá o admin_level de concelho (admin_level 7).

Uma linha poderá vir a ser convertida em 2 ou mais ways, dado que o OSM impõe uma limita de 2000 nodes num só way (definição dos elementos OSM).

Existam duas técnicas diferentes para criar uma limita administrativa quando esta coincida com um elemento físico (como por exemplo uma estrada ou um rio) :

  1. usar na relation o way do elemento físico sem adicionar quaisquer tags administrativos, o way exista com a sua própria função e é só usado pela relation
  2. criar un novo way sobreposto ao elemento físico e partilhando os nodes, um way exista para a função administrativa e outro para a função física.

A primeira técnica implica dividir o elemento físico quando o limite administrativa só lhe correspondam em uma parte (tal como acontece quando uma estrada muda para sentido único). A segunda técnica implica separar as funções em 2 ways distintos e permitirá uma manutenção mais fácil dos dados CAOP. No entanto, a primeira técnica será usado no caso da linha de costa e da fronteira com a Espanha.

A linha de costa existente, modificada varios vezes por varios contribuidores, tem pouca sorte de ter quaisquer parte em comum com os limites da CAOP. Outra dificuldade é que a linha de costa tem que ser bem orientada, a terra do lado esquerdo, o oceano do lado direito. Por isso devemos sempre usar a linha de costa já existente e fazer coincidir a a limita administrativa com a linha de costa do OSM e não o contrario.

Para evitar quaisquer conflitos com o vizinho Espanha, a fronteira definido pelo admin_level=2 não será modificada, teremos que entrar em contacto com a comunidade espanhola antes de fazer alterações na fronteira em grande escala.

Node

Os nodes serão apenas reprojetados em WGS84 e não receberão quaisquer tags. A reprojeção será feita com uma precisão de 7 dígitos usado pelo OSM. Como não é habito ter nodes sobreposto, será reutilizados os nodes já existente no OSM que tiveram a mesma coordenadas (comparação com os dados OSM).

Alguns pontos da CAOP serão removidos com o processo de simplificação sem perca notável na forma geometrica. Mais da metada dos pontos não vão ser integrados no OSM.

Normalizar os nomes

Os nomes são recodificados em UTF8 e transformado para respeitar o costume no OSM :

  • a primeira letra de cada palavra em maiúscula todas as outras em minúscula
  • as preposições ficam sempre em minúscula de, dos, a

Não haverá caso especial (exceção da Madeira et Açores) para os nomes com parentesas nos nomes. Não é costume no OSM más a CAOP usa parentesas nos nomes de algumas das freguesias.

Por exemplo no distrito de Évora, concelho de Vila Viçosa temos as freguesias com nomes de :

  • Vila Viçosa (São Bartolomeu)
  • Vila Viçosa (Conceição)

O wikipedia uso a sintaxe inverso :

Se calhar podemos tirar fora toda a parte "Vila Viçosa" que é implícita (a freguesia faz parte do seu concelho) mais sem regras claras, o nome será usado tal e qual. O processo de manutenção deverá deixar o nome já existente se ele foi modificado por outro pessoa.

Para os arquipélagos usa-se só a parte do nome entre parentesas no atributo ILHA, permitido assim identificar a região autônoma (não precisemos do nome da ilha nos limites administrativos). Por exemplo encontremos no atributo ILHA : Ilha de Porto Santo (Madeira) ou Ilha Terceira (Açores), o nível 4 será criado só com o nome Madeira ou Açores.

Comparação com os dados OSM

Esta parte está para ser desenvolvido.

Descarregamento para OSM

Esta parte está para ser desenvolvido.