KML网络链接 - 飞往

Ste*_*bbi 5 kml google-earth

我正在开发一个应用程序,用一个KML文件启动Google Earth,该文件通过<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>  
Run Code Online (Sandbox Code Playgroud)

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

Fra*_*ser 2

ID我相信您可以通过使用 Kml 中的属性和NetworkLinkControl和元素的组合来实现此目的Update

MyFlyToRequest.kml 文件包含加载数据文件的 NetworkLink,其中包含您的数据,它的元素flyToView设置为 true。另请注意,网络链接也有一个 idrequest

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>
Run Code Online (Sandbox Code Playgroud)

第二个文件 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>
Run Code Online (Sandbox Code Playgroud)

新的第三个文件TurnOffFlyTo.kml是设置的关键部分,它包含一个NetworkLinkControl针对request第一个 MyFlyToRequest.kml 文件中的 NetworkLink 的文件。它只是将flyToViewelement 设置为 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>
Run Code Online (Sandbox Code Playgroud)

最终文件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>
Run Code Online (Sandbox Code Playgroud)

逻辑如下。

  1. MyFlyToRequest.kml 加载 MyFlyTo.kml
  2. flyto已启用,因此视图会移动 MyFlyTo.kml 中的第一个地标等
  3. MyFlyTo.kml 中的链接加载 TurnOffFlyTo.kml。
  4. TurnOffFlyTo.kml 中的Update三个在MyFlyToRequest.kml 中禁用flyto
  5. 文件一,刷新,加载文件二...

如果您需要重新启用 Flyto,您只需加载文件四即可。如果 MyFlyTo.kmz 中的数据是由您生成的,则只需在调用 TurnOffFlyTo.kml 的位置加载 TurnOnFlyTo.kml 即可。

尽管如此,这还没有经过测试,因此可能无法按原样工作,尽管原则上我不明白为什么它不会。

如果这听起来像是您可以尝试的事情,这里有一些应该有所帮助的资源。

NetworkLink 控制参考

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

使用更新

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