我制作了一个大约23 MBytes长的大型KML文件。谷歌地球渲染它的时间非常长,滞后并占用1 1GB的RAM甚至更多。在速度较慢的计算机上,也可能不渲染某些区域。
因此,我们的想法是对服务器使用参数化的GET请求,仅返回具有指定边界的区域的kml数据。
GoogleEarth可以发起和使用这样的请求吗?
发布于 2013-01-30 22:10:55
你所要求的都可以通过NetworkLink来完成。如果您从servlet、web服务、脚本等动态生成KML,则可以指示Google Earth发送其视图的边界框,您可以从中生成要返回的KML。这种方法需要在应用程序服务器/web服务器上托管一个自定义“服务”,该服务可以生成KML以响应Google Earth发送的请求。
在根级servlet中,您需要定义refreshMode=onChange,以便在视图更改时重新进行刷新,同时还需要定义servlet的URL。建议使用viewRefreshTime元素设置viewRefreshMode=onStop,这样在用户停止缩放/移动后1秒才会获取数据,否则会不断刷新数据。此外,还需要viewFormat来指示Google Earth返回视图的边界框。在本例中,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文件中指定基于区域的NetworkLinks。这种方法允许您将数据作为静态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
发布于 2013-01-30 22:13:56
是的,这根本不是问题。您可以在Google Earth中将KML的源URL添加为带参数的URL,然后将其作为多个单独的源进行加载。使用这种方法,您只是在将KML添加到GE时“动态”提供标准,从那时起,它看起来就像您加载的任何其他静态KML文件。
编辑我现在看到(登录到GE)它实际上调用了@JasonM1描述的这些网络链接(在Add->NetworkLink下)
https://stackoverflow.com/questions/14601097
复制相似问题