1

我制作了一个大的 KML 文件。23 MB 长。谷歌地球渲染它很长一段时间,滞后并占用 1GB 内存等等。在较慢的计算机上,它也可能不渲染某些区域。

因此,想法是使用参数化的 GET 请求向服务器返回仅针对具有指定边界的区域的 kml 数据。

GoogleEarth 可以发起和使用此类请求吗?

4

2 回答 2

2

您所要求的可以通过 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#视图格式

于 2013-01-30T14:10:54.893 回答
1

是的,这根本不是问题。您在 Google 地球中将 KML 的源 URL 添加为带有参数的 URL,然后将其作为多个单独的源加载。使用这种方法虽然您只是在将 KML 添加到 GE 时“动态地”提供标准,但从那时起,它看起来就像您将加载的任何其他静态 KML 文件一样。

编辑我现在看到(登录到 GE)它实际上调用了@JasonM1 描述的这些网络链接(在 Add->NetworkLink 下)

于 2013-01-30T14:13:55.603 回答