Tutorial do KML 

KML é um formato de arquivo usado para exibir dados geográficos em um navegador da Terra, como Google Earth, Google Maps e Google Maps para celular. O KML utiliza uma estrutura de tags com elementos e atributos aninhados e se baseia no padrão XML. Todas as tags diferenciam maiúsculas e minúsculas e devem aparecer exatamente como listadas na Referência do KML. A referência indica as tags que são opcionais. Em determinado elemento, as tags devem aparecer na ordem mostrada na referência.

Se você é um iniciante em KML, explore esse documento e os arquivos de amostra que o acompanham (SamplesInEarth e SamplesInMaps) para começar a aprender sobre a estrutura básica de um arquivo KML e as tags mais comumente utilizadas. A primeira seção descreve recursos que podem ser criados com a interface do usuário do Google Earth. Esses recursos incluem marcadores, descrições, superposições de solo, caminhos e polígonos. A segunda seção descreve recursos que requerem a criação de KML com um editor de texto. Quando um arquivo de texto é salvo com uma extensão .kmlou .kmz, os navegadores do Google Earth sabem como exibi-lo.


Dica: Para ver o "código" de um recurso do Google Earth, basta clicar com o botão direito do mouse no recurso no Visualizador em 3D do Google Earth e selecionar Copiar Depois, cole o conteúdo da área de transferência em qualquer editor de texto. O recurso visual exibido no Google Earth é convertido em texto KML equivalente. Não deixe de experimentar este recurso.

Todos os exemplos descritos aqui estão no arquivo de Amostras de KML. Comece baixando esse arquivo para ver os exemplos no Google Earth.

Para saber mais

Referência do KML 2.2 fornece detalhes sobre o formato de arquivo KML. Se você estiver familiarizado com XML, também se interessará pelo Esquema do KML 2.2.

Para uma discussão sobre como usar alguns recursos importantes no KML, consulte o Guia do desenvolvedor.


1 Documentos KML básicos

O tipo mais simples de documentos KML são aqueles que pode ser criados diretamente no Google Earth, isto é, você não precisa editar ou criar KML em um editor de texto. Marcadores, superposições de solo, caminhos e polígonos podem ser criados diretamente no Google Earth.

Marcadores

Um marcador é um dos recursos usados com mais frequência no Google Earth. Ele marca uma posição na superfície da Terra, usando um alfinete amarelo como ícone. O marcador mais simples inclui somente um elemento <Point> (ponto), que especifica o local do marcador. Você pode especificar um nome e um ícone personalizado para o marcador, assim como pode acrescentar outros elementos geométricos a ele.

Abra o arquivo de Amostras de KML no Google Earth e expanda a subpasta Marcadores. Essa pasta tem três tipos diferentes de marcadores: simplesflutuante e deslocado. O código KML do marcador simples é assim:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Placemark>
<name>Simple placemark</name>
<description>Attached to the ground. Intelligently places itself at the height of the underlying terrain.</description>
<Point>
<coordinates>-122.0822035425683,37.42228990140251,0</coordinates>
</Point>
</Placemark> </kml>

A estrutura deste arquivo é dividida da seguinte forma:

  • Um cabeçalho XML. É a linha 1 de todo arquivo KML. Não se usa espaço nem outros caracteres antes dessa linha.
  • Uma declaração de namespace do KML. É a linha 2 de todo arquivo KML 2.2.
  • Um objeto de marcador que contém estes elementos:
    • Um name que será usado como rótulo do marcador
    • Uma description que aparece no "balão" anexado ao marcador
    • Um Point que especifica a posição do marcador na superfície da Terra (longitude, latitude e altitude opcional)

Se você estiver imaginando onde está o marcador, ele está bem em cima do Prédio 41 do Google, onde desenvolvemos o Google Earth!

