在Openlayers中显示数千个多边形的最佳方法是什么?


10

我正在尝试创建一个Openlayers地图,该地图将显示数千个多边形。当用户单击每个元素时,我希望显示一些元数据。处理如此庞大的数据集似乎是一项挑战。但是我试图找出是否有标准的方法可以解决此问题。在这一点上,我认为我应该

  1. 使用WMS显示我的多边形并使用getfeatureinfo
  2. 使用WFS进行显示,使用Strategy.BBOX进行加载,并使用GetFeature来获取meatadata。

有没有一种我不希望将所有这些数据加载到地图中并具有良好速度的逻辑方法。我正在查看此页面并试图弄清楚他们做了什么:http : //protectedplanet.net/

Answers:


5

我不喜欢BBOX策略,因为可能会生成大量请求,因此我认为它可能会很慢。

我会结合使用您提到的两件事。

使用WMS显示多边形并使用getfeatureinfo ...,然后使用WFS在单击时加载轮廓特征和/或从数据库中获取更多信息。

protectedplanet.net不仅使用openlayers谷歌地图。他们可能会将所有信息存储在KML / KMZ中。


十分感谢!我想那时候我走对了。但是我想知道protectedplanted是否正在使用KML,我是否应该这样做以提高速度?WFS是否正在提供KML数据?
KyleK 2012年

我不确定是不是KML,只是一个猜测。但是如果是这样的话,WFS就不会提供它,因为WFS使用GML。关于使用Google api和KML的事情是,您需要将KML放在每个人都可以看到的公共URL上。如果那不是问题,那么也许您可以尝试一下。这是因为google将此KML吸收到其服务器中,并将其返回给API。由于这两个原因,由于某些项目的敏感性,我无法使用google maps API。
CaptDragon 2012年

您可以限制对公共KML URL的访问,以仅允许提供Google KML解析器字符串的用户代理。
Sarge,2012年

3

这里的主要方法是将栅格化与交互分开。一种方法(我部分负责)是UTFGrid,该方法已由NPR等使用并已集成到TileMillMapnik中CartoDB也使用它,并且Google Maps对Fusion Tables使用类似的方法。

受保护的星球也使用栅格图块(例如,this:),http://184.73.201.235/blue/8/78/93并且在其后面有一个实时服务器,用于基于点的查询(例如this)。

回复:CaptDragon:不涉及WFS或KML。

WMS和WFS不会为公共站点提供足够好的性能。如果让用户缩放,则BBOX策略将无法正常工作。


仅供参考:您可以缓存WMS栅格服务,该服务将为您提供切片。
CaptDragon 2012年

1
是的,但这不是主要问题,它是交互性。您无法缓存WFS / WMS GetFeature的工作方式,因为它们并非设计为逐块缓存。
tmcw 2012年

我一直在缓存CSW,WFS和WMS GetFeature,GetRecord等结果。这些只是互操作性格式的标准,并不能说明源(无论是否缓存)存储在何处。
CaptDragon 2012年

典型的WFS GetFeature请求是对单个坐标的请求。该请求的缓存仅适用于完全匹配-在用户互动方面很少见。诸如UTFGrid之类的替代方案可以缓存数据切片,并且可以乐观地填充缓存,这与可能存储数百万个单个坐标的缓存不同。这样,标准确实规定了其缓存友好性。
tmcw 2012年

哇-感谢您的帮助。由于我正在使用OpenLayers,而我的地图位于4326中(TileMill不支持),因此您会建议使用CartoDB作为存储和访问我的数据的方式吗?
KyleK 2012年
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.