Diseño complejo para LineStrings con DrawOrder

Josh Livni, equipo de las APIs de Google Maps
Diciembre de 2010

Objetivo

En este instructivo, se presentan algunos elementos KML nuevos que se incorporaron con Google Earth 6.0 y se explica cómo se pueden usar para crear cartografía compleja para tus LineStyles. Los elementos que aprenderás son <gx:physicalWidth>, <gx:outerColor>, <gx:outerWidth> y <gx:drawOrder>.

Introducción

Antes del lanzamiento de Google Earth 6.0, tenías una capacidad limitada para definir estilos cartográficos complejos para LineStrings. Por ejemplo, si quisieras crear un estilo para una ruta, en el que el centro de LineString tuviera un color diferente al de los bordes, tendrías que dibujar dos LineStrings separadas con anchos diferentes y, aun así, no podrías garantizar el orden en que se dibujarían.

En los siguientes ejemplos, se explica cómo crear una ruta. Primero, la ruta tendrá un diseño simple. Luego, agregarás una vereda. Por último, agregarás un paso elevado de la autopista.

Una ruta básica

El primer elemento de interés es <gx:physicalWidth>, que te permite establecer el ancho de un LineString en metros, en lugar de píxeles. En el caso de nuestro ejemplo de ruta, esto significa que puedes establecer el ancho de la ruta para que coincida con las imágenes subyacentes, sin importar la altitud desde la que el usuario final vea la ruta. A medida que ganas altitud, la ruta se reduce en píxeles, lo que crea un efecto en el que solo puedes ver el objeto LineString cuando acercas el mapa. Esto puede ser útil si no quieres destacar las rutas pequeñas desde la distancia o si quieres asegurarte de que tu cartografía coincida con las imágenes satelitales en todo momento.

<?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>

A medida que cambias la altitud de la cámara en Google Earth, observa cómo coincide estrechamente con el ancho de las imágenes subyacentes en todo momento.

Cómo agregar aceras

Ahora puedes agregar los elementos <gx:outerColor> y <gx:outerWidth> agregando un color verde claro a los bordes de la ruta para indicar las aceras. Establece el 25% del total de píxeles de la ruta como gris 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>

Dado que el ancho de la ruta se estableció en 12 metros, el valor de 0 .25 para outerWidth significa que 3 metros de ese ancho se establecerán en un verde más claro (aproximadamente 1.5 metros a cada lado de la ruta).

Paso sobre nivel de autopista

Ahora que tienes una ruta básica, es hora de abordar un paso elevado de la autopista. Este será de color naranja claro con una línea mediana naranja más oscura. La clave aquí es incluir un <gx:drawOrder> de 1 (el valor predeterminado es 0) en el <LineSring> para garantizar que la autopista se renderice sobre la ruta. Si estuvieras creando un intercambio de autopistas más complejo (o cualquier cartografía que requiera más de dos LineStrings superpuestas), puedes simplemente agregar un valor más alto a <gx:drawOrder> para la que quieras renderizar en la 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>

Próximos pasos

La capacidad de describir un solo LineString con varios colores, combinada con el control sobre el orden de renderización, te permite crear cartografía de líneas compleja que antes no era posible. Ya sea que estés construyendo un paso elevado de una autopista o un proyecto de arte abstracto, diviértete con estas reglas de diseño.