KML网络链接 - 飞往

时间:2011-09-09 13:24:52

标签: kml google-earth

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

Network Link有一个标记,可以飞到文件中的第一个地标或FlyTo。但是,这将在文件刷新时执行fly,在我的情况下,就是Time Interval到期时。有没有什么方法可以让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>  

应用程序将经常更新特定地标,以便在用户请求时居中。它不是一个需要集中的静态地标,而是一个经常变化的地标。

1 个答案:

答案 0 :(得分:2)

我相信您可以通过结合使用ID属性以及Kml中的NetworkLinkControlUpdate元素来实现此目的。

MyFlyToRequest.kml文件包含加载数据文件的NetworkLink,其中包含您的数据,它将flyToView元素设置为true。另请注意,网络链接的ID也为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是加载的文件。它有你当前的数据..但是,它还有一个额外的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,其目标是第一个MyFlyToRequest.kml文件中的request NetworkLink。它只是将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只是再次回复了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. TurnOffFlyTo.kml中的Update三次禁用MyFlyToRequest.kml中的flyto
  5. 文件一,刷新,加载文件二......
  6. 如果您需要重新启用flyto,只需加载File 4即可。如果您正在生成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