Suporte à codificação de caracteres em geodatabases e shapefiles


11

Eu tenho vários bancos de dados geográficos que incluem classes de recurso com letras gregas em muitos dos atributos. Quando tento exportar uma classe de recurso como um shapefile do ArcCatalog, os atributos são massacrados nos dados do shapefile, algum tipo de problema de codificação de caracteres (eles se parecem com isso na forma: etr ?? e?). O mesmo acontece quando eu uso ogr2ogr no FWtools para converter camadas do MDB para KML, shp, etc.

Alguém tem experiência tentando lidar com formatos de codificação nos formatos de dados GIS?

O objetivo real aqui é obter alguns dados desses geodatabases da Esri em um banco de dados Postgres / PostGIS, mas a codificação quebrada não vai funcionar. Ia exportar dos geoDBs para os shapefiles e carregá-los shp2pgsql. Esse é o caminho mais fácil para chegar lá?


2
Você pode usar QGIS para importar o shapfile com CP1256 opção e exportá-lo com UTF8 para evitar não Unicode problema

Respostas:


10

Eu acho que você é parte do caminho. Você pode usar iconvpara converter de uma codificação para outra e usar isso como parte do shp2pgsqlprocesso. Por exemplo:

shp2pgsql *postgrestablename* | iconv -f *sourceencoding* -t *targetencoding* | psql -d *yourdatabase*

Se você estiver trabalhando em um ambiente Linux, já iconvdeve estar instalado. Para o Windows, encontrei o LibIconv for Windows . Mas eu não tenho experiência em usar iconvno Windows, então não posso garantir isso.

Espero que isto ajude!

Jo


O problema ocorre antes que shp2pgsql possa ser aplicado. Os atributos no shapefile já estão quebrados, se bem entendi.
Underdark


underdark, você está correto. Os dados estão ruins antes que eu possa chegar à etapa shp2pgsql.
Colemanm

Obrigado, mwalker ... a solução que funcionou fantasticamente até agora! Alterei o formato CodePage para UTF-8 e os dados DBF do shapefile mostram os caracteres corretos agora. E usando o carregador de shapefile do PostGIS no QGIS, os dados no banco de dados PostGIS também estão corretos.
Colemanm

6

Abaixo dos detalhes do processo que eu usei para converter um File GeoDataBase com campos em árabe em shapefiles com codificação UTF-8 que abrem alegremente no QGIS e no ArcMap mostrando o árabe e o inglês corretamente (sem usar extensões para exportar ou ler):

  • A idéia básica é: do FGDB, exporte um shapefile incluindo um .dbf (na codificação incorreta), depois exporte a Tabela de Atributos da mesma camada que o texto (na codificação correta, que é UTF-8) e use outro programa para substituir o conteúdo do shapefile .dbf pelos campos de dados UTF-8 adequados e salve o .dbf com a codificação UTF-8. Em seguida, adicione um arquivo .cpg a cada shapefile para informar ao ArcGIS a nova codificação do .dbf. Passos:

1) Adicione as camadas do FGDB ao ArcMap (usei o 10.1, mas não há absolutamente nenhuma razão para ele não funcionar em versões anteriores, porque o bit de codificação acontece mais tarde, fora do Arc). Para exportar, clique com o botão direito do mouse em uma camada e escolha Dados-> Exportar Dados, clique no botão da pasta na caixa de diálogo de exportação para abrir a caixa de diálogo Salvar e escolha Shapefile como formato de saída.

1b) Método alternativo para o acima: navegue até o FGDB no ArcCatalog, clique com o botão direito do mouse, escolha Exportar -> Para o Shapefile (múltiplo) e exporte todo o FGCB como uma pasta cheia de shapefiles em uma única operação).

2) Agora você tem um conjunto de arquivos de forma com rabiscos onde o script em árabe deveria estar (na minha máquina, ele exibia pontos de interrogação no lugar dos caracteres). As partes .dbf dos próprios shapefiles, abertas no Excel ou qualquer outra coisa, têm bobagens em vez de árabe; não é apenas um problema de exibição no programa GIS, é que os arquivos .dbf não contêm os caracteres árabes. Ainda não é útil.

