4

我有一个不断编写/更新 KML 文件的程序,并且我有一个指向该文件的网络链接。在重负载下,如果网络链接在我的程序写入 KML 文件的同时尝试访问 KML 文件,Google 地球将停止对该网络链接的任何进一步自动刷新,假设它已损坏。此时,我必须右键单击 Google Earth 的 Places 窗格中的网络链接,然后点击刷新,以便再次开始自动更新。

我的问题是,是否有任何方法可以强制 Google 地球继续从网络链接读取,即使出现“未检测到文件”错误?因为必须手动点击刷新以使网络链接再次变为活动状态是一件非常麻烦的事情,当看起来该任务似乎可以很容易地自动化时。

我对我的程序进行了无数次优化,以尽量减少写入 KML 文件所花费的时间,但是我已经达到了实际限制,现在必须想办法从 Google 地球中解决这个网络链接问题。

任何回复、评论或讨论将不胜感激!

4

2 回答 2

2

不久前我们遇到了类似的问题。在搜索 google-earth kml 开发者论坛时,一些人建议使用网络链接到网络链接方法,如下所示:

链接到更新的 kml 文件的 KML 文件 1:

<Document>
<NetworkLink>
<Link> my_URL_to_the_updating_kml
<refreshMode>onInterval</refreshMode>
<refreshInterval>my_Inteval</refreshInterval>
</Link>
<name>My_Name</name>
<visibility>1</visibility>
</NetworkLink>
</Document>

链接到上述网络链接文件的 KML 文件 2:

<Document>
<NetworkLink>
<Link>
my_URL_to_the_first_network_link_file
<refreshMode>onInterval</refreshMode>
<refreshInterval>3600</refreshInterval>
</Link>
<name>My_Name</name>
<visibility>1</visibility>
</NetworkLink>
</Document>
于 2013-06-26T20:38:08.127 回答
0

如果您正在写入服务器上的文件,一个简单的技巧是写入临时文件,然后与目标文件交换,如下所示:

  1. 写入临时文件 temp.kml
  2. 删除目标.kml
  3. 重命名 temp.kml 目标.kml

文件的重命名几乎是瞬间完成的,因此 Google 地球客户端不太可能在它被换出的那一刻获取它。根据服务器的操作系统,您还可以使用符号链接在一次操作中更改文件引用。

更新:在写入文件的任何内容中,您可以在共享变量中设置文件名并通过“servlet”提供该文件,该“servlet”打开当前文件的流。networklink 可以指向 servlet 而不是静态 KML 文件。

于 2013-03-03T14:20:16.877 回答