O que geralmente os usuários pensam como sendo um "marcador" no Google Earth é, na verdade, um elemento <Placemark> com um <Point> filho no KML. Um marcador de ponto é apenas um modo de desenhar um ícone e rotulá-lo no visualizador em 3D do Google Earth. Por padrão, o ícone é o conhecido alfinete amarelo. No KML, um marcador (<Placemark>) pode conter um ou mais elementos geométricos, tais como um caminho (LineString), um polígono (Polygon) ou um modelo (Model). Mas somente um marcador (<Placemark>) com um ponto (Point) pode ter um ícone e um rótulo. O ponto é usado para colocar o ícone, mas não há representação gráfica do ponto.

HTML descritivo em marcadores

O arquivo de Amostras de KML tem um exemplo de quase tudo que pode ser feito com o texto do marcador. Você pode adicionar links, tamanhos, estilos e cores de fonte, e especificar o alinhamento de texto e as tabelas. Se quiser ver a lista completa, copie e cole o exemplo de marcador "HTML descritivo" (na pasta de estilos e marcação) em um editor de texto.

Marcação automática no Google Earth (versão 4.0 e posterior)

O Google Earth 4.0 tem um recurso de marcação automática que converte automaticamente texto, comowww.google.com, em hiperlinks ativos nos quais o usuário pode clicar. O texto dentro da tag <description> (descrição), da tag <Snippet> (fragmento) e do elemento <text> (texto) de <BalloonStyle> (estilo de balão) são transformados automaticamente em hiperlinks HTTP padrão. Você não precisa adicionar as tags <a href= ...>.

Uso do elemento CDATA

Se você quiser escrever HTML padrão dentro de uma tag <description> (descrição), coloque-o dentro de uma tag CDATA. Caso contrário, os colchetes angulares precisam ser escritos como referências da entidade para evitar que o Google Earth analise incorretamente o HTML (por exemplo, > está escrito como &gt; e o símbolo < está escrito como &lt;). Esse é o recurso padrão do XML e não é exclusivo do Google Earth.

Considere a diferença entre a marcação HTML com e sem tags CDATA. Primeiro, veja a descrição (<description>) com as tags CDATA:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Document> <Placemark> <name>CDATA example</name> <description> <![CDATA[ <h1>CDATA Tags are useful!</h1> <p><font color="red">Text is <i>more readable</i> and <b>easier to write</b> when you can avoid using entity references.</font></p> ]]> </description> <Point> <coordinates>102.595626,14.996729</coordinates> </Point> </Placemark> </Document> </kml>

Veja a descrição (<description>) sem tags CDATA, de modo que os caracteres especiais tenham que usar referências de entidade:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Document> <Placemark> <name>Entity references example</name> <description> &lt;h1&gt;Entity references are hard to type!&lt;/h1&gt; &lt;p&gt;&lt;font color="green"&gt;Text is &lt;i&gt;more readable&lt;/i&gt; and &lt;b&gt;easier to write&lt;/b&gt; when you can avoid using entity references.&lt;/font&gt;&lt;/p&gt; </description> <Point> <coordinates>102.594411,14.998518</coordinates> </Point> </Placemark> </Document> </kml>

Superposições de solo

As superposições de solo permitem "projetar" uma imagem no terreno da Terra. O elemento <Icon> contém o link para o arquivo .jpg com a imagem da superposição. Aqui está um exemplo de superposição de solo no arquivo de Amostras de KML, que mostra o monte Etna em erupção em 2001.

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Folder>
<name>Ground Overlays</name>
<description>Examples of ground overlays</description>
<GroundOverlay>
<name>Large-scale overlay on terrain</name>
<description>Overlay shows Mount Etna erupting on July 13th, 2001.</description>
<Icon>
<href>http://code.google.com/apis/kml/documentation/etna.jpg</href>
</Icon>
<LatLonBox>
<north>37.91904192681665</north>
<south>37.46543388598137</south>
<east>15.35832653742206</east>
<west>14.60128369746704</west>
<rotation>-0.1556640799496235</rotation>
</LatLonBox>
</GroundOverlay>
</Folder> </kml>

Observe que o arquivo começa com as mesmas duas linhas que o primeiro exemplo: o cabeçalho XML e a declaração de namespace do KML.

