23

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

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

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

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

这甚至可能吗?我知道它是用谷歌地图,但你可以用 Javascript 编程,这让事情变得很简单。

4

8 回答 8

12

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

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>
于 2012-02-18T21:57:23.860 回答
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 Earth COM API 使其工作,但它始终是一个脆弱的解决方案。

于 2009-11-04T13:44:00.707 回答
3

有一个浏览器插件可让您将 Google 地球嵌入浏览器页面。从那里您可以使用 JavaScript 为您的地标设置动画、更改您的路径等。查看Google Earth API 开发人员指南

于 2009-11-05T18:39:43.417 回答
0

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

于 2009-10-28T22:50:40.020 回答
0

您可能想查看旅游:http ://code.google.com/apis/kml/documentation/touring.html

我已经看到使用(多个)<gx:AnimatedUpdate>标签的组合来移动先前创建的代表您的船的地标和<gx:FlyTo>用于移动视图(我认为)的标签的组合来完成类似的操作<gx:Playlist>

希望这可以帮助。

于 2009-11-06T19:37:01.527 回答
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>

路径可以用点标记,其可见性在适当的时间被旅游改变。

于 2011-05-06T09:46:20.550 回答
-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 Earth 打开 KMZ 文件时,Google Earth 将自动刷新以从该 Restful 服务获取新数据

于 2015-10-06T18:59:16.647 回答
-2

只是谷歌“公里时间动画”

KML:时间和动画

KML:动画

使用 KML 进行动画和动态更新

于 2009-10-28T22:45:42.177 回答