OnlineMapMaker logo

Conversor de Shapefile para GeoJSON - SHP para GeoJSON em Poucos Cliques

Converta arquivos Shapefile para o formato GeoJSON em poucos cliques: envie um shapefile compactado, obtenha um arquivo GeoJSON real compatível com a RFC 7946 e baixe-o. Tudo roda no seu navegador, nada é enviado. Abrir versão em tela cheia →

Rate this tool:
Advertisement
Loading converter…
Precisa de ajuda com o seu projeto de GIS?Conheça Nossos Serviços

Por que converter um shapefile para GeoJSON

Se você já se perguntou como converter um shapefile para GeoJSON, a resposta curta é que um shapefile não é, na verdade, um único arquivo. O que a maioria chama de "um shapefile" é, na realidade, um conjunto de pelo menos três arquivos separados que compartilham o mesmo nome com extensões diferentes: `.shp` para a geometria, `.shx` para um índice posicional dentro dessa geometria, e `.dbf` para a tabela de atributos. Uma exportação real de shapefile geralmente adiciona um arquivo `.prj` para o sistema de referência de coordenadas e um arquivo `.cpg` para a codificação do texto. Se você abrir apenas o arquivo `.shp` em um editor de texto, verá ruído binário; se abrir apenas o `.dbf`, verá atributos sem nenhuma forma à qual anexá-los.

O GeoJSON, por outro lado, é um único arquivo JSON autocontido, definido por uma única especificação (RFC 7946), que fixa o sistema de referência de coordenadas em longitude/latitude WGS84. Esse design de arquivo único e SRC único é exatamente o motivo pelo qual tantos mapas web, bibliotecas JavaScript e APIs GIS modernas esperam GeoJSON como entrada em vez de um pacote shapefile. Converter shapefiles para geojson costuma ser o primeiro passo antes que um conjunto de dados possa ser carregado no Leaflet, Mapbox GL, uma pré-visualização de mapa renderizada pelo GitHub, ou praticamente qualquer outra ferramenta de mapeamento baseada em navegador.

Esta ferramenta existe para tornar esse primeiro passo indolor. Em vez de instalar o GDAL, abrir um software GIS de desktop, ou escrever um script Python só para converter um arquivo, você compacta seus arquivos `.shp` / `.shx` / `.dbf` (e `.prj`, se tiver) juntos, solta o zip no navegador, e recebe de volta um arquivo `.geojson` funcional em poucos cliques. A conversão roda inteiramente no lado do cliente, então a ferramenta funciona da mesma forma para dez feições ou cem mil, e seus dados nunca são enviados a lugar nenhum.

Advertisement

O formato Shapefile: história e estrutura

O formato shapefile foi publicado pela ESRI (Environmental Systems Research Institute) em julho de 1998, em um documento chamado "ESRI Shapefile Technical Description". Apesar de ter quase três décadas e não ter suporte nativo para nomes de campos de atributo com mais de 10 caracteres, múltiplas camadas de geometria por arquivo, ou Unicode por padrão, ele continua sendo um dos formatos GIS vetoriais mais usados no mundo em conjuntos de dados governamentais, de concessionárias e acadêmicos, em grande parte por ter sido adotado tão cedo e tão amplamente antes de existirem formatos mais modernos.

O arquivo .shp começa com um cabeçalho fixo de 100 bytes: os bytes de 0 a 3 são um "código de arquivo" big-endian sempre igual ao inteiro 9994, os bytes de 24 a 27 dão o comprimento do arquivo em palavras de 16 bits (big-endian), os bytes de 28 a 31 dão a versão do shapefile (little-endian, sempre 1000), os bytes de 32 a 35 dão o tipo de forma como um código inteiro (1 = Ponto, 3 = PolyLine, 5 = Polígono, 8 = MultiPonto, com variantes +10 ou +20 para valores de coordenadas Z e M), e os bytes de 36 a 67 dão a caixa delimitadora de todo o arquivo como quatro doubles little-endian: Xmin, Ymin, Xmax, Ymax. Depois desse cabeçalho, o arquivo é uma sequência de registros de comprimento variável, cada um com seu próprio pequeno cabeçalho indicando o número do registro e o comprimento do conteúdo antes dos próprios bytes de geometria.