Este exemplo usa uma pasta (intitulada "Superposições de solo") como mecanismo de agrupamento e rótulo de seu conteúdo. Observe como a pasta aparece no painel Lugares quando você carrega o arquivo de Amostras de KML no Google Earth.

A colocação de uma superposição de solo é controlada pela tag <LatLonBox> (caixa latitude/longitude). Os valores delimitadores são fornecidos para as latitudes norte e sul e longitudes leste e oeste. Além disso, os valores de rotação são dados para imagens cujo eixo y não coincide com a grade norte. Este exemplo usa uma imagem JPEG para a superposição. O Google Earth também suporta os formatos BMP, GIF, TIFF, TGA e PNG.

Caminhos

Muitos tipos diferentes de caminhos podem ser criados no Google Earth. Isso torna fácil ser muito criativo com seus dados. No KML, o elemento <LineString> (caminho) cria um caminho. Veja o exemplo "Deslocado absoluto" na pasta Caminhos, que mostra como a forma foi gerada pelo seguinte código:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Document>
<name>Paths</name>
<description>Examples of paths. Note that the tessellate tag is by default
set to 0. If you want to create tessellated lines, they must be authored
(or edited) directly in KML.</description> <Style id="yellowLineGreenPoly">
<LineStyle>
<color>7f00ffff</color>
<width>4</width>
</LineStyle>
<PolyStyle>
<color>7f00ff00</color>
</PolyStyle>
</Style> <Placemark>
<name>Absolute Extruded</name>
<description>Transparent green wall with yellow outlines</description>
<styleUrl>#yellowLineGreenPoly</styleUrl>
<LineString>
<extrude>1</extrude>
<tessellate>1</tessellate>

<altitudeMode>absolute</altitudeMode>
<coordinates> -112.2550785337791,36.07954952145647,2357
-112.2549277039738,36.08117083492122,2357
-112.2552505069063,36.08260761307279,2357
-112.2564540158376,36.08395660588506,2357
-112.2580238976449,36.08511401044813,2357
-112.2595218489022,36.08584355239394,2357
-112.2608216347552,36.08612634548589,2357
-112.262073428656,36.08626019085147,2357
-112.2633204928495,36.08621519860091,2357
-112.2644963846444,36.08627897945274,2357
-112.2656969554589,36.08649599090644,2357 </coordinates>
</LineString> </Placemark>
</Document> </kml>

Observe como, na verdade, é somente uma linha desenhada na altitude acima do solo. A tag <tessellate> divide a linha em partes menores e a tag <extrude> estende a linha até o solo.

Polígonos

Você pode usar polígonos para criar construções simples e outras formas. Veja mais exemplos da pasta Polígonos no arquivo de Amostras de KML.

O exemplo Pentágono é gerado com o desenho simples de conchas internas e externas e depois deslocando-as para o solo. Veja o código:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Placemark>
<name>The Pentagon</name>
<Polygon>
<extrude>1</extrude>
<altitudeMode>relativeToGround</altitudeMode>
<outerBoundaryIs>
<LinearRing>
<coordinates>
-77.05788457660967,38.87253259892824,100
-77.05465973756702,38.87291016281703,100
-77.05315536854791,38.87053267794386,100
-77.05552622493516,38.868757801256,100
-77.05844056290393,38.86996206506943,100
-77.05788457660967,38.87253259892824,100
</coordinates>
</LinearRing>
</outerBoundaryIs>
<innerBoundaryIs>
<LinearRing>
<coordinates>
-77.05668055019126,38.87154239798456,100
-77.05542625960818,38.87167890344077,100
-77.05485125901024,38.87076535397792,100
-77.05577677433152,38.87008686581446,100
-77.05691162017543,38.87054446963351,100
-77.05668055019126,38.87154239798456,100
</coordinates>
</LinearRing>
</innerBoundaryIs>
</Polygon>
</Placemark> </kml>

2 Documentos KML avançados

