Existem ilustrações vetoriais de limites geográficos político-administrativos e mapas de todos os 5566 municípios brasileiros na Wikipedia, graças ao trabalho de um usuário que converteu ilustrações do IBGE em formato CorelDraw (CDR) para Scalable Vector Graphics (SVG).
Mas eu queria também arquivos vetoriais no formato KML do Google Earth, para evitar ter que gerar e posicionar manualmente overlays de imagens PNG covertidos dos SVG, que ficam com resolução ruim vistos de perto. Pesquisando no site do IBGE, descobri arquivos de “malha digital” em formato ESRI shapefile, que é um padrão de facto de dados geográficos. Cavando mais na internet, descobri programas para converter dados geográficos com suporte para formato KML do GE. Então, gerei um KML com os limites geográficos de 5566 municípios brasileiros com dados de 2007 do IBGE. O arquivo ficou com 10.8 MB, mas, apesar de grande, carrega relativamente rápido no Google Earth.
Para obter o KML de um único município, procurei o município pela caixa de procura dos “Lugares” do GE 6.2, copiei e colei na própria janela de placemarks do Google Earth. Com a receita abaixo e com outros conjuntos de dados do IBGE, é possível se gerar o KML por região, por estado, por mesorregião e por microrregião. Os dados de 2005 têm melhor resolução, de 50 metros. Os outros, resolução de 250 metros. As linhas são simplificadas, pois os arquivos ficariam gigantescos se a resolução fosse maior.
Making of
Arquivo original em formato ESRI shapefile convertido para KML pelo Linux, pacote gdal-bin, programa ogr2ogr. Linha de comando:
$ export OGR_FORCE_ASCII=NO
$ ogr2ogr -f "KML" -t_srs EPSG:4326 municipios.kml 55mu2500gsr.shp
Para os dados de 2005, o comando é este:
ogr2ogr -f "KML" -s_srs EPSG:4326 -t_srs EPSG:4326 brasil.kml 55mu500gc.sh
Os placemarks são gerados sem nome pelo ogr2ogr. Para colocar os nomes, usei a procura e troca do Notepad++ através de expressões regulares (regexp). Usei o recurso de regexp em que a gente agrupa um padrão de busca entre parêntesis e recoloca este padrão no texto substituído, com \1, \2 etc. Assim, peguei cada nome dentro do campo <SimpleData name="NOME">Aceguá</SimpleData> e inseri o campo <name>Aceguá</name> dentro de cada placemark.
Para os dados de 2005 e 2007, procurei por:
<Placemark>(\n.*?\n.*?\n.*?\n.*?.*?NOME">)(.*)</SimpleData>
Os dados de 2010 precisam desta regexp:
<Placemark>(\n.*?\n.*?\n.*?\n.*?\n.*?\n.*?.*?MUNIC">)(.*)</SimpleData>
Troquei por:
<Placemark>\n\t<name>\2</name>\1\2</SimpleData>
Repare que o comando \2 é uma espécie de variável que insere o nome do município guardado pelo segundo grupo de parêntesis (.*). O comando \1 simplesmente repete o padrão encontrado no primeiro grupo de parêntesis.
Mas o aquivo gerado pelo ogr2ogr tem acentuação em formato ANSI ou ISO-8859-1 (por isso a configuração OGR_FORCE_ASCII=NO, para conservar a codificação dos acentos). No Notepad++, precisei converter para ANSI e — sem salvar o arquivo — recarregá-lo e convertê-lo para UTF-8, que é a codificação do KML (padrão XML). É um comportamento estranho, converter e recarregar sem salvar, talvez porque o Notepad++ está rodando em Wine. Tenho que testar a conversão no Windows.
Download
Aqui está o KMZ com todos os perímetros municipais brasileiros em 2007 em resolução de 250 metros. Arquivo com 10.8 MB. Também tem os perímetros municipais brasileiros em 2005, com melhor resolução, de 50 metros. Arquivo com 15 MB.
Bibliografia
- Fun with shapefile. <http://levien.zonnetjes.net/?
q=shapefiles> - GDAL configuration options. <http://trac.osgeo.org/gdal/
wiki/ConfigOptions> - How to use regular expressions in Notepad++ (tutorial). <http://sourceforge.net/apps/mediawiki/notepad-plus/index.php?title=Regular_Expressions>
- KML Documentation. <https://developers.google.com/kml/documentation/>
- Shapescape. Site para converter diretamente shapefiles para tabelas do Google fusion tables. <http://www.shpescape.com/>


Parabéns pela iniciativa! Ajudou muito. Obrigado mesmo ;)
Obrigado pelo prestígio, Marcelo!