【问题标题】:Is it possible to push KML to Google Earth?是否可以将 KML 推送到 Google 地球?
【发布时间】:2013-06-03 18:02:33
【问题描述】:

我编写了一个网络应用程序,它使用 Google 地球插件将数十个(如果不是数百个)地理标记数据源可视化为网络链接。此时,获取显示屏更新的唯一方法是在每个网络链接上设置自动刷新。但是,由于链接多且刷新间隔短(1-2 秒),托管链接的服务器很容易不堪重负(CPU 使用率高达近 100%)。很多这些更新没有返回数据,因此我希望我可以使用推送机制并能够根据新数据将 KML 更新推送回客户端 - 这将为我节省大量处理时间。有没有办法将 KML 异步推送到 GE 插件(最好是 Java 中)?

【问题讨论】:

    标签: kml google-earth-plugin


    【解决方案1】:

    理论上可以通过长轮询的形式做到这一点。

    您只需将服务器设置为保持连接打开,并定期检查是否有新内容可用,一旦有,它就会将其返回给客户端。

    GE 只会打开一个连接 perk 网络链接,因此当连接保持打开状态时,什么都不会发生,旧内容是可见的。数据刷新后,X 秒后将打开一个新连接。重复这个过程。

    服务器需要能够保持大量连接打开,但它们大多是休眠的,所以不应该造成任何负载。 (你只需要一个能够做到这一点的网络服务器应用程序)

    但实际上它充满了陷阱。主要是如果GE和服务器之间有任何代理,他们经常会在发生任何事情之前超时,并切断连接。不幸的是,一旦网络链接发生故障,GE 通常会停止尝试更新该链接。


    也可以使用 KML 中内置的 Update 机制。这样你就只有一个,刷新网络链接。但是要可靠地工作可能会很棘手。


    最后,可能也是最推荐的 - 是在 Javascript 中实现插件之外的刷新机制。因此,更新后的链接被推送到 Javascript 容器,然后在需要时专门刷新某些内容。

    可以在 JS 中使用类似的长轮询,或者可以使用 websockets 之类的东西来推送通知。有一些健壮的实现可以重用。

    【讨论】:

    • 非常感谢您的详细解答!长轮询听起来像是一个有趣的想法,它可能是我问题的答案。只有一个令人耳目一新的链接——这听起来更复杂,但也许更好,我需要重新审视用例,看看是否可以这样做。我没有意识到 KML 更新可以更新多个文档。至于您的最后(推荐)建议 - 我不完全确定我理解它。你能指点我一些资源/例子吗?我正在使用 GWT(GUI、AJAX)和 Servlet(服务器端的 KML 更新)。谢谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    • 2017-11-18
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多