Como converter KML em shapefile: QGIS, ogr2ogr ou on-line

Para converter KML em shapefile, abra o KML no QGIS, clique com o botão direito na camada, escolha Exportar > Salvar Feições Como e selecione ESRI Shapefile. Na linha de comando, rode ogr2ogr -f "ESRI Shapefile" com um tipo de geometria por saída. Ou solte o .kml na página Converter KML para Shapefile do FileReshape, que roda no seu navegador sem enviar o arquivo, separa pontos, linhas e polígonos e acrescenta arquivos .prj e .cpg.

O que muda quando um KML vira shapefile

O KML, o formato do Google Earth e do Google My Maps, e o shapefile guardam dados geográficos de jeitos muito diferentes, e todo método de conversão precisa lidar com as mesmas diferenças. Conhecê-las antes evita surpresas no resultado.

Um tipo de geometria por arquivo. Um arquivo KML pode misturar pontos, linhas e polígonos em uma mesma pasta. Um shapefile só pode guardar um tipo de geometria, então um KML misturado precisa virar vários shapefiles, um por tipo.

Nomes de campos curtos. A tabela de atributos .dbf permite nomes de campos de até 10 caracteres, então Description vira Descriptio. Valores de texto com mais de 254 caracteres, como descrições longas em HTML, são cortados.

Sem estilos. Cores, larguras de linha e ícones fazem parte do KML, mas não do shapefile, então eles se perdem. Se o estilo importa, você precisa recriá-lo no seu programa de SIG.

Sistema de coordenadas. O KML está sempre em longitude e latitude WGS84. O shapefile pode continuar em WGS84, com um arquivo .prj que diga isso, ou ser reprojetado para um sistema como uma zona UTM, se você precisar de distâncias e áreas em metros. Um shapefile também precisa que as suas partes .shp, .shx e .dbf fiquem juntas, e um arquivo .cpg informa aos programas a codificação do texto.

Converter KML em shapefile no QGIS

O QGIS é gratuito e de código aberto e lê KML por meio do GDAL. Ele é a melhor escolha quando você também quer conferir, editar ou mudar o estilo dos dados, ou reprojetá-los. Quando um KML tem várias pastas ou tipos de geometria misturados, o QGIS pode mostrar uma caixa de diálogo que os lista como camadas separadas; adicione as que você precisar e exporte cada uma delas.

Na caixa de diálogo para salvar a camada vetorial, você também pode definir o sistema de coordenadas da saída e a codificação. Escolha UTF-8 para que nomes com letras como é, ø ou ü sejam preservados. Repita a exportação para cada camada se o KML tiver pontos, linhas e polígonos.

  1. Abra o QGIS e arraste o arquivo .kml para o mapa, ou use Camada > Adicionar Camada > Adicionar Camada Vetorial.
  2. Clique com o botão direito na camada no painel Camadas e escolha Exportar > Salvar Feições Como.
  3. Defina o Formato como ESRI Shapefile, escolha um nome de arquivo e, se precisar, outro sistema de referência de coordenadas (SRC).
  4. Clique em OK e confira a nova camada shapefile e a tabela de atributos dela.

Converter KML em shapefile com o ogr2ogr

O ogr2ogr é o conversor de linha de comando do GDAL. Use-o para arquivos grandes, para trabalhos em lote com muitos arquivos KML e em scripts. Comece com o ogrinfo para ver quais camadas o KML tem; com os drivers de KML do GDAL, cada pasta do KML geralmente é lida como uma camada própria.

Como um shapefile guarda só um tipo de geometria, grave cada tipo em um shapefile próprio. O campo especial OGR_GEOMETRY do OGR SQL permite filtrar por tipo com -where ou -sql. A opção -nlt define o tipo de geometria da camada de saída, e -nlt PROMOTE_TO_MULTI é útil quando uma camada mistura linhas ou polígonos simples e de várias partes. Se você pular a filtragem, o shapefile recebe o tipo da primeira feição, e feições de outros tipos causam erros.

Se os campos de ExtendedData viram colunas depende do driver de KML da sua versão do GDAL. O driver LIBKML os lê; confira quais drivers você tem com ogrinfo --formats. Links de rede, que apontam para um KML em um servidor web, devem de preferência ser baixados e salvos antes como um KML local.

# Lista as camadas (pastas) e os tipos de geometria delas
ogrinfo -so -al places.kml

