O que é um shapefile e de quais arquivos ele precisa?
Um shapefile é um formato vetorial de SIG criado pela Esri no início dos anos 1990. Ele é um grupo de arquivos com um mesmo nome: o .shp guarda a geometria, o .shx um índice e o .dbf os atributos. Um arquivo .prj informa o sistema de coordenadas, e um .cpg a codificação do texto. O FileReshape consegue visualizar um shapefile ou convertê-lo em GeoJSON, KML ou GeoPackage no seu navegador, sem enviá-lo.
De onde vem o shapefile
A Esri lançou o shapefile no início dos anos 1990 com o seu programa de desktop ArcView, como um jeito simples de guardar pontos, linhas e polígonos junto com uma tabela de atributos. Em 1998, a Esri publicou a ESRI Shapefile Technical Description, um documento técnico que descreve a estrutura dos arquivos de geometria e de índice. Como a descrição era pública e o formato era simples, outros programas puderam lê-lo e gravá-lo sem licença, e o shapefile virou o formato comum de troca de dados dos SIG de desktop.
Essa continua sendo a principal força dele hoje. Portais de dados abertos do governo, agrimensores, órgãos de planejamento e concessionárias de serviços publicam shapefiles porque quase todo programa de SIG, do QGIS e do ArcGIS Pro ao GDAL, aos carregadores do PostGIS e a muitos programas de CAD, consegue lê-los. O formato também mostra a idade que tem, e os limites descritos abaixo são o motivo pelo qual existem formatos mais novos.
Os arquivos que compõem um shapefile
Um shapefile é um conjunto de arquivos que compartilham um nome base, como parcels.shp, parcels.shx e parcels.dbf. Três deles são obrigatórios. O arquivo .shp guarda a geometria de cada feição como uma lista de coordenadas. O arquivo .shx é um índice com a posição de cada registro no .shp, para que os programas possam pular direto para a feição número 5.000 em vez de ler tudo o que vem antes dela. O arquivo .dbf é a tabela de atributos no formato dBASE, com uma linha por feição, na mesma ordem das formas. A ligação entre uma forma e a sua linha não é nada mais do que essa ordem.
Os outros arquivos são opcionais. O arquivo .prj guarda o sistema de coordenadas como uma linha de well-known text (WKT), no dialeto que a Esri usa. O arquivo .cpg é um pequeno arquivo de texto que informa a codificação de caracteres do .dbf, como UTF-8 ou 1252. Os arquivos .sbn e .sbx são um índice espacial usado pelos programas da Esri, e o .qix é outro índice espacial, gravado pelo GDAL e pelo MapServer; os dois só aceleram o desenho e a busca em arquivos grandes. O arquivo .shp.xml traz metadados, como uma descrição, o autor e a data. Você também pode encontrar arquivos .atx, que são índices de atributos. Se um arquivo opcional estiver faltando, os programas ainda conseguem ler os dados, mas sem o .prj a localização é um palpite, e sem o .cpg os caracteres especiais podem sair errados.
Os nomes base precisam ser exatamente iguais, incluindo maiúsculas e minúsculas nos sistemas que fazem essa distinção. Renomear só roads.shp para streets.shp quebra o conjunto. Renomeie, copie e envie todas as partes juntas, e o jeito mais simples de mantê-las juntas é um .zip do conjunto inteiro.
Um tipo de geometria por shapefile
Cada shapefile declara um tipo de forma no seu cabeçalho, e toda feição precisa ser desse tipo ou vazia. Os principais tipos são Point, MultiPoint, PolyLine (linhas) e Polygon, cada um em uma versão 2D simples, uma versão com valores Z para a altura e uma versão com valores M para medidas, como a distância ao longo de uma rota. Um tipo raramente usado, o MultiPatch, descreve superfícies 3D. Um arquivo não pode misturar pontos com polígonos, então um conjunto de dados de edifícios e das suas entradas precisa ser guardado em dois shapefiles.
Os polígonos são guardados como anéis. Na descrição publicada, o limite externo corre no sentido horário e os buracos no sentido anti-horário, e um polígono com várias partes separadas, como um país com ilhas, é uma única feição com vários anéis. O formato não guarda topologia: dois lotes vizinhos guardam cada um a sua divisa comum separadamente, e nada no arquivo garante que as linhas coincidam.
Limites da tabela de atributos .dbf
Muitas das peculiaridades do shapefile vêm do formato de tabela dBASE, que é dos anos 1980. Os nomes de campos podem ter no máximo 10 caracteres, então Population_2020 precisa virar algo como POP_2020, e alguns programas também os passam para maiúsculas. Campos de texto guardam no máximo 254 caracteres. O número de campos também é limitado; 255 é o número que costuma ser citado.
Os tipos de dados são poucos. Texto é guardado como campos de caracteres de largura fixa, números como campos numéricos ou de ponto flutuante com largura e número de casas decimais fixos, verdadeiro e falso como campos lógicos, e datas como campos de data no formato ano, mês, dia. Não há hora do dia nem fuso horário, então um carimbo de data e hora precisa ser guardado como texto ou dividido em campos. Também não há um valor nulo de verdade: um número vazio geralmente é gravado como espaços em branco ou como zero, dependendo do programa, e alguns leitores então mostram 0 onde o valor na verdade era desconhecido. Não há listas, valores aninhados nem campos binários.
Limites de tamanho de arquivo
Os cabeçalhos dos arquivos .shp e .shx guardam deslocamentos e comprimentos como números de 32 bits, o que leva à regra comum de que cada parte de um shapefile, em especial o .shp e o .dbf, precisa ficar abaixo de 2 GB. Alguns programas, entre eles o GDAL, conseguem ler e gravar arquivos de até cerca de 4 GB quando configurados para isso, mas outros programas podem recusá-los. Um conjunto de dados maior que isso precisa ser dividido em vários shapefiles ou guardado em outro formato. Na prática, o .dbf muitas vezes atinge o limite primeiro, porque cada campo de texto ocupa a sua largura completa em cada linha, mesmo quando a maioria dos valores é curta.
Codificação de texto e o arquivo .cpg
O formato .dbf é anterior ao Unicode. O texto é guardado como bytes, e o cabeçalho tem um byte, muitas vezes chamado de ID do driver de idioma, que pode indicar uma página de código como Windows-1252 ou uma página de código do DOS. Muitos programas o deixam vazio ou o preenchem errado. O arquivo .cpg foi acrescentado depois para informar a codificação com clareza, e os programas modernos gravam UTF-8 junto com um .cpg que diz isso.
Quando nem o .cpg nem o byte do cabeçalho estão certos, o programa precisa adivinhar, e nomes como Malmö, Ærø ou São Paulo viram sequências de símbolos estranhos. Se você vir isso, os dados geralmente estão intactos. Diga ao seu programa de SIG qual codificação usar ao abrir a camada, por exemplo nas propriedades da camada no QGIS, ou acrescente um arquivo .cpg com o nome correto. Quando você mesmo gravar shapefiles, escolha UTF-8 e mantenha o .cpg junto com as outras partes.
Sistemas de coordenadas e o arquivo .prj
O arquivo .shp guarda números simples, sem dizer o que eles significam. Eles podem ser longitude e latitude em graus, metros em uma zona UTM ou pés em um sistema State Plane dos Estados Unidos. Só o arquivo .prj informa aos programas qual sistema de referência de coordenadas se aplica, e ele faz isso como texto WKT, e não como um código EPSG. A maioria dos programas consegue associar definições comuns a um código EPSG, mas arquivos .prj incomuns ou editados à mão às vezes levam a uma interpretação um pouco diferente.
Sem um .prj, o programa pode assumir WGS84 ou perguntar a você. Valores entre -180 e 180 e entre -90 e 90 provavelmente são graus; valores grandes, na casa das centenas de milhares ou dos milhões, são metros ou pés projetados. Atribuir um sistema de coordenadas só rotula os dados. Reprojetar de fato recalcula as coordenadas, e as duas coisas não devem ser confundidas.
Alternativas ao shapefile
O GeoPackage é um padrão aberto do Open Geospatial Consortium, construído sobre um banco de dados SQLite em um único arquivo .gpkg. Ele guarda várias camadas, nomes de campos longos, datas e horas de verdade, valores nulos e grandes conjuntos de dados, e é o formato padrão do QGIS. É uma boa escolha para entregar um projeto inteiro. O GeoJSON é um formato JSON de texto simples, padronizado como RFC 7946. Ele é fácil de ler em um editor de texto e é o formato natural para mapas web e APIs, mas o padrão espera coordenadas em WGS84 e os arquivos ficam grandes. O FlatGeobuf é um formato binário mais novo, de arquivo único, com um índice espacial embutido, pensado para leitura rápida e para streaming pela web; o suporte está crescendo, mas ainda não é tão universal quanto o dos outros.
Nenhum deles é o certo para todos os casos. O shapefile continua sendo a escolha mais segura quando você não sabe que programa o destinatário usa, ou quando um sistema ou um cliente o pede explicitamente. Quando os limites dele atrapalham, como nomes de campos truncados, carimbos de data e hora perdidos ou arquivos perto de 2 GB, converter para GeoPackage geralmente é a mudança menos trabalhosa.
Trabalhar com shapefiles no navegador com o FileReshape
As ferramentas de shapefile do FileReshape leem as partes com o GDAL compilado para a web, então os arquivos são processados no seu próprio dispositivo e não são enviados. O Visualizador de shapefile mostra as feições em um mapa e a tabela de atributos, com o tipo de cada campo. Os conversores Converter Shapefile para GeoJSON, Converter Shapefile para KML e Converter shapefile para GeoPackage gravam os mesmos dados nesses formatos; GeoJSON e KML são gravados em WGS84, e o GeoPackage mantém o sistema de coordenadas. Converter KML para Shapefile faz o caminho inverso e grava um .zip com arquivos .shp, .shx, .dbf, .prj e .cpg, um shapefile por tipo de geometria. Você pode soltar um .zip ou selecionar as partes juntas, e nomes já encurtados para 10 caracteres não podem ser restaurados por nenhuma conversão.
Perguntas frequentes
Quais arquivos do shapefile são obrigatórios?
Os arquivos .shp, .shx e .dbf são obrigatórios. Os arquivos .prj e .cpg são opcionais, mas recomendados, e .sbn, .sbx, .qix e .shp.xml são índices e metadados que podem ficar de fora.
Um shapefile pode conter pontos, linhas e polígonos juntos?
Não. Cada shapefile tem um único tipo de forma no cabeçalho. Dados misturados precisam ser divididos em um shapefile por tipo, ou guardados em um formato como GeoPackage ou GeoJSON.
Por que o meu shapefile mostra caracteres estranhos em vez de letras acentuadas?
O programa leu o .dbf com a codificação errada. Escolha a codificação certa ao abrir a camada, ou acrescente um arquivo .cpg com o nome correto, como UTF-8 ou 1252.
Um shapefile consegue guardar data e hora?
Ele consegue guardar uma data, mas não a hora do dia. Carimbos de data e hora geralmente são guardados como campos de texto, ou os dados são passados para GeoPackage, que tem um tipo de data e hora de verdade.
O shapefile é um formato aberto?
Os arquivos de geometria e de índice dele são documentados em uma descrição técnica que a Esri publicou em 1998, e a tabela de atributos usa o conhecido formato dBASE, então muitos programas gratuitos e comerciais leem e gravam shapefiles.