Esta seção descreve alguns dos elementos KML que devem ser criados com um editor de texto, como estilos compartilhados de geometria, ícones realçados para marcadores e superposições de tela. A criação "manual" do KML é um pouco mais avançada do que usar a interface do Google Earth para criar e modificar recursos, mas, com alguma prática, a maioria dos usuários se sente confortável para editar arquivos KML e adicionar esses efeitos.

Estilos de geometria

Depois de criar recursos com o Google Earth e verificar o código KML que o Google Earth gera, você observará como os estilos são uma parte importante para exibição de seus dados. Usuários experientes aprenderão como definir seus próprios estilos.

Se você definir um estilo no início de um documento KML, assim como um ID para ele, poderá usar esse estilo em Geometry (geometria), Placemarks (marcadores) e Overlays (superposições), definidos em outros locais do documento. O mesmo estilo pode ser usado por mais de um elemento; portanto, os estilos definidos e usados dessa forma são chamados de estilos compartilhados. Defina determinado estilo uma vez e depois faça referência a ele várias vezes com o elemento <styleUrl> (URL de estilo). Se a definição de estilo estiver dentro do mesmo arquivo, o sinal # deverá preceder o ID do estilo. Se a definição de estilo estiver em um arquivo externo, inclua o URL completo no elemento <styleUrl>.

O arquivo de Amostras de KML contém vários estilos compartilhados, cada um definido com um ID no começo de cada arquivo. Observe que será mais fácil ver o efeito de seus IDs se eles forem sequências de caracteres descritivos. Veja um exemplo de um estilo ("transBluePoly") que define uma cor azul transparente para as faces do polígono e uma largura de linha de 1,5 (com a cor branca padrão) para as bordas. Esse estilo é usado pelo Prédio 41 do exemplo Campus Google (na pasta Polígonos):

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<Style id="transBluePoly">
<LineStyle>
<width>1.5</width>
</LineStyle>
<PolyStyle>
<color>7dff0000</color>
</PolyStyle>
</Style> <Placemark>
<name>Building 41</name>
<styleUrl>#transBluePoly</styleUrl>
<Polygon>
<extrude>1</extrude>
<altitudeMode>relativeToGround</altitudeMode>
<outerBoundaryIs>
<LinearRing>
<coordinates> -122.0857412771483,37.42227033155257,17
-122.0858169768481,37.42231408832346,17
-122.085852582875,37.42230337469744,17
-122.0858799945639,37.42225686138789,17
-122.0858860101409,37.4222311076138,17
-122.0858069157288,37.42220250173855,17
-122.0858379542653,37.42214027058678,17
-122.0856732640519,37.42208690214408,17
-122.0856022926407,37.42214885429042,17
-122.0855902778436,37.422128290487,17
-122.0855841672237,37.42208171967246,17
-122.0854852065741,37.42210455874995,17
-122.0855067264352,37.42214267949824,17
-122.0854430712915,37.42212783846172,17
-122.0850990714904,37.42251282407603,17
-122.0856769818632,37.42281815323651,17
-122.0860162273783,37.42244918858722,17
-122.0857260327004,37.42229239604253,17
-122.0857412771483,37.42227033155257,17 </coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
</Document>
</kml>

Observe que o elemento <Style> (estilo) é filho de <Placemark> (marcador) e não da geometria que afeta.

Estilos de ícones realçados

O "Ícone realçado" na pasta de estilos e marcação mostra como criar um efeito de rolagem com o KML. O documento define dois estilos, um para "normalPlacemark" e outro para "highlightPlacemark" (mostrado quando o cursor rola sobre o ícone). O elemento <StyleMap> (mapa de estilos) tem dois pares de chaves/valores que mapeiam cada estilo de ícone para um estado de ícone. Existem dois estados de ícone normal e destacado.