O arquivo .dbf é uma tabela dBase III / dBase IV: um bloco de cabeçalho descrevendo cada campo (nome, tipo, comprimento em bytes, número de casas decimais), seguido de um registro de largura fixa por linha. A ordem das linhas no .dbf corresponde exatamente à ordem dos registros no arquivo .shp, posição por posição, já que não existe uma chave estrangeira explícita entre eles. O arquivo .shx existe puramente como atalho: armazena um par (deslocamento, comprimento) de 8 bytes por registro, para que um leitor possa pular diretamente para qualquer forma sem varrer todos os registros anteriores, o que importa muito mais em um shapefile de 500 MB do que em um pequeno.

Uma peculiaridade estrutural afeta diretamente a lógica de conversão: um registro de polígono de shapefile não tem nenhum conceito de "este anel é um buraco naquele outro anel". É simplesmente uma lista plana de anéis fechados. A convenção (segundo a especificação) é que anéis com orientação horária são limites externos e anéis com orientação anti-horária são buracos, e espera-se que um leitor descubra sozinho qual buraco pertence a qual anel externo. Os polígonos GeoJSON seguem a mesma convenção de orientação (a RFC 7946 recomenda, embora não exija estritamente, a mesma regra), mas um conversor de shapefile para GeoJSON ainda precisa percorrer cada anel, classificá-lo, e remontar o aninhamento antes de poder gerar uma geometria Polygon ou MultiPolygon válida.

Guia passo a passo: como converter shp para geojson

Shapefile to GeoJSON converter with the Choose File button and a zipped shapefile selected
Passo 1

Compacte seus arquivos `.shp`, `.shx` e `.dbf` juntos (inclua também o `.prj`, se tiver), depois escolha esse arquivo zip no conversor, ou clique em "Try sample" para carregar um pequeno shapefile de exemplo já pronto. O shapefile é analisado imediatamente e pré-visualizado no mapa como uma camada cinza "Source shapefile".

Shapefile loaded into the converter, ready to convert to GeoJSON
Passo 2

O painel Layers lista o shapefile de origem com sua contagem de feições. Verifique o mapa para confirmar que os dados certos foram carregados, depois clique em "Convert to GeoJSON" quando estiver pronto.

Conversion result panel showing feature count, geometry types, bounding box, and file size
Passo 3

Uma segunda camada "Converted GeoJSON" é adicionada sobre a de origem, e um resumo aparece: quantas feições foram convertidas, quais tipos de geometria foram encontrados, a caixa delimitadora, as colunas de atributos, e o tamanho resultante do arquivo GeoJSON.

Map preview of the converted shapefile features with the basemap toggle switched on
Passo 4

Use as caixas de seleção no painel Layers para mostrar ou ocultar a camada de origem e a convertida de forma independente, e ative "Show basemap" se quiser um mapa de ruas como fundo para ambas.

Download button for the converted .geojson file
Passo 5

Clique em "Download converted.geojson" para salvar no seu computador o arquivo GeoJSON finalizado e compatível com os padrões.

Advertisement

Seis casos de uso reais

