我制作了一个大的 KML 文件。23 MB 长。谷歌地球渲染它很长一段时间,滞后并占用 1GB 内存等等。在较慢的计算机上,它也可能不渲染某些区域。
因此,想法是使用参数化的 GET 请求向服务器返回仅针对具有指定边界的区域的 kml 数据。
GoogleEarth 可以发起和使用此类请求吗?
我制作了一个大的 KML 文件。23 MB 长。谷歌地球渲染它很长一段时间,滞后并占用 1GB 内存等等。在较慢的计算机上,它也可能不渲染某些区域。
因此,想法是使用参数化的 GET 请求向服务器返回仅针对具有指定边界的区域的 kml 数据。
GoogleEarth 可以发起和使用此类请求吗?
您所要求的可以通过 NetworkLink 完成。如果您从 servlet、Web 服务、脚本等动态生成 KML,那么您可以指示 Google 地球发送其视图的边界框,您可以从中生成要返回的 KML。这种方法需要在应用程序服务器/Web 服务器上托管一个自定义“服务”,该服务可以生成 KML 以响应 Google 地球发送的请求。
在您的根级 NetworkLink 中,您需要定义 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 文件中指定基于区域的 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#视图格式
是的,这根本不是问题。您在 Google 地球中将 KML 的源 URL 添加为带有参数的 URL,然后将其作为多个单独的源加载。使用这种方法虽然您只是在将 KML 添加到 GE 时“动态地”提供标准,但从那时起,它看起来就像您将加载的任何其他静态 KML 文件一样。
编辑我现在看到(登录到 GE)它实际上调用了@JasonM1 描述的这些网络链接(在 Add->NetworkLink 下)