Estilo complexo para LineStrings com DrawOrder

Josh Livni, Equipe de APIs do Google Geo
Dezembro de 2010

Objetivo

Este tutorial apresenta alguns novos elementos KML apresentados com o Google Earth 6.0 e como eles podem ser usados para criar uma cartografia complexa para seus LineStyles. Você vai aprender sobre os elementos <gx:physicalWidth>, <gx:outerColor>, <gx:outerWidth> e <gx:drawOrder>.

Introdução

Antes do lançamento do Google Earth 6.0, a capacidade de definir estilos cartográficos complexos para LineStrings era limitada. Por exemplo, se você quisesse criar um estilo para uma estrada em que o centro de LineString tinha uma cor diferente das bordas, precisaria desenhar duas LineStrings separadas com larguras diferentes e, mesmo assim, não seria possível garantir a ordem em que elas seriam desenhadas.

Os exemplos a seguir mostram como criar uma via. Primeiro, a estrada terá um estilo simples. Em seguida, adicione uma calçada. Por fim, você adicionará um viaduto rodoviário.

Uma via básica

O primeiro elemento é <gx:physicalWidth>, que permite definir a largura de uma LineString em metros em vez de pixels. No nosso caso de estrada, isso significa que você pode definir a largura da estrada de acordo com as imagens, não importando a altitude de que o usuário final visualiza a estrada. Conforme você ganha altitude, a via diminui em pixels, criando um efeito em que só é possível ver a LineString quando o zoom está muito próximo. Isso pode ser útil se você não quer enfatizar pequenas vias de distância ou se quer que sua cartografia sempre corresponda às imagens de satélite.

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<Document>
  <name>Road Styling</name>
  <Style id="street">
    <LineStyle>
      <color>ff235523</color>
      <gx:physicalWidth>12</gx:physicalWidth>
    </LineStyle>
  </Style>
  <Placemark>
    <styleUrl>#street</styleUrl>
    <LineString>
      <coordinates>
      -122.2442883478408,37.4347536724074,0
      -122.2417741446485,37.43594997501623,0
      -122.2414951359056,37.43611878445952,0
      </coordinates>
    </LineString>
  </Placemark>
</Document>
</kml>

Ao alterar a altitude da câmera no Google Earth, observe como ela se aproxima da largura das imagens em todos os momentos.

Adicionar calçadas

Agora é possível adicionar os elementos <gx:outerColor> e <gx:outerWidth> adicionando um verde-claro às bordas da via para representar as calçadas. Defina 25% do total de pixels da estrada em cinza-claro.

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<Document>
  <name>Road Styling</name>
  <Style id="street_sidewalk">
    <LineStyle>
      <color>ff235523</color>
      <gx:physicalWidth>12</gx:physicalWidth>
      <gx:outerColor>ff55ff55</gx:outerColor>
      <gx:outerWidth>0.25</gx:outerWidth>
    </LineStyle>
  </Style>
  <Placemark>
    <styleUrl>#street_sidewalk</styleUrl>
    <LineString>
      <coordinates>
      -122.2442883478408,37.4347536724074,0
      -122.2417741446485,37.43594997501623,0
      -122.2414951359056,37.43611878445952,0
      </coordinates>
    </LineString>
  </Placemark>
</Document>
</kml>

Já que a largura da estrada foi definida para 12 metros, o valor de 0,25 para a outerWidth significa que 3 metros dessa largura serão definidos para um verde mais claro (cerca de 1,5 metro em cada lado da estrada).

Um viaduto

Agora que você tem uma via básica, é hora de atravessar uma via superior. A opção vai ser laranja-claro com uma linha média laranja-escuro. A principal adição aqui é incluir um <gx:drawOrder> de 1 (o padrão é 0) no <LineSring> para garantir que a rodovia seja renderizada sobre a via. Se você estiver criando uma alternância de rodovia mais complexa (ou qualquer tipografia que exija mais de duas LineStrings sobrepostas), basta adicionar um valor mais alto ao <gx:drawOrder> para qualquer que você queira renderizar na parte superior.

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<Document>
  <name>Road Styling</name>
  <Style id="street_sidewalk">
    <LineStyle>
      <color>ff235523</color>
      <gx:physicalWidth>10</gx:physicalWidth>
      <gx:outerColor>ff55ff55</gx:outerColor>
      <gx:outerWidth>0.25</gx:outerWidth>
    </LineStyle>
  </Style>
  <Style id="highway">
    <LineStyle>
      <color>cc1447ff</color>
      <gx:physicalWidth>20</gx:physicalWidth>
      <gx:outerColor>cc1473ff</gx:outerColor>
      <gx:outerWidth>0.75</gx:outerWidth>
    </LineStyle>
  </Style>
  <Placemark>
    <styleUrl>#street_sidewalk</styleUrl>
    <LineString>
      <coordinates>
     -122.2442883478408,37.4347536724074,0
     -122.2417741446485,37.43594997501623,0
     -122.2414951359056,37.43611878445952,0
      </coordinates>
    </LineString>
  </Placemark>
  <Placemark>
    <styleUrl>#highway</styleUrl>
    <LineString>
    <gx:drawOrder>1</gx:drawOrder>
    <coordinates>
      -122.2442692500139,37.43634904345254,0
      -122.2415928723012,37.43416417520744,0
    </coordinates>
    </LineString>
  </Placemark>
</Document>
</kml>

A seguir

A capacidade de descrever uma única LineString com várias cores, combinada com o controle sobre a ordem de renderização, permite criar uma cartografia de linha complexa que não era possível anteriormente. Seja criando um viaduto ou um projeto de arte abstrata, divirta-se com essas regras de estilo.