我正在开发一个应用程序,用一个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)
应用程序将经常更新特定地标,以便在用户请求时居中.它不是一个需要集中的静态地标,而是一个经常变化的地标.
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)
逻辑如下。
flyto已启用,因此视图会移动 MyFlyTo.kml 中的第一个地标等Update三个在MyFlyToRequest.kml 中禁用flyto。如果您需要重新启用 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