Veja as etapas básicas mostradas aqui:

  1. Defina um estilo (<Style>) para o ícone normal do marcador e atribua um ID a ele (aqui "Marcador normal"). O estilo (<Style>) inclui um ícone (<Icon>) com uma referência (<href>) para a imagem real a ser usada, como mostrado abaixo.
  2. Defina um estilo (<Style>) para o ícone de realce do marcador e atribua um ID a ele (aqui, "highlightPlacemark").
  3. Crie o elemento <StyleMap> e atribua um ID a ele ("exampleStyleMap"). O marcador fará referência a esse ID.
  4. No elemento <StyleMap>, especifique o "#normalPlacemark" para o estado normal .
  5. No elemento <StyleMap>, especifique o "#highlightPlacemark" para o estado destacado .
  6. No Placemark, adicione um elemento <styleUrl> que faça referência a "#exampleStyleMap"".
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>Highlighted Icon</name>
<description>Place your mouse over the icon to see it display the new icon</description>
<Style id="highlightPlacemark">
<IconStyle>
<Icon>
<href>http://maps.google.com/mapfiles/kml/paddle/red-stars.png</href>
</Icon>
</IconStyle>
</Style>
<Style id="normalPlacemark">
<IconStyle>
<Icon>
<href>http://maps.google.com/mapfiles/kml/paddle/wht-blank.png</href>
</Icon>
</IconStyle>
</Style>
<StyleMap id="exampleStyleMap">
<Pair>
<key>normal</key>
<styleUrl>#normalPlacemark</styleUrl>
</Pair>
<Pair>
<key>highlight</key>
<styleUrl>#highlightPlacemark</styleUrl>
</Pair>
</StyleMap>
<Placemark>
<name>Roll over this icon</name>
<styleUrl>#exampleStyleMap</styleUrl>
<Point>
<coordinates>-122.0856545755255,37.42243077405461,0</coordinates>
</Point>
</Placemark>
</Document>
</kml>

Superposições de tela

As superposições de tela não podem ser criadas diretamente no Google Earth e, portanto, são mais difíceis de criar que as superposições de solo. A pasta Superposições de tela, no arquivo Amostras de KML, contém uma coleção abrangente de amostras.

Como exemplo, ative a pasta "Posicionamento absoluto: parte superior esquerda" no arquivo de Amostras de KML, você verá uma superposição de tela na parte superior esquerda da janela de visualização. Isto foi criado com o código KML a seguir:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<ScreenOverlay>
<name>Absolute Positioning: Top left</name>
<Icon>
<href>http://code.google.com/apis/kml/documentation/top_left.jpg</href>
</Icon>
<overlayXY x="0" y="1" xunits="fraction" yunits="fraction"/>
<screenXY x="0" y="1" xunits="fraction" yunits="fraction"/>
<rotationXY x="0" y="0" xunits="fraction" yunits="fraction"/>
<size x="0" y="0" xunits="fraction" yunits="fraction"/>
</ScreenOverlay>
</kml>

O posicionamento é controlado com o mapeamento de um ponto na imagem especificada por <overlayXY> (superposiçãoXY) para um ponto na tela especificado por <screenXY> (telaXY). Neste caso, o canto superior esquerdo da imagem (0,1) coincide com o mesmo ponto da tela.

Verifique os outros exemplos na pasta para ver como é possível obter outras posições fixas e para criar imagens que são dimensionadas dinamicamente com o tamanho da tela. (xunits e yunits também podem ser especificados como "pixels" para controle de precisão.) Para obter mais detalhes, consulte a Referência do KML 2.2.

Links de rede

Um link de rede contém um elemento <Link> com um a referência de hipertexto (<href>) que carrega um arquivo. A <href> pode ser uma especificação de arquivo local ou um URL absoluto. Apesar do nome, um link de rede (<NetworkLink>) não precisa necessariamente carregar arquivos da rede.

A <href> em um link especifica o local de um destes itens:

  • Um arquivo de imagem usado por ícones em estilos de ícones, superposições de solo e de tela
  • Um arquivo de modelo usado no elemento <Model>
  • Um arquivo KML ou KMZ carregado por um link de rede

O arquivo especificado pode ser um arquivo local ou estar em um servidor remoto. Em sua forma mais simples, os links de rede são um modo útil de dividir um arquivo KML grande em arquivos menores e mais gerenciáveis no mesmo computador.