Onde a conversão de shapefiles para geojson realmente aparece no trabalho GIS do dia a dia.

  1. Publicar dados abertos governamentais na web. Muitos portais de dados abertos municipais, estaduais e nacionais ainda distribuem conjuntos de dados de lotes, zoneamento e limites como shapefiles. Converter shapefiles para geojson transforma esse download em algo que um mapa web ou um aplicativo JavaScript pode carregar diretamente, sem processamento no lado do servidor.
  2. Carregar dados de levantamento ou de campo em um mapa web. Dispositivos GPS de campo e fluxos de trabalho GIS de desktop mais antigos frequentemente exportam shapefiles. Uma conversão rápida de shp para geojson costuma ser o único passo entre a saída de um topógrafo e um mapa compartilhável no Leaflet ou Mapbox GL.
  3. Preparar dados para pré-visualizações de mapa no GitHub ou GitLab. O GitHub renderiza automaticamente arquivos `.geojson` como um mapa interativo, mas não renderiza shapefiles de forma alguma. Converter um shapefile antes de fazer o commit faz a diferença entre um mapa renderizado e quatro arquivos binários ilegíveis em um repositório.
  4. Alimentar bibliotecas de mapeamento em JavaScript. Leaflet, Mapbox GL JS, OpenLayers e deck.gl consomem GeoJSON nativamente. Nenhum deles consegue ler um shapefile diretamente no navegador, então um conversor de shp para geojson é uma etapa obrigatória em qualquer pipeline de mapeamento do lado do cliente que comece a partir de dados em shapefile.
  5. Migrar arquivos GIS antigos para formatos modernos. Organizações que estão desativando sistemas GIS de desktop antigos costumam ter anos de arquivos shapefile. Converter shapefiles para geojson (ou, adiante, para GeoParquet ou GeoPackage) costuma ser o primeiro passo da migração, já que o GeoJSON é legível por praticamente qualquer ferramenta moderna.
  6. Verificações rápidas e pontuais sem instalar GIS de desktop. Às vezes você só precisa ver o que há dentro de um arquivo `.shp` que alguém te enviou por e-mail. Convertê-lo para GeoJSON e pré-visualizá-lo em um mapa é mais rápido do que instalar QGIS ou ArcGIS para um único arquivo.

O algoritmo de conversão, passo a passo

Converter um shapefile para GeoJSON não é uma única operação, mas um pequeno pipeline de etapas bem definidas de análise e reconstrução de geometria. Aqui está exatamente o que acontece com seus dados, em ordem.

1. Descompactar e localizar o conjunto de arquivos correspondente

O .zip enviado é descompactado na memória, e o conversor agrupa os arquivos pelo nome base compartilhado para encontrar um trio correspondente .shp / .shx / .dbf (mais um .prj e .cpg opcionais). Se um zip contiver mais de um trio desses, ele é tratado como uma exportação de shapefile multicamada e cada camada é convertida independentemente.

2. Analisar o cabeçalho fixo de 100 bytes do `.shp`

O cabeçalho é lido primeiro para confirmar que o código do arquivo é igual a 9994, para ler o tipo de forma (que informa ao analisador qual estrutura de registro esperar em seguida), e para ler a caixa delimitadora em nível de arquivo. O layout dos campos relevantes para a conversão é:

Bytes 0-3    File code           big-endian int, always 9994
Bytes 24-27  File length         big-endian int, in 16-bit words
Bytes 28-31  Version             little-endian int, always 1000
Bytes 32-35  Shape type          little-endian int (1=Point, 3=PolyLine, 5=Polygon, 8=MultiPoint)
Bytes 36-67  Bounding box        4 little-endian doubles: Xmin, Ymin, Xmax, Ymax

Tudo depois do byte 100 é lido como um fluxo de registros de comprimento variável, cada um precedido pelo seu próprio pequeno cabeçalho que indica o número do registro e o comprimento do conteúdo em palavras de 16 bits, que é então convertido em uma contagem de bytes multiplicando por dois.

3. Reconstruir anéis em geometrias Polygon e MultiPolygon

Para registros do tipo Polígono, cada anel no registro é lido como um array plano de pares (x, y). O conversor então calcula a área com sinal de cada anel usando a fórmula do cadarço (shoelace formula), área = 0.5 * Σ(x[i] * y[i+1] - x[i+1] * y[i]). Um resultado positivo (na convenção horária-positiva do shapefile) marca um anel externo; um resultado negativo marca um buraco. Cada anel-buraco é então associado ao menor anel externo cuja caixa delimitadora o contém totalmente, e os dois são combinados em um único array coordinates de um Polygon GeoJSON, com o anel externo primeiro e cada anel-buraco depois. Quando um registro contém mais de um anel externo, o resultado se torna um MultiPolygon.

4. Reprojetar coordenadas e anexar atributos

