Pregunta

Soy nuevo en el formato KML e intento descubrir cómo mostrar un barco (a png), moviéndome de un lugar a otro a lo largo de un camino (una línea simple dibujada compuesta por varias líneas).

Puedo ver cómo mostrar una Marca de posición, incluso con un icono y una Ruta, por separado.

Lo que me gustaría ver cuando hago clic en el archivo KML es:

  • el barco que aparece en el punto de partida;
  • el camino dibujándose hasta la llegada;
  • el ícono del barco se mueve a una velocidad cómoda (punto de bonificación puedo establecer un tiempo de racionamiento / progreso, bonificación adicional si puedo hacer clic en inicio, pausa o rebobinado) desde la salida hasta la llegada a lo largo del camino.

¿Es eso posible? Sé que es con Google Map, pero puedes programarlo con Javascript, lo que facilita mucho las cosas.

¿Fue útil?

Solución

Esta es una vieja pregunta, y ahora hay una mejor manera de mover una marca de posición (o incluso mejor un modelo) a lo largo de una cadena lineal predeterminada. Considera el uso de esta función:

http://code.google.com/apis/kml/documentation/kmlreference.html #gxtrack

Código de muestra:

<?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">
<Folder>
  <Placemark>
    <gx:Track>
     <when>2010-05-28T02:02:09Z</when>
     <when>2010-05-28T02:02:35Z</when>
     <when>2010-05-28T02:02:44Z</when>
     <when>2010-05-28T02:02:53Z</when>
     <when>2010-05-28T02:02:54Z</when>
     <when>2010-05-28T02:02:55Z</when>
     <when>2010-05-28T02:02:56Z</when>
     <gx:coord>-122.207881 37.371915 156.000000</gx:coord>
     <gx:coord>-122.205712 37.373288 152.000000</gx:coord>
     <gx:coord>-122.204678 37.373939 147.000000</gx:coord>
     <gx:coord>-122.203572 37.374630 142.199997</gx:coord>
     <gx:coord>-122.203451 37.374706 141.800003</gx:coord>
     <gx:coord>-122.203329 37.374780 141.199997</gx:coord>
     <gx:coord>-122.203207 37.374857 140.199997</gx:coord>
   </gx:Track>
 </Placemark>
</Folder> 
</kml>

Otros consejos

La única forma en que he podido hacer que esto funcione en KML estático es interpolar entre los puntos de inicio y parada y agregar marcas de posición para cada cuadro que quiero animar. Entonces, de t = 0 a t = 1, dibuje una marca de posición en el punto de inicio. De t = 1 a t = 2, dibuje una marca de posición en el siguiente punto, etc.

Esto le da la barra de jugador temporal en Google Earth y puede rebobinar o avanzar la animación. Sin embargo, es un poco molesto porque terminas con cada punto de interpolación en tu árbol de marcas de posición. Poner las marcas de posición en su propia carpeta las mantiene fuera del camino, pero no hay forma de ocultarlas al usuario.

Eche un vistazo a http://code.google.com/ apis / kml / documentation / time.html # animating El ejemplo del tiburón ballena hace más o menos lo que quieres para la marca de posición. (La URL del icono del marcador está rota). Animar el progreso a lo largo de la pista se puede hacer usando el mismo truco.

Si desea probar algo mucho más difícil, puede intentar servir KML dinámico. Haga que Google Earth cargue un enlace de red a sus datos iniciales. Luego cargue otro enlace de red con uno que envíe una actualización para su marca de posición en cada momento.

Este enfoque tiene algunas desventajas graves porque requiere un programa externo para manejar Google Earth y no le da acceso al usuario a la barra de reproductor temporal incorporada de Google Earth. También requiere que todos los datos se carguen a través de un enlace de red: los datos KML de un archivo no se pueden actualizar. Eso significa que su programa de controlador debe actuar como un servidor http. Además, en este modelo es muy difícil saber exactamente cuándo Google Earth ha terminado de cargar y dibujar la actualización. Realmente no recomiendo hacer esto; puede hacerlo funcionar con la API COM de Google Earth, pero siempre será una solución frágil.

Hay un complemento de navegador que le permite incrustar Google Earth en una página de navegador. Desde allí, puede usar JavaScript para animar su marca de posición, cambiar sus rutas, etc. Consulte Guía del desarrollador de la API de Google Earth .

Si va a mostrar un barco en Google Earth, un modelo 3D sería un mejor enfoque que una imagen, ya que los usuarios pueden cambiar el ángulo de visión.

Es posible que desee ver los recorridos: http://code.google .com / apis / kml / documentation / touring.html

He visto algo como esto usando una combinación de (varias) etiquetas < gx: AnimatedUpdate > para mover una marca de posición creada previamente que representa su barco y < gx : FlyTo > etiquetas para mover la vista (creo) todo dentro de un < gx: Playlist > .

Espero que esto ayude.

Supongo que esta funcionalidad no existía cuando se respondió originalmente, pero puede lograr el efecto utilizando un recorrido. A continuación se muestra una marca de posición moviéndose de esta manera.

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

<Document>

<Placemark id="boat">
    <Point>
        <coordinates>0,0</coordinates>
    </Point>
</Placemark>

<gx:Tour>
    <name>Play me!</name>
    <gx:Playlist>
      <gx:FlyTo>
        <gx:duration>5.0</gx:duration>
        <LookAt>
          <longitude>0</longitude>
          <latitude>0</latitude>
          <altitude>0</altitude>
          <heading>-95</heading>
          <tilt>65</tilt>
          <range>250000</range>
          <altitudeMode>relativeToGround</altitudeMode>
        </LookAt>
      </gx:FlyTo>

        <gx:AnimatedUpdate>
            <gx:duration>5.0</gx:duration>
            <Update>
                <targetHref/>
                 <Change>
                     <Placemark targetId="boat">
                         <Point>
                             <coordinates>1,1</coordinates>
                         </Point>
                     </Placemark>
                 </Change>
            </Update>
        </gx:AnimatedUpdate>
        <gx:Wait>
            <gx:duration>6.0</gx:duration>
        </gx:Wait>
    </gx:Playlist>
</gx:Tour>

</Document>

</kml>

La ruta podría marcarse con puntos cuya visibilidad se ve alterada por el recorrido en el momento apropiado.

Tengo la siguiente muestra en el sitio de Google. Espero que esta ayuda.

(detalles en el interior: https: // sitios. google.com/site/canadadennischen888/home/kml/auto-refresh-3d-tracking )

  1. prepare un servicio RestFul para generar un archivo KML desde la base de datos (muestra como en https://sites.google.com/site/canadadennischen888 / home / kml / 3d-tracking )

  2. Mi otro código generará un archivo KMZ que tiene un enlace a mi servicio Restful (muestra como en esta página)

  3. El archivo KMZ tiene onInterval

  4. La página web permite al usuario descargar el archivo KMZ que tiene una URL que enlaza con mi servicio Restful

  5. Cuando Google Earth abra el archivo KMZ, Google Earth se actualizará automáticamente para obtener nuevos datos de ese servicio Restful

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top