Setembro de 2009
Objetivo
Este tutorial mostra as noções básicas de conversão de dados vetoriais GIS em KML usando a biblioteca de código aberto OGR. Embora essas bibliotecas possam ser usadas com a maioria dos arquivos SIG, este tutorial se concentra em trabalhar com shapefiles ESRI.
Introdução
Os dados geográficos estão disponíveis de várias formas na Web. KML é um dos formatos de arquivo mais comuns, mas muitos outros tipos de arquivo também são usados. Grandes empresas, governos e ONGs usam sistemas de informações geográficas para criar seus mapas, além de formatos de arquivos especializados. Esses aplicativos normalmente exigem treinamento especializado ou pelo menos um tempo significativo para a aprendizagem. Os proprietários podem ser bastante caros. Por outro lado, eles são muito poderosos e oferecem um amplo conjunto de ferramentas de mapeamento para o mapeador profissional.
Muitas entidades governamentais liberam parte dos dados de SIG para uso público. Com portais como Data.gov, Sistema de Informações Geográficas de Massachusetts e DataSF, é mais fácil encontrar dados para as comunidades. Este artigo descreve como converter dados vetoriais, ou seja, dados que são compostos por geometrias simples, como pontos, linhas e polígonos, em KML. Com isso, você tem acesso a vários tipos de dados, incluindo:
- Dados de loteamentos que representam os limites da criação de lotes
- Dados de incidentes, como denúncias de crime
- Dados de limites para municípios, estados, municípios, províncias etc.
- Dados de vias, incluindo vias planejadas e existentes
- Permissões de construção, indicando onde foram emitidas
- Dados de saúde, como descrever onde há incidentes de surto de gripe
Há muitos aplicativos excelentes para fazer a conversão de dados, como Google Earth Pro, shp2kml, KML2KML, Arc2Earth e muitos outros. Este artigo se concentra na conversão de dados vetoriais em KML para uso no Google Earth ou no Google Maps, usando os utilitários de biblioteca de abstração de dados geoespaciais(GDAL, na sigla em inglês) de código aberto e inspirando você a incorporar essas bibliotecas aos seus aplicativos.
Uma observação sobre os tipos de arquivo
Embora este artigo siga as etapas para converter arquivos de forma ESRI em KML, os utilitários da GDAL, especificamente OGR, podem ser usados para converter vários tipos de arquivo, incluindo CSV, bancos de dados PostGRES/PostGIS e vários outros formatos. A maioria dos principais formatos de dados disponíveis é compatível. Se você encontrar um formato incompatível, crie um driver para OGR, já que se trata de uma biblioteca de código aberto.
Arquivos de forma
O formato de arquivo de forma mais comum da ESRI é um dos mais comuns. Tecnicamente, o shapefile é um arquivo único com a extensão .shp, mas não é possível abrir um .shp sozinho. Ele requer pelo menos um arquivo .dbf e .shx, e há vários outros arquivos necessários para diversas finalidades. Portanto, quando você vê uma referência a um arquivo de formas, isso quase sempre significa um conjunto de arquivos, geralmente em algum tipo de arquivo compactado, para mantê-los juntos, e é dessa forma que usaremos o termo shapefile no restante deste artigo.
Shapefiles contêm uma grande quantidade de informações sobre as regiões geográficas que descrevem. Elas descrevem as geometrias reais, os metadados sobre as geometrias e as informações sobre o sistema de referência espacial usado, além de muitos outros aspectos dos dados. Para os fins deste artigo, vamos priorizar as geometrias, os metadados e o sistema de referência espacial.
Geometrias e metadados são conceitos fáceis. As geometrias são pontos, linhas e polígonos e podem ser facilmente expressas em KML. Os metadados são dados sobre os dados, geralmente usados para fins de filtragem ou consulta. Por exemplo, uma linha que descreve uma via pode ter metadados sobre o tipo de via (municipal, rodovia federal, estrada etc.), os limites de velocidade, quem a financia, o tamanho etc.
Os sistemas de referência espacial (SRS) são usados para identificar sistemas de coordenadas e projeções usados para criar os dados vetoriais. Em KML, a latitude e longitude são usadas em um sistema de coordenadas WGS84. Mas há outras maneiras de identificar coordenadas em um mapa. Entre as mais conhecidas estão: Universal Transverse de Mercator, a Rede Nacional Britânica e os sistemas do Plano Estadual. Para converter dados em KML, pode ser necessário identificar essas informações. O KML só é compatível com WGS84. Em geral, os shapefiles carregam essas informações com eles, geralmente em um arquivo .prj, e o OGR detecta isso. No entanto, às vezes é necessário identificar o SRS. Às vezes, isso é fornecido de alguma forma pela fonte de dados, na página de download, em um documento leia-me com o download ou em algum outro formato. Normalmente, isso é suficiente. O site Referência espacial contém mais informações sobre a SRS e tem uma referência que permite procurar sistemas de referência individuais.
Ogr2ogr
A GDAL fornece um conjunto eficiente de bibliotecas para trabalhar com dados vetoriais. O ogr2ogr
é particularmente útil para a conversão de dados. Muitos aplicativos, incluindo alguns dos mencionados acima, incorporam a GDAL/OGR.
Para começar, faça o download e instale a GDAL. Você precisará de um shapefile. Para os fins deste tutorial, tente usar um recurso do DataSF. O exemplo abaixo usa o shapefile realtor_neighborhoods
, que pode ser encontrado depois de concordar com a licença aqui. Depois de fazer o download do arquivo, descompacte-o em um diretório que você lembrará. Abra uma linha de comando e navegue até o diretório em que você colocou os dados. Agora, a parte divertida.
O ogr2ogr
pode ser usado na linha de comando com muita facilidade. Veja como converter realtor_neighborhoods
de um shapefile para KML:
ogr2ogr -f "KML" -where "NBRHOOD='Telegraph Hill'" realtor_neighborhoods.kml realtor_neighborhoods.shp
Veja um detalhamento do que esse comando faz:
ogr2ogr
: este é o comando principal.-f "KML
: define o formato de saída como KML.-where "NBRHOOD='Telegraph Hill'"
: essa é uma cláusulawhere
opcional, como em SQL. Basicamente, ele permite que você consulte os dados com base nos metadados. Ele funciona com shapefiles e outros tipos de arquivos compatíveis com consultas. Nesse caso, ela está consultando o campo NBRHOOD e selecionando apenas recursos que tenham um NBRHOOD de Telegraph Hill. Se você não definir esse parâmetro, oogr2ogr
retornará todos os polígonos da vizinhança.realtor_neighborhoods.kml
: é o nome do arquivo de saída. O nome do arquivo de saída vem em primeiro lugar.realtor_neighborhoods.shp
: é o nome do arquivo de entrada. O arquivo .shp representa todo o shapefile.
É muito simples. Este comando grava um arquivo KML semelhante a este:
<?xml version="1.0" encoding="utf-8" ?> <kml xmlns="http://www.opengis.net/kml/2.2"> <Document><Folder><name>realtor_neighborhoods</name> <Schema name="realtor_neighborhoods" id="realtor_neighborhoods"> <SimpleField name="Name" type="string"></SimpleField> <SimpleField name="Description" type="string"></SimpleField> <SimpleField name="OBJECTID" type="float"></SimpleField> <SimpleField name="NBRHOOD" type="string"></SimpleField> <SimpleField name="SFAR_DISTR" type="string"></SimpleField> </Schema> <Placemark> <ExtendedData><SchemaData schemaUrl="#realtor_neighborhoods"> <SimpleData name="OBJECTID">81</SimpleData> <SimpleData name="NBRHOOD">Telegraph Hill</SimpleData> <SimpleData name="SFAR_DISTR">District 8 - Northeast</SimpleData> </SchemaData></ExtendedData> <Polygon><outerBoundaryIs><LinearRing><coordinates>-122.41041847319012,37.805924016582715,0 -122.407203813674,37.806324902060979,0 -122.40667792852096,37.803710121958744,0 -122.40348255423899,37.804117462290641,0 -122.40237202127015,37.798540648764529,0 -122.40876046662795,37.797723222540775,0 -122.41041847319012,37.805924016582715,0</coordinates></LinearRing></outerBoundaryIs></Polygon> <Style><LineStyle><color>ff0000ff</color></LineStyle> <PolyStyle><fill>0</fill></PolyStyle></Style> </Placemark> </Folder></Document></kml>
É possível ver que os metadados do shapefile foram preservados nos elementos Schema
e SimpleData
. Para mais informações sobre como usar ExtendedData e a preservação de dados personalizados, confira a seção Guia do desenvolvedor do KML sobre Como adicionar dados personalizados.
A seguir
A GDAL/OGR oferece uma enorme quantidade de energia. Na implementação mais simples, agora você pode converter todos os seus dados em KML para uso no Google Earth, no Google Maps ou em qualquer outro navegador geográfico compatível com KML. Melhor ainda, você pode incorporar as bibliotecas GDAL/OGR nos seus aplicativos, o que permite automatizar a conversão de dados GIS em KML e controlar a saída dessa conversão. Combine com libkml para ter ainda mais controle programático sobre a geração do KML.