Até o momento, todos os nossos exemplos necessitaram que o código KML fosse enviado ao Google Earth da máquina local. Os links de rede oferecem a você a capacidade de apresentar o conteúdo de um local remoto. Geralmente, eles são usados para distribuir dados para diversos usuários. Desse modo, se houver necessidade de corrigir os dados, bastará fazê-lo no local de origem e todos os usuários receberão os dados atualizados automaticamente.

Scripts CGI para KML

Além de apontar para arquivos que contêm dados estáticos, a <href> do link de rede pode apontar para dados gerados dinamicamente; por exemplo, por um script CGI localizado em um servidor de rede. Se você tiver algum conhecimento de linguagem de script, como PHP, Python ou Perl, poderá criar um script que envie um fluxo (ou arquivo) de dados KML para cada link de rede.

Duas coisas são necessárias para o envio de KML por meio de um CGI de rede:

Quando uma chamada é feita do cliente (Google Earth) para o servidor, o servidor deve (1) retornar um código de resposta de HTTP 200 e (2) definir o tipo de conteúdo da resposta para text/plain ou application/vnd.google-earth.kml+xml..

A resposta deve ser um KML válido. Em aplicações complexas, é muito importante haver o tratamento de erro adequado.

Dica: Um modo simples de tratar erros é analisar o erro do servidor como o texto do nome de uma pasta. Por exemplo, o servidor poderia retornar <Folder><name>database inaccessible</name></Folder> como uma sequência de caracteres. Isso é mais informativo e, sem dúvida, mais amigável que deixar a conexão cair.

Os exemplos a seguir usam Python, mas são igualmente válidos em qualquer outra linguagem de script.

Como gerar um marcador aleatório

O script Python a seguir gera valores inteiros aleatórios para latitude e longitude e, em seguida, insere esses valores no elemento <coordinates> de um <Point>. Sempre que o link de rede for atualizado, o script Python será executado novamente e gerará o KML com novos valores de latitude e longitude.

#!/usr/bin/python

import random

latitude = random.randrange(-90, 90)
longitude = random.randrange(-180, 180)
kml = (
   '<?xml version="1.0" encoding="UTF-8"?>\n'
   '<kml xmlns="http://www.opengis.net/kml/2.2">\n'
   '<Placemark>\n'
   '<name>Random Placemark</name>\n'
   '<Point>\n'
   '<coordinates>%d,%d</coordinates>\n'
   '</Point>\n'
   '</Placemark>\n'
   '</kml>'
   ) %(longitude, latitude)
print 'Content-Type: application/vnd.google-earth.kml+xml\n'
print kml

Veja um exemplo de um arquivo KML contendo um link de rede que carrega este script Python:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Folder>
<name>Network Links</name>
<visibility>0</visibility>
<open>0</open>
<description>Network link example 1</description>
<NetworkLink>
<name>Random Placemark</name>
<visibility>0</visibility>
<open>0</open>
<description>A simple server-side script that generates a new random
placemark on each call</description>
<refreshVisibility>0</refreshVisibility>
<flyToView>0</flyToView>
<Link>
<href>http://yourserver.com/cgi-bin/randomPlacemark.py</href>
</Link>
</NetworkLink>
</Folder>
</kml>

Consultas de atualização com base na visualização

Um link de rede padrão é um link unidirecional: os dados fluem somente do servidor para o Google Earth. A atualização com base na visualização permite a comunicação bidirecional. Quando a atualização está ativa, o Google Earth retorna as coordenadas de visualização ao servidor em determinada hora. Isso pode significar que a cada n segundos, minutos ou horas, ou após um certo tempo decorrido, a visualização parou de se mover. Consulte <viewRefreshMode> na Referência do KML 2.2.

As coordenadas são retornadas ao servidor por meio do protocolo HTTP GET, que anexa as coordenadas da seguinte maneira (estas são as informações padrão da caixa delimitadora):

GET /path/to/sever/script/query?BBOX=[longitude_west, latitude_south, longitude_east, latitude_north] HTTP/1.1