# Um shapefile por tipo de geometria
ogr2ogr -f "ESRI Shapefile" places_points.shp places.kml -where "OGR_GEOMETRY='POINT' OR OGR_GEOMETRY='MULTIPOINT'" -explodecollections -nlt POINT -lco ENCODING=UTF-8
ogr2ogr -f "ESRI Shapefile" places_lines.shp places.kml -where "OGR_GEOMETRY='LINESTRING' OR OGR_GEOMETRY='MULTILINESTRING'" -nlt PROMOTE_TO_MULTI -lco ENCODING=UTF-8
ogr2ogr -f "ESRI Shapefile" places_polygons.shp places.kml -where "OGR_GEOMETRY='POLYGON' OR OGR_GEOMETRY='MULTIPOLYGON'" -nlt PROMOTE_TO_MULTI -lco ENCODING=UTF-8

# Opcional: reprojeta para a zona UTM 33N em vez de manter WGS84
ogr2ogr -f "ESRI Shapefile" -t_srs EPSG:32633 places_utm.shp places_points.shp

Converter KML em shapefile on-line com o FileReshape

A página Converter KML para Shapefile do FileReshape faz o mesmo trabalho no seu navegador, sem nenhum programa para instalar. Ela usa o GDAL compilado para a web, e o KML é lido do seu próprio disco e não é enviado, então é segura para dados de clientes. O resultado é um .zip com arquivos .shp, .shx, .dbf, .prj e .cpg para cada shapefile.

O conversor cuida dos problemas comuns por você. Pontos, linhas e polígonos são gravados em shapefiles separados, por exemplo Sights_points.shp e Routes_lines.shp, e cada pasta do KML vira um shapefile próprio, com o nome da pasta. Os nomes de campos são cortados em 10 caracteres. Por padrão, a saída continua em WGS84, com um arquivo .prj, e você pode escolher outro sistema, como uma zona UTM. As altitudes são mantidas como shapefiles 3D. A tabela de atributos é gravada em UTF-8, com um arquivo .cpg correspondente.

Conheça os limites dele. Cores e ícones não são levados. O nome e a descrição do marcador são mantidos, mas campos extras guardados como ExtendedData do KML não são lidos pela versão do GDAL para navegador. Links de rede que apontam para dados na web não são seguidos; o conversor informa quantos ignorou. Para um KMZ, extraia antes o KML com a ferramenta Converter KMZ para KML. O limite de tamanho é a memória do seu navegador, e arquivos de até cerca de 200 MB normalmente funcionam.

  1. Abra a página Converter KML para Shapefile e solte o seu arquivo .kml, ou clique para escolhê-lo.
  2. Se quiser, escolha um sistema de coordenadas para a saída, por exemplo uma zona UTM.
  3. Clique em “Converter para Shapefile” e baixe o .zip com os shapefiles; depois descompacte-o e adicione os arquivos .shp ao seu SIG.

Qual método você deve escolher?

Use o conversor no navegador para um arquivo avulso, quando você só precisa de um shapefile para repassar ou abrir em outro programa. Use o QGIS quando quiser conferir o resultado em um mapa, editar atributos, refazer o estilo ou manter os campos de ExtendedData. Use o ogr2ogr para arquivos muito grandes, para converter muitos arquivos de uma vez ou para fluxos de trabalho automatizados. Se o destinatário aceitar GeoPackage, considere usá-lo em vez do shapefile: ele não tem o limite de 10 caracteres nos nomes de campos e pode guardar várias camadas em um único arquivo.

Perguntas frequentes

Por que recebo vários shapefiles a partir de um único KML?

Um shapefile só consegue guardar um tipo de geometria. Quando o seu KML mistura pontos, linhas e polígonos, ou tem várias pastas, cada tipo ou pasta vira um shapefile próprio, para que nenhum dado se perca.

As cores e os ícones do Google Earth são mantidos?

Não. Um shapefile não tem lugar para estilos, então cores, larguras de linha e ícones se perdem com qualquer método. Refaça o estilo da camada no QGIS ou no seu programa de SIG.

Dá para converter um arquivo KMZ em shapefile?

Sim. Um KMZ é um KML compactado em zip. O QGIS e o ogr2ogr geralmente conseguem lê-lo diretamente. Com o FileReshape, use antes a ferramenta Converter KMZ para KML e depois converta o KML em shapefile.

O meu KML é enviado quando eu o converto on-line com o FileReshape?

Não. A conversão roda no seu navegador e o arquivo fica no seu computador.

Por que o campo Description se chama Descriptio?

Os nomes de campos de shapefile são limitados a 10 caracteres pelo formato .dbf, então nomes mais longos são cortados. Renomeie os campos antes de converter, ou use GeoPackage se os nomes longos forem importantes.