GML,KML,GeoJSON-快速渲染3109个多边形?


12

我正在与Geoserver合作,为美国下48个县提供openlayers(3109个多边形-还有更多的顶点)。县将加载到postgis数据库中。当我尝试将大量顶点推向客户端时,我对开发人员的经验感到好奇。

您以哪种WFS格式获得了最佳效果?是否使用了对Geoserver的其他调整?

我意识到平铺的WMS会更快,但是我想允许使用openLayers在choropleth映射中进行动态更改。用户提交表单,调用Python脚本,并返回新数据仓供openlayers重新加载map div。我还想以全分辨率形式尝试此操作,然后再降低openlayers中的多边形复杂度。

Answers:


4

也许这会触发一些新的想法:我有一个正在运行的应用程序,用户可以在其中编辑包含许多元素的地图。

我使用WMS映射,而不是将所有数据作为WFS发送,并且当用户单击或绘制选择时,我将选择的项目作为WFS获取

将更新发送回服务器后,我刷新WMS层。

有一些OpenLayers示例演示了如何做到这一点。您可能需要稍作调整,但是OpenLayers + GeoServer将为您解决难题。数据以压缩方式发送,因此原始格式甚至没有那么重要。这不是瓶颈。让OpenLayers和GeoServer找出它们用来交换信息的格式。

这种方法可以很好地扩展。即使连接速度较慢且计算机速度较慢的人也可以使用它来编辑地图。提取数百个元素非常快,并且您可能不需要同时进行更多编辑。

最后,脱离主题,但是当您打算使用地图数据处理客户端内容时:请记住,如果要使用OpenLayers绘制多边形,则IE7及更低版本将存在问题。OpenLayers使用SVG进行客户端绘图,并且IE7和更低版本没有内置支持。这些用户将被要求下载一个糟糕的旧插件。所有其他浏览器都可以。


IE8将几乎一样糟糕。OpenLayers有多个渲染器,对于不支持Canvas或SVG的浏览器,SVG将使用IE7支持的VML。不同的渲染器在不同位置提供更好和更差的性能,例如,渲染与鼠标悬停和单击检测
tomfumb 2013年

3

我认为GEOJSON是最好的格式,它易于阅读,可在javascript中使用,并且尺寸通常小于GML / KML。它甚至可以包含有关样式的信息,请参见此处

它不是官方标准,但在传单和openlayers以及qgis等许多gis桌面应用程序中均受支持。


2

使用GeoJSON是加快系统速度的一个不错的开始,但可能还不够。您应该考虑构建数据层的多个版本,每个缩放层一个,然后对每个版本应用归纳/简化方法。客户应根据所选缩放级别请求相关图层。这将确保服务器和客户端之间交换的数据的详细程度合适,并且将大大提高网络传输和呈现的效率。为了进一步讲解,您可以按照本文档中的描述使用矢量平铺和空间索引扩展系统,但是我不确定openlayers和geoserver是否可以处理它……但是!

当然:忘记GML。


当全分辨率WFS太慢时,这是我的后备方法。我对这种大小的问题感兴趣,希望能够报告完整的分辨率速度,并在必要时报告降低的分辨率速度。
杰伊·劳拉

2

为什么不使用python脚本创建一个新的SLD文件,并根据您的请求将其发送到WMS服务器。

有一个例子在这里


我已经考虑过了,可能会测试此选项的速度。这不是为了发展,而是为了研究,所以我想尝试一下WFS。
杰伊·劳拉

1

我已经走过两次类似的路,客户端渲染只需要少量点或非常简单的多边形,这不是一个好主意。一旦将自己与该体系结构绑定在一起,退出该视图的成本就很高,在任何项目中,随着各种利益相关者/主管开始了解您系统的功能,您都可能会看到需求的变化或数据量的增加。基于浏览器的客户端呈现方法无法缩放。

如果要动态渲染,我会第二个@iant的方法。之前,我在这里描述了针对不同但相关问题的多种选择。我还使用了多边形归纳来协助客户端渲染,尽管它确实有帮助,但它会产生更困难的问题,例如,当用户进一步放大时,如果您想拉下非广义的多边形。

即使您正在使用一个已知的平台(例如,您知道所有客户端的硬件,浏览器版本和插件),这都是不太可能的,您也不知道这些客户端承受的负载是什么。这种方法要求浏览器获得大量CPU时间,以保持用户体验的流畅,而其他任何事情都会使您的用户烦恼。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.