我是KML格式的新手,并尝试弄清楚如何显示船(png),沿着路径从一个地方移动到另一个地方(由几条线组成的简单线条)。
我可以看到如何分别显示地标,即使是图标和路径。
点击KML文件时,我希望看到的是:
这甚至可能吗?我知道这是谷歌地图,但您可以使用Javascript对其进行编程,这样可以减少很多事情。
答案 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)
准备RestFul服务以从DB生成KML文件 (样本如https://sites.google.com/site/canadadennischen888/home/kml/3d-tracking)
我的其他代码会生成一个KMZ文件,其中包含指向Restful服务的链接 (本页中的示例)
KMZ文件有onInterval
网页允许用户下载包含链接到我的Restful服务的URL的KMZ文件
当Google地球打开KMZ文件时,Google地球会自动刷新以从该Restful服务获取新数据
答案 7 :(得分:-2)
只需谷歌“kml time animation”