Se a solicitação foi feita enquanto o usuário estava olhando São Francisco, as coordenadas podem ter esta aparência:

GET /path/to/server/script/query?BBOX=-122.497790,37.730385,-122.380087,37.812331 HTTP/1.1

Este recurso pode ser usado para algumas aplicações criativas, mas, preliminarmente, veja um exemplo simples abaixo.

Rastreamento de um ponto diretamente na sua visualização

O script Python do servidor a seguir analisa a mensagem de retorno enviada pelo Google Earth e responde com um marcador no centro da tela. Sempre que o link de rede é atualizado, é gerado um novo marcador.

#!/usr/bin/python

import cgi

url = cgi.FieldStorage()
bbox = url['BBOX'].value
bbox = bbox.split(',')
west = float(bbox[0])
south = float(bbox[1])
east = float(bbox[2])
north = float(bbox[3])

center_lng = ((east - west) / 2) + west
center_lat = ((north - south) / 2) + south

kml = ( 
   '<?xml version="1.0" encoding="UTF-8"?>\n'
   '<kml xmlns="http://www.opengis.net/kml/2.2">\n'
   '<Placemark>\n'
   '<name>View-centered placemark</name>\n'
   '<Point>\n'
   '<coordinates>%.6f,%.6f</coordinates>\n'
   '</Point>\n'
   '</Placemark>\n'
   '</kml>'
   ) %(center_lng, center_lat)

print 'Content-Type: application/vnd.google-earth.kml+xml\n'
print kml

Veja o KML do link de rede que carrega o script Python:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Folder>
<name>Network Links</name>
<visibility>0</visibility>
<open>0</open>
<description>Network link example 2</description>
<NetworkLink>
<name>View Centered Placemark</name>
<visibility>0</visibility>
<open>0</open>
<description>The view-based refresh allows the remote server to calculate
the center of your screen and return a placemark.</description>
<refreshVisibility>0</refreshVisibility>
<flyToView>0</flyToView>
<Link>
<href>http://yourserver.com/cgi-bin/viewCenteredPlacemark.py</href>

<refreshInterval>2</refreshInterval>
<viewRefreshMode>onStop</viewRefreshMode>
<viewRefreshTime>1</viewRefreshTime>
</Link>
</NetworkLink>
</Folder>
</kml>

Use o princípio ilustrado neste exemplo para algumas aplicações muito complexas. Por exemplo, se você tiver um banco de dados de informações geográficas, poderá extrair as coordenadas do visualizador, fazer uma chamada para os dados específicos à visualização no banco de dados e retorná-los ao Google Earth como KML.

3 Tipos de MIME do KML

Ao responder a uma solicitação do Google Earth (ou de qualquer navegador da Terra), um servidor KML deve seguir um determinado conjunto de regras para que o Google Earth possa interpretar suas respostas corretamente.

Quando bem-sucedido, o servidor deverá retornar um código de resposta HTTP 200 e definir o tipo de conteúdo da resposta para um tipo de MIME adequado, como descrito aqui.

O Google Earth lê arquivos KML e KMZ. Este é o tipo de MIME de arquivos KML:

  • application/vnd.google-earth.kml+xml

Este é o tipo de MIME de arquivos KMZ:

  • application/vnd.google-earth.kmz

Para Apache, adicione essas linhas ao arquivo httpd.conf:

  • AddType application/vnd.google-earth.kml+xml .kml
  • AddType application/vnd.google-earth.kmz .kmz

Consulte a documentação da Microsoft para obter detalhes sobre como configurar os tipos de MIME no IIS da Microsoft.

O corpo da resposta deve conter dados KML válidos, incluindo a declaração XML (<?xml version="1.0" encoding="UTF-8"?>). Se o servidor retornar um KML inválido, o link de rede parará, desativará e enviará uma mensagem de erro.

Próximos passos

Deseja mais informações? Consulte o Guia do desenvolvedor, que descreve recursos importantes do KML. Consulte também a Referência do KML para obter mais informações sobre elementos específicos.