3) No ArcMap, abra a Tabela de Atributos de uma camada do FGDB. A tabela é aberta com o inglês e o árabe mostrando corretamente (é por isso que o FGDB foi usado em primeiro lugar). No menu Opções da tabela da janela Tabela de atributos, escolha Exportar e, na caixa de diálogo Exportar dados, clique no botão da pasta de saída para acessar a caixa de diálogo Salvar dados, na qual você escolhe Arquivo de texto como o tipo de saída. Agora você tem um arquivo de texto que será aberto no bloco de notas com delimitadores de vírgula, codificados como UTF-8, com o inglês e o árabe adequadamente codificados (o árabe deve, nesse momento, ser exibido corretamente no bloco de notas).

Agora, para obter essas informações nas partes .dbf dos shapefiles!

4) Abra o LibreOffice Calc, um clone do Excel gratuito e de código aberto que abre, manipula e salva arquivos .dbf facilmente, para abrir o arquivo .dbf de um shapefile.

A propósito, neste caso, não estou usando o LibreOffice em vez do MS Office por razões ideológicas, mas simplesmente porque não consigo descobrir como fazer o Excel salvar um arquivo .dbf, que é fácil no Calc, na verdade, é o opção padrão ao pressionar Salvar depois de abrir e modificar um arquivo .dbf no Calc, enquanto o Excel realmente afirma que o arquivo "não pode ser salvo no formato atual" e não oferece tanta utilidade para "salvá-lo como o formato mais recente" (nenhuma opção para .dbf aparece). Existem extensões / plugins para Excel que pretendem fazer o trabalho (

O arquivo .dbf no Calc ainda mostra as semelhanças no lugar do árabe. Além disso, abra o .csv que você exportou da tabela de atributos do mesmo shapefile, certificando-se de especificar UTF-8 como a codificação (e vírgulas como delimitadores) no diálogo de abertura. Os arquivos de texto devem abrir em uma segunda planilha do Calc com o árabe exibido corretamente e devem conter as mesmas colunas que o .dbf mais uma coluna OBJECTID no início. Copie e cole as colunas do .csv que contêm o árabe apropriado no .dbf (na verdade, copiei e colei a tabela inteira com exceção da coluna de ID mais à esquerda para economizar tempo; as informações são idênticas de qualquer maneira). Clique em Salvar no .dbf modificado no LibreOffice (ele perguntará se você realmente deseja usar um formato tão estranho como .dbf; sim, sim).

Repita esse processo para todos os componentes .dbf dos shapefiles do FGDB, substituindo todas as colunas sem sentido pelas seqüências de caracteres árabes.

5) Assim que você salvar novamente as partes .dbf com as colunas árabes coladas, poderá abrir os shapefiles no QGIS e eles funcionarão corretamente nos dois idiomas, desde que você especifique UTF-8 como a codificação no Vetor de importação Caixa de diálogo arquivo. No entanto, eles ainda não funcionarão corretamente no ArcGIS (ou pelo menos não em todas as versões) porque o ArcGIS não reconhece automaticamente a codificação ou permite que você a escolha quando adicionar o shapefile a um projeto. O Arc precisa de um componente separado para o shapefile, chamado de arquivo de conversão de página de código (.cpg), para instruí-lo sobre a codificação a ser lida.

6) Use um editor de texto (bloco de notas, nano ou qualquer outra coisa, mas não o Word ou qualquer outro processador de texto) para criar um arquivo de texto que contenha apenas os cinco caracteres "UTF-8". Salve-o como .cpg para cada um dos shapefiles (basta clicar em um pedaço do shapefile na caixa de diálogo Salvar como, depois apago a extensão e adiciono .cpg), na mesma pasta do shapefile (basicamente ele se torna outro o shapefile de várias partes). A extensão .cpg informa ao Arc que este é um arquivo que contém informações sobre a codificação do arquivo .dbf; depois de agrupado no shapefile junto com seus irmãos de mesmo nome, mas com extensão diferente, a codificação do shapefile agora é reconhecida automaticamente pelo ArcGIS.

7) Voila. Agora você tem shapefiles que contêm seqüências de caracteres em inglês e árabe, até onde eu sei exatamente como estavam no File GeoDataBase original. Eles abrem em minhas instalações do ArcMap e QGIS e, em ambos os casos, as strings nos dois idiomas são exibidas corretamente, incluindo nos rótulos dos mapas.