Se um arquivo .prj estiver presente e seu sistema de referência de coordenadas ainda não for WGS84, cada par de coordenadas produzido na etapa anterior é reprojetado para longitude/latitude WGS84, já que esse é o sistema de coordenadas exigido pela RFC 7946 para um GeoJSON válido. Em paralelo, a tabela .dbf é analisada campo por campo, e o registro i no .dbf é anexado como o objeto properties da geometria construída a partir do registro i no arquivo .shp, já que os dois arquivos são correspondidos puramente por posição, não por nenhuma chave explícita.

A etapa final envolve cada geometria convertida e suas propriedades em uma Feature GeoJSON, coleta cada feição em uma única FeatureCollection, e serializa essa estrutura em texto, pronta para download como arquivo .geojson. Como cada etapa acima é uma transformação determinística e bem definida, converter o mesmo shapefile duas vezes sempre produz uma saída GeoJSON idêntica byte a byte.

Advertisement

As bibliotecas GIS por trás da conversão de shapefiles

Um conversor de shp para geojson só é tão bom quanto o analisador de shapefile por trás dele. Aqui está o que realmente faz o trabalho, nesta ferramenta e em outras.

  • shpjs: O motor por trás desta ferramenta. shpjs é uma biblioteca em JavaScript puro que descompacta o arquivo, analisa a geometria binária `.shp` e a tabela de atributos `.dbf`, reprojeta coordenadas usando dados `.prj` quando presentes, e monta o resultado em GeoJSON, tudo sem sair do navegador ou de um processo Node.js.
  • GDAL / OGR (ogr2ogr): A biblioteca C/C++ que fundamenta a maioria dos softwares GIS de desktop e do lado do servidor. O comando `ogr2ogr -f GeoJSON output.geojson input.shp` é a forma padrão de fato para converter shapefiles para geojson pela linha de comando, e é o mesmo motor que o QGIS chama internamente quando você usa o diálogo "Export Features".
  • Fiona e GeoPandas: A pilha de I/O geoespacial do Python. O Fiona envolve o GDAL/OGR diretamente, e o GeoPandas é construído sobre o Fiona, de modo que `gpd.read_file('data.shp')` seguido de `gdf.to_file('data.geojson', driver='GeoJSON')` é uma das formas mais comuns de os desenvolvedores converterem shapefiles para geojson dentro de um pipeline de dados.
  • Mapshaper: Uma ferramenta amplamente usada em linha de comando e baseada em navegador (de Matthew Bloch) que lê shapefiles com seu próprio analisador e pode simplificar a geometria durante a conversão, útil quando um shapefile é detalhado demais para um mapa web e é preciso converter e simplificar em uma única passagem.
  • QGIS e ArcGIS: Ambos os aplicativos GIS de desktop conseguem abrir um shapefile nativamente e exportá-lo como GeoJSON por meio de uma ação de menu, "Export Features" no QGIS e "Feature Class to GeoJSON" ou ferramentas semelhantes no ArcGIS, ambos chamando o GDAL/OGR ou uma biblioteca equivalente por baixo da interface do usuário.

Todas essas ferramentas concordam com a mesma especificação de shapefile subjacente e o mesmo formato de saída GeoJSON, então um arquivo convertido por qualquer uma delas deve ser estruturalmente equivalente. A diferença prática está em onde o trabalho acontece: GDAL, Fiona e softwares GIS de desktop rodam todos em uma máquina com algo instalado, enquanto o motor baseado em shpjs desta ferramenta roda diretamente na aba do seu navegador, por isso nenhuma instalação e nenhum envio de arquivo para um servidor é necessário aqui.

Perguntas e respostas técnicas

Dez perguntas comuns sobre como converter um shapefile para GeoJSON, respondidas diretamente.

1. Como converto um shapefile para GeoJSON?

Coloque os arquivos .shp, .shx e .dbf (mais .prj, se tiver) em um único arquivo .zip, envie esse zip para este conversor, e clique em "Convert to GeoJSON". A ferramenta lê a geometria binária do shapefile, faz a correspondência com a tabela de atributos, e produz um arquivo .geojson compatível com os padrões que você pode baixar imediatamente, tudo dentro do seu navegador.

2. Por que esta ferramenta pede um arquivo zip em vez do arquivo .shp diretamente?

