【问题标题】:KML Network Link - Fly ToKML 网络链接 - 飞至
【发布时间】:2011-09-09 13:24:52
【问题描述】:

我正在开发一个应用程序,该应用程序使用一个 KML 文件启动 Google 地球,该文件通过 <NetworkLink> 链接到其他本地文件,它会刷新时间间隔。我正在尝试定义一个 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>  

当用户请求时,应用程序会频繁更新要居中的特定地标。它不是需要居中的静态地标,而是会经常变化的地标。

【问题讨论】:

    标签: kml google-earth


    【解决方案1】:

    我相信您可以通过在 Kml 中结合使用 ID 属性和 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>
    

    最终文件 @​​987654336@ 再次简单地重新切换 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. 文件一、刷新、加载文件二...

    如果您需要重新启用 flyto,您只需加载文件 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

    【讨论】:

    • 这是一个非常酷的想法。我在我的 OP 中没有详细介绍的一件事是地标数据经常发生变化。我想我可能不需要 TurnOnFlyTo.kml,而且每次我只是重新加载前 3 个文件,但我不确定 GE 将采取的执行顺序。
    • 另外,MyFlyTo.kmz 似乎不是有效的 kml 文档。我认为您不能拥有 节点。
    • 有一个网络链接和文档很好,可能有一个错字,因为我刚刚在答案中把它全部写出来。尝试将地标和链接都放在文档元素中。
    • 我已经编辑了 MyFlyTo.kmz 文件以展示如何 - 示例取自 code.google.com/apis/kml/documentation/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 1970-01-01
    • 2013-03-14
    • 2019-04-24
    相关资源
    最近更新 更多