2011-09-09 55 views
4

我正在开发一个应用程序,通过<NetworkLink>(启动时间间隔刷新)链接到其他本地文件的KML文件启动Google地球。我正在尝试定义一个将地图居中(飞到)特定位置的KML文件。KML网络链接 - 飞到

Network Link有一个标签,它会飞到文件中的第一个地标或FlyTo。但是,只要文件被刷新,这将执行飞行,在我的情况下,是时间间隔到期。有什么方法可以让fly-to命令只在链接的网络文件发生更改时执行,而不是每次都执行?有没有办法让Fly To处理一次,直到链接的文件被改变了?我的NetworkLink文件定义如下:

<NetworkLink> 
    <name>My Fly To Request</name> 
    <Link> 
     <href>MyFlyTo.kmz</href> 
     <refreshMode>onInterval</refreshMode> 
     <refreshInterval>2</refreshInterval> 
    </Link> 
    </NetworkLink> 

应用程序会经常更新特定的地标,以用户请求为中心。它不是一个需要以中心为中心的静态地标,而是一个会经常变化的地标。

回答

2

我相信你可以通过在Kml中使用ID属性和NetworkLinkControlUpdate元素的组合来实现此目的。

MyFlyToRequest.kml文件包含加载数据文件的NetworkLink,其中包含数据,它的flyToView元素设置为true。通知过的网络链接也有request

MyFlyToRequest.kml

<?xml version="1.0" encoding="UTF-8"?> 
<kml xmlns="http://www.opengis.net/kml/2.2"> 
<NetworkLink id="request"> 
    <name>My Fly To Request</name> 
    <Link> 
     <href>http://www.yourserver.com/MyFlyTo.kmz</href> 
     <refreshMode>onInterval</refreshMode> 
     <refreshInterval>2</refreshInterval> 
    </Link> 
    <flyToView>1</flyToView> 
</NetworkLink> 
</kml> 

第二个文件,MyFlyTo.kmz的ID,是加载的一个。它有你当前的数据,但是,它也会有一个额外的NetworkLink加载一个新的第三个文件。

MyFlyTo.kmz - 编辑

<?xml version="1.0" encoding="UTF-8"?> 
<kml xmlns="http://www.opengis.net/kml/2.2"> 
<Document id="data"> 
    <visibility>1</visibility> 
    <NetworkLink> 
    <name>Update MyFlyToRequest</name> 
    <Link> 
     <href>http://www.yourserver.com/TurnOffFlyTo.kml</href> 
    </Link> 
    </NetworkLink> 
    <Placemark> 
    <name>This is flown to once (hopefully)</name> 
     <Point> 
     <coordinates>52,0,0</coordinates> 
     </Point> 
    </Placemark> 
</Document> 
</kml> 

新的第三个文件是TurnOffFlyTo.kml的关键设立的一部分,它包含了NetworkLinkControl为目标的request网络链接在第一MyFlyToRequest.kml文件。它只是设置flyToView元素为0

TurnOffFlyTo.kml

<?xml version="1.0" encoding="UTF-8"?> 
<kml xmlns="http://www.opengis.net/kml/2.2"> 
<NetworkLinkControl> 
    <Update> 
    <targetHref>http://www.yourserver.com/MyFlyToRequest.kml#request</targetHref> 
    <Change> 
     <NetworkLink id="request"> 
      <!-- turn off the flyto behaviour --> 
      <flyToView>0</flyToView> 
     </NetworkLink> 
    </Change> 
    </Update> 
</NetworkLinkControl> 
</kml> 

最终文件TurnOnFlyTo.kml只需再次retoggles的一个FlyTo行为。

TurnOnFlyTo.kml

<?xml version="1.0" encoding="UTF-8"?> 
<kml xmlns="http://www.opengis.net/kml/2.2"> 
<NetworkLinkControl> 
    <Update> 
    <targetHref>http://www.yourserver.com/MyFlyToRequest.kml#request</targetHref> 
    <Change> 
     <NetworkLink id="request"> 
      <!-- turn off the flyto behaviour --> 
      <flyToView>1</flyToView> 
     </NetworkLink> 
    </Change> 
    </Update> 
</NetworkLinkControl> 
</kml> 

的逻辑如下。

  1. MyFlyToRequest.kml负载MyFlyTo.kml
  2. flyto被启用,因此所述视图移动第一第一标,等等,在MyFlyTo.kml
  3. 链路在MyFlyTo.kml负载TurnOffFlyTo.kml。
  4. Update in TurnOffFlyTo。kml三个在MyFlyToRequest.kml中禁用flyto
  5. 文件之一,刷新,加载文件中的两个...

如果需要重新启用一个FlyTo,您只需将装载文件四强。如果MyFlyTo.kmz中的数据是由您生成的,那么在TurnOffFlyTo.kml被调用的地方加载TurnOnFlyTo.kml就是一个简单的例子。

所有这一切说,这是没有测试,因此可能无法正常工作,虽然原则上我不明白为什么它不会。

如果听起来像你可能尝试的东西是一些应该帮助的资源。

NetworkLinkControl中参考

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

使用更新

http://code.google.com/apis/kml/documentation/updates.html

+0

这是一个很酷的想法。我没有详细介绍OP的一点是,地标数据经常发生变化。我想我可能不需要TurnOnFlyTo.kml,每次我只是重新加载前3个文件,但我不确定GE将执行的执行顺序。 –

+0

另外,MyFlyTo.kmz似乎不是有效的kml文档。我不认为你可以有一个节点。 –

+0

有一个网络链接和文件是好的,有可能是一个错字,因为我只是写在答案中。尝试将地点标记和链接都放在文档元素中。 – Fraser