Um arquivo .shp sozinho contém apenas geometria, sem atributos e, o mais importante, sem nenhum campo que descreva o que cada forma realmente representa. Um shapefile válido é um conjunto de pelo menos três arquivos (.shp, .shx, .dbf) que precisam ser lidos juntos, então este conversor, como qualquer outro conversor de shp para geojson, precisa de todos eles ao mesmo tempo, e um zip é a forma mais simples de entregar um conjunto correspondente.

3. Essa conversão de shp para geojson é gratuita, e há um limite de tamanho de arquivo?

Sim, é totalmente gratuita e sem cadastro. Não há um limite artificial de tamanho de arquivo, embora shapefiles muito grandes (várias centenas de MB) demorem mais para serem analisados, já que tudo acontece no seu próprio dispositivo em vez de em um servidor.

4. O conversor preserva meus dados de atributos?

Sim. Cada campo da tabela .dbf é lido e anexado à sua feição correspondente como um objeto properties de GeoJSON, preservando nomes e valores de campos, incluindo números, texto e datas.

5. O que acontece com o sistema de referência de coordenadas?

Se o seu zip incluir um arquivo .prj, o conversor lê o sistema de referência de coordenadas que ele descreve. O GeoJSON, segundo a RFC 7946, está sempre em longitude/latitude WGS84, então, se o shapefile de origem usar uma projeção diferente (um caso comum em sistemas de grade nacionais), as coordenadas são reprojetadas para WGS84 durante a conversão. Se não houver arquivo .prj, assume-se que as coordenadas já estão em WGS84.

6. Ele consegue lidar corretamente com shapefiles do tipo Polígono com buracos?

Sim. Os registros de polígono de shapefile armazenam anéis como uma lista plana sem relação explícita pai-filho, dependendo da ordem de orientação dos anéis para distinguir limites externos de buracos. O conversor classifica cada anel pela sua área com sinal, reassocia os buracos ao seu anel pai correto, e produz geometrias GeoJSON Polygon ou MultiPolygon corretas.

7. Quais tipos de geometria são suportados?

Point, MultiPoint, PolyLine (convertido para LineString ou MultiLineString), e Polygon (convertido para Polygon ou MultiPolygon), incluindo suas variantes Z (elevação) e M (medida). Registros do tipo nulo são ignorados, já que não carregam nenhuma geometria para converter.

8. É possível converter um shapefile com mais de uma camada?

Um único arquivo .shp sempre contém exatamente uma camada de geometria, então, se o seu zip contiver vários arquivos .shp (uma exportação multicamada), cada um é convertido separadamente e claramente identificado no resultado, para que você saiba quais feições vieram de qual shapefile original.

9. Por que alguns atributos de texto ficam corrompidos após a conversão?

O formato .dbf armazena texto usando uma página de código (codificação de caracteres) específica, e shapefiles mais antigos nem sempre incluem um arquivo .cpg informando qual é. Quando nenhuma codificação é declarada, o conversor recorre a um padrão comum; se os seus dados de origem usavam uma codificação regional incomum, alguns caracteres acentuados podem precisar de correção manual após a conversão.

10. Meu shapefile é enviado para um servidor?

Não. Descompactar o arquivo, analisar a geometria binária .shp, ler a tabela de atributos .dbf, e montar o GeoJSON final acontecem todos localmente no seu navegador usando JavaScript. Seu arquivo nunca sai do seu dispositivo.

A conversão roda inteiramente no seu navegador usando shpjs. Nenhum arquivo é enviado a um servidor. Map tiles © OpenStreetMap contributors.

Muhammad Gulraiz Khan, especialista em GIS e fundador da KONAKTIVE e do OnlineMapMaker.com

Sobre o Autor

Muhammad Gulraiz Khan

Especialista e Consultor em GIS · Fundador da KONAKTIVE

Muhammad Gulraiz Khan é um especialista em GIS com mais de uma década de experiência profissional fornecendo soluções geoespaciais para o setor de energia, incluindo projetos para o Banco Mundial, a Corporação Financeira Internacional (IFC) e a USAID. Ele criou o OnlineMapMaker.com para tornar ferramentas profissionais de mapeamento gratuitas e acessíveis para todos.

Advertisement