2009-10-28 14 views
19

Soy nuevo en el formato KML y trato de descubrir cómo mostrar un bote (un png), moviéndome de un lugar a otro a lo largo de una ruta (una línea simple compuesta por varias líneas).¿Cómo mostrar un barco en movimiento en Google Earth?

Veo 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 dibujando hasta la llegada;
  • el icono de la embarcación moviéndose a una velocidad cómoda (punto de bonificación puedo establecer una ración de tiempo/progreso, bonificación adicional si puedo hacer clic en inicio, pausa o rebobinado) desde la partida hasta la llegada a lo largo del camino.

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

+0

¿Qué datos base tiene? solo los puntos finales de las rutas como wuold tienen para planear un viaje en barco, o ¿tiene datos de un GPS que desea mostrar de una manera "similar a una película"? – MikeD

+0

Tengo un punto de partida, un punto de llegada y un punto de control a lo largo del camino. –

+5

+1 solo por ser una pregunta de barco válida – DanSingerman

Respuesta

8

Esta es una pregunta antigua, y ahora hay una mejor manera de mover una marca de posición (o incluso mejor un modelo) a lo largo de una cadena de líneas predeterminada. Mira en el uso de esta característica:

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

Código de ejemplo:

<?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> 
-2
+0

Sé que puedo usar la marca de tiempo, sé que puedo establecer un período de tiempo para hacer que los eventos se agreguen. No sé cómo hacer que funcione como lo describí. Por ahora, puedo hacer que los pines aparezcan y desaparezcan. No es realmente el resultado esperado. –

0

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

+3

De acuerdo, pero estaría encantado de hacer que una imagen funcione primero. –

11

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

Esto le proporciona la barra de reproducción 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 quiere 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 quiere probar algo mucho más difícil, puede probar el KML dinámico. Haga que Google Earth cargue un enlace de red a sus datos iniciales. A continuación, cargue otro enlace de red con un que envíe una actualización para su marca de posición en cada vez que marque.

Este enfoque tiene algunas serias desventajas, ya que requiere un programa externo para conducir Google Earth y no da al usuario acceso a la incorporada en Google Earth barra de jugador temporal. 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 necesita 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 hacer que funcione con la API COM de Google Earth, pero siempre será una solución frágil.

+1

En realidad, puede ocultar marcas de posición del usuario y puede usar el enlace con archivos locales (no es necesario usar http, pero en ese caso no puede establecer encabezados caducados). Sin embargo, ya exploré estas soluciones. No obtuve resultados fluidos y sin problemas. Sé que este es el camino a seguir, pero realmente estoy buscando un ejemplo claro aquí –

3

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

+0

Eso podría ser un camino a seguir. –

0

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

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

Espero que esto ayude.

0

Supongo que esta funcionalidad no existía cuando se respondió originalmente, pero puede lograr el efecto mediante un recorrido. A continuación, se muestra una marca de posición que se mueve 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 se puede marcar con puntos cuya visibilidad se ve alterada por el recorrido en el momento adecuado.

-1

He siguiente ejemplo en el sitio de Google. Espero que esto ayude.

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

  1. preparar un servicio REST para generar el archivo KML desde DB (muestra como en https://sites.google.com/site/canadadennischen888/home/kml/3d-tracking)

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

  3. KMZ tiene onInterval

  4. página web permite al usuario descargar el archivo KMZ que tiene URL que enlace a mi servicio reparador

  5. Cuando KMZ abre Google Earth, Google Earth de actualización automática para obtener nuevos datos de dicho servicio reparador

Cuestiones relacionadas