Ressalvas:

  • Nem todas as cópias do ArcGIS parecem exportar a tabela de atributos como um arquivo de texto preenchido corretamente (em pelo menos um computador, tentar exportar a tabela de atributos para um arquivo de texto resulta em um arquivo apenas com os cabeçalhos, não as linhas de dados. NÃO é o comportamento adequado do Arc (é claro que é possível exportar tabelas de atributos como texto), mas isso pode surgir para alguns usuários, o que impossibilita o restante das etapas.

  • Não parece que o ArcGIS salvará novos shapefiles com a codificação UTF-8. Isso afetará apenas os usuários que desejam criar novos shapefiles a partir dos dados, não as pessoas que desejam apenas exibir, modificar e usá-los para fazer mapas. A solução alternativa parece envolver a bagunça com o registro do Windows, conforme detalhado aqui: ( http://support.esri.com/cn/knowledgebase/techarticles/detail/21106 ). Eu não tive que lidar com isso porque meu ArcGIS e QGIS parecem reconhecer os arquivos de forma que salvei usando o processo acima, e posso modificar a geometria e as tabelas ou adicionar novos polígonos com mais texto em árabe, sem problemas óbvios ( mesmo que o Arc pareça não querer salvar novos arquivos de forma com a codificação UTF-8, ele parece disposto a atualizá-los / salvá-los).

  • Estou assumindo que a funcionalidade do LibreOffice é a mesma no Windows e no meu computador. Eu uso o GNU / Linux na maior parte do meu trabalho e só inicializo no Windows se precisar usar o ArcGIS ou o Autocad para alguma tarefa ou outra, então fiz a modificação do arquivo .dbf no Libreoffice em execução no Fedora. Suponho que funcione da mesma maneira no Windows, mas não posso testar isso sem instalar o LibreOffice na minha partição do Windows e minha conexão com a Internet atual é um pouco lenta para downloads desnecessários. Existem plugins para o Excel que permitem salvar arquivos .dbf em uma codificação selecionada (exceltodbf.sourceforge.net/, por exemplo), mas ainda não os tentei. Pode haver outras maneiras de manipular e salvar .dbf, mas eu não as examinei depois de encontrar uma maneira razoavelmente fácil de fazer isso com o LibreOffice.

  • Todo o problema parece ser evitável se você pagar pela extensão Mapeamento de Produção no ArcGIS, que permite converter diretamente FGDBs em shapefiles com codificação UTF-8, de acordo com esta página: http://resources.arcgis.com/en/help /main/10.1/index.html#//0103000001m1000000 . Por que essa funcionalidade bastante básica (o Unicode já existe há algum tempo e existem muitos idiomas além do inglês) está disponível apenas para os clientes que pagam mais é uma pergunta para a ESRI.


0

Primeiro, você precisa descobrir em que codificação estão os dados de entrada, para poder dizer às suas ferramentas como converter os dados em uma codificação apropriada. Se você tiver o Access, tentarei exportar a tabela para texto diretamente do MDB e definir a codificação de saída para UTF8. Se você abrir o shapefile exportado no ArcGIS, a codificação está definida corretamente? O DBF suporta páginas de código e é possível que o OGR não esteja escolhendo a correta para a conversão.

Também existem maneiras de coagir o MDBtools (usado como parte do driver OGR) a definir explicitamente o fluxo de entrada, mas eu tentaria as outras abordagens primeiro.


0

Prefiro seguir o caminho do ArcGIS. Basta definir a codificação para UTF-8 no ArcGIS, seguindo as instruções aqui . Após isso, basta exportar as classes de recurso para o ShapeFile. Agora você receberá um arquivo CPG (arquivo de página de código) extra com cada camada. Este é apenas um arquivo de texto com a string "UTF-8" e todos os seus dados são codificados automaticamente em UTF-8.

Se você estiver interessado em usar outra codificação, consulte as instruções.

O importante é que, após concluir esta atribuição, você deve alterar essa configuração para o valor padrão, pois se você mantiver esse valor, por exemplo, "UTF-8", no futuro o ArcGIS exportará todos os ShapeFiles usando a codificação "UTF-8".

Espero que ajude você.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.