我制作了一个大型的KML文件。 23 MB长。谷歌地球渲染它很长一段时间,滞后并占用1GB内存和更多。在较慢的计算机上,它也可能不会渲染某些区域。
因此,我们的想法是对服务器使用参数化GET请求,仅返回具有指定边界的区域的kml数据。
GoogleEarth可以发起并使用此类请求吗?
答案 0 :(得分:2)
您可以使用NetworkLink完成所要求的工作。如果您从servlet,Web服务,脚本等动态生成KML,那么您可以指示Google Earth发送其视图的边界框,您可以从中生成要返回的KML。此方法需要在应用服务器/ Web服务器上托管自定义“服务”,该服务可以生成KML以响应Google Earth发送的请求。
在根级NetworkLink中,您需要定义refreshMode = onChange ,以便在视图与servlet的URL一起更改时进行refesh。建议使用viewRefreshTime元素设置viewRefreshMode = onStop ,这样数据仅在用户停止缩放/移动后1秒获取,否则数据会不断刷新。此外,还需要viewFormat来指示Google地球返回视图的边界框。在此示例中,BBOX参数被添加到HTTP GET请求中发送到servlet的HTTP参数中。
<Link>
<href>servlet-url</href>
<refreshMode>onChange</refreshMode>
<viewRefreshMode>onStop</viewRefreshMode>
<viewRefreshTime>1</viewRefreshTime>
<viewFormat>BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]</viewFormat>
</Link>
如果您的数据跨越大面积,那么您可以将数据分解为单独的KML文件,然后在父KML文件中指定基于区域的NetworkLink。这种方法允许您将数据生成为静态KML文件一次,并仅根据用户的视图提供“活动”的数据。
相关教程:
https://developers.google.com/kml/documentation/regions#regionbasednl
参考:
https://developers.google.com/kml/documentation/kmlreference#networklink https://developers.google.com/kml/documentation/kmlreference#region https://developers.google.com/kml/documentation/kmlreference#viewformat
答案 1 :(得分:1)
是的,这根本不是问题。您可以在Google地球中将KML的源网址添加为带参数的网址,然后将其作为多个单独的来源加载。通过这种方法,虽然您只是在向GE添加KML时“动态”提供标准,从那时起,它看起来就像您将加载的任何其他静态KML文件。
编辑我现在看到(登录到GE)它实际上调用了这些网络链接,如@JasonM1所述(在Add-&gt; NetworkLink下)