如何在Google地球中显示移动的船?

时间:2009-10-28 22:39:58

标签: kml google-earth

我是KML格式的新手,并尝试弄清楚如何显示船(png),沿着路径从一个地方移动到另一个地方(由几条线组成的简单线条)。

我可以看到如何分别显示地标,即使是图标和路径。

点击KML文件时,我希望看到的是:

  • 船出现在出发点;
  • 路径绘制本身直到到达;
  • 船只图标以舒适的速度移动(奖励点,我可以设置一个配给时间/进度,如果我可以点击开始,暂停或倒带,额外的奖励)从出发到到达路径。

这甚至可能吗?我知道这是谷歌地图,但您可以使用Javascript对其进行编程,这样可以减少很多事情。

8 个答案:

答案 0 :(得分:11)

我能够在静态KML中进行此操作的唯一方法是在起点和终点之间进行插值,并为我想要设置动画的每个帧添加地标。因此,从t = 0到t = 1,在起点绘制一个地标。从t = 1到t = 2,在下一个点绘制一个地标,等等。

这为您提供了Google地球中的时间播放器栏,您可以回放或推进动画。然而,它有点烦人,因为你最终得到地标树中的每个插值点。将地标放在自己的文件夹中会使它们不受影响,但是无法将它们隐藏起来。

看看http://code.google.com/apis/kml/documentation/time.html#animating 鲸鲨的例子或多或少地对地标做了什么。 (标记图标的URL已损坏)。沿着轨道制作动画可以使用相同的技巧完成。

如果您想尝试更困难的事情,可以尝试提供动态KML。让Google地球加载到您的初始数据的网络链接。然后加载另一个网络链接,并在每次打勾时发送地标更新。

此方法存在一些严重缺点,因为它需要外部程序来驱动Google地球,并且不会让用户访问内置的Google地球时间播放器栏。它还要求通过网络链接加载所有数据 - 无法更新文件中的KML数据。这意味着您的驱动程序需要充当http服务器。此外,在此模型中,很难确切知道Google地球何时完成加载和绘制更新。我真的不建议这样做;您可以使用Google地球COM API使其工作,但它始终是一个脆弱的解决方案。

答案 1 :(得分:9)

这是一个老问题,现在有一种更好的方法可以沿着预定的线串移动地标(甚至更好的模型)。请考虑使用此功能:

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

示例代码:

<?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 :(得分:3)

有一个浏览器插件可让您将Google地球嵌入浏览器页面。在那里,您可以使用JavaScript为地标设置动画,更改路径等。请查看Google Earth API Developer's Guide

答案 3 :(得分:0)

如果您要在Google地球上显示船只,则3D模型将比图像更好,因为用户可以更改视角。

答案 4 :(得分:0)

您可能需要查看游览:http://code.google.com/apis/kml/documentation/touring.html

我已经看到使用(多个)<gx:AnimatedUpdate>标签的组合来移动先前创建的代表您船只的地标和<gx:FlyTo>标签以移动视图(我认为)全部在<gx:Playlist>

希望这会有所帮助。

答案 5 :(得分:0)

我认为这个功能在最初回答时并不存在,但你可以通过游览来达到效果。以下显示了以这种方式移动的地标。

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

路径可以标记为在适当的时间通过巡视改变其可见性的点。

答案 6 :(得分:-1)

我在Google网站上有以下示例。希望这有帮助。

(内部详情:https://sites.google.com/site/canadadennischen888/home/kml/auto-refresh-3d-tracking

  1. 准备RestFul服务以从DB生成KML文件 (样本如https://sites.google.com/site/canadadennischen888/home/kml/3d-tracking

  2. 我的其他代码会生成一个KMZ文件,其中包含指向Restful服务的链接 (本页中的示例)

  3. KMZ文件有onInterval

  4. 网页允许用户下载包含链接到我的Restful服务的URL的KMZ文件

  5. 当Google地球打开KMZ文件时,Google地球会自动刷新以从该Restful服务获取新数据

答案 7 